CV / MobileSAM

MobileSAM

Segment objects using a box or foreground/background point prompts in the Web UI or REST API.

16 downloads
Precisie
RKNN

Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.

Aan de slag

Implementeren
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mobilesam:latest \
  python web_service.py --platform rk3576 --model_dir /app/model --camera_id -1 --host 0.0.0.0 --port 8000

REST API

Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "mobilesam-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "mobilesam-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

Modeldetails

MobileSAM op reComputer RK3576 en RK3588

Deze implementatie verpakt Mobile Segment Anything uit reComputer-RK-CV. De afbeeldingsencoder en vaste decoder met twee prompts draaien beide als RKNN-modellen.

Modelinformatie

ComponentBestand
Afbeeldingsencodermodel/mobilesam_encoder.rknn
Promptdecodermodel/mobilesam_decoder.rknn
Voorverwerking van invoer448 x 448
PromptsVak of voorgrond-/achtergrondpunten
UitvoerMasker, index van geselecteerd masker, kwaliteitsscore en aantal pixels

De service uitvoeren

RK3576

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mobilesam:latest \
  python web_service.py --platform rk3576 --model_dir /app/model \
  --camera_id -1 --host 0.0.0.0 --port 8000

RK3588

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-mobilesam:latest \
  python web_service.py --platform rk3588 --model_dir /app/model \
  --camera_id -1 --host 0.0.0.0 --port 8000

Open http://<BOARD_IP>:8000 om een afbeelding te uploaden en een vak te tekenen of voorgrond-/achtergrondpunten toe te voegen. De huidige prompt wordt gedeeld door beeld-, camera-, lokale-video- en uploadvideo-inferentie totdat deze wordt gewijzigd.

Invoermodi en opstartargumenten

ArgumentStandaardBeschrijving
--platformVereistrk3576 of rk3588.
--model_dirmodelMap voor encoder, decoder en opwarmingsafbeelding.
--camera_id-1Camera-index; -1 schakelt alleen uploads in.
--video, --video_pathGeenLokale video in een lus; overschrijft de camera.
--host / --port0.0.0.0 / 8000Serviceadres en poort.

De webinterface ondersteunt een getekend vak, positief punt, negatief punt en prompt voor de volledige afbeelding. Een promptwijziging beïnvloedt volgende stream- en uploadvideoframes zonder de container opnieuw te starten.

REST API

Endpoint: POST /api/models/mobilesam/predict

Het multipart-verzoek accepteert file, point_coords en point_labels. point_coords moet exact twee coördinaten in de bronafbeelding bevatten. SAM-labels zijn 0 voor een negatief punt, 1 voor een positief punt, 2 voor de linkerbovenhoek en 3 voor de rechteronderhoek.

bash
curl -X POST "http://<BOARD_IP>:8000/api/models/mobilesam/predict" \
  -F "file=@picture.jpg" \
  -F 'point_coords=[[190,70],[460,280]]' \
  -F 'point_labels=[2,3]'

De runtime schaalt promptcoördinaten naar de encoderinvoer, voert encoder en decoder uit, selecteert het gevraagde of best scorende masker en herstelt het op de bronafbeelding. Ook status-, configuratie-, MJPEG- en asynchrone video-interfaces zijn beschikbaar.

Het antwoord bevat iou_scores, selected_mask, mask_pixels en de effectieve prompt. GET /api/config geeft de blijvende streamprompt terug; POST /api/config accepteert point_coords en point_labels, of beide als null om volledige-afbeeldingsmodus te herstellen. Algemene waarden threshold en topk veranderen de maskerselectie niet.

Geüploade video’s gebruiken de blijvende prompt die actief is wanneer de analyse start. De standaardendpoints /api/video/* bieden upload, analyse, voortgang, lijst en download.

Encoder en decoder zijn pipelinefasen, geen alternatieve modelgroottes. Beide bestanden moeten compatibel blijven wanneer een model wordt vervangen. De encoder behoudt de beeldverhouding, schaalt de lange zijde naar 448 en vult aan tot 448 x 448; de vaste decoder vereist exact twee promptcoördinaten en labels.

Lokaal bouwen

bash
docker build -f docker/rk3576/mobilesam.dockerfile \
  -t rk3576-mobilesam:local src/rk3576_mobilesam

docker build -f docker/rk3588/mobilesam.dockerfile \
  -t rk3588-mobilesam:local src/rk3588_mobilesam

Invoer en uitvoer

Input: image plus box or point prompts. Output: segmentation mask, mask score, and overlay.