CV / MobileSAM

MobileSAM

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

16 Downloads
Präzision
RKNN

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Bereitstellen
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

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

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())

Modelldetails

MobileSAM auf reComputer RK3576 und RK3588

Diese Bereitstellung paketiert Mobile Segment Anything aus reComputer-RK-CV. Bildencoder und fester Zwei-Prompt-Decoder laufen beide als RKNN-Modelle.

Modellinformationen

KomponenteDatei
Bildencodermodel/mobilesam_encoder.rknn
Prompt-Decodermodel/mobilesam_decoder.rknn
Eingabevorverarbeitung448 x 448
PromptsBox oder Vordergrund-/Hintergrundpunkte
AusgabeMaske, Index der gewählten Maske, Qualitätswert und Pixelanzahl

Dienst starten

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

Öffnen Sie http://<BOARD_IP>:8000, laden Sie ein Bild hoch und zeichnen Sie eine Box oder setzen Sie Vordergrund-/Hintergrundpunkte. Der aktuelle Prompt wird bis zu einer Änderung für Bild-, Kamera-, lokale Video- und Uploadvideo-Inferenz gemeinsam verwendet.

Eingabemodi und Startargumente

ArgumentStandardBeschreibung
--platformErforderlichrk3576 oder rk3588.
--model_dirmodelVerzeichnis für Encoder, Decoder und Aufwärmbild.
--camera_id-1Kameraindex; -1 aktiviert nur Uploads.
--video, --video_pathKein WertLokales Video in Schleife; überschreibt die Kamera.
--host / --port0.0.0.0 / 8000Dienstadresse und Port.

Die Weboberfläche unterstützt gezogene Box, positiven Punkt, negativen Punkt und Vollbild-Prompt. Änderungen wirken ohne Containerneustart auf nachfolgende Stream- und Uploadvideo-Frames.

REST API

Endpunkt: POST /api/models/mobilesam/predict

Die Multipart-Anfrage akzeptiert file, point_coords und point_labels. point_coords muss genau zwei Koordinaten im Quellbild enthalten. SAM-Labels sind 0 für einen negativen Punkt, 1 für einen positiven Punkt, 2 für die linke obere und 3 für die rechte untere Ecke.

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]'

Die Laufzeit skaliert Prompt-Koordinaten zur Encodereingabe, führt Encoder und Decoder aus, wählt die angeforderte oder bestbewertete Maske und stellt sie im Quellbild wieder her. Zustands-, Konfigurations-, MJPEG- und asynchrone Videoschnittstellen sind ebenfalls verfügbar.

Die Antwort enthält iou_scores, selected_mask, mask_pixels und den wirksamen Prompt. GET /api/config liefert den persistenten Stream-Prompt; POST /api/config akzeptiert point_coords und point_labels, oder beide als null für Vollbildmodus. Allgemeine Werte threshold und topk ändern die Maskenauswahl nicht.

Hochgeladene Videos verwenden den beim Analysestart aktiven persistenten Prompt. Die Standardendpunkte /api/video/* bieten Upload, Analyse, Fortschritt, Liste und Download.

Encoder und Decoder sind Pipeline-Stufen und keine Größenvarianten. Beim Ersetzen eines Modells müssen beide Dateien kompatibel bleiben. Der Encoder erhält das Seitenverhältnis, skaliert die lange Seite auf 448 und füllt auf 448 x 448 auf; der feste Decoder erfordert genau zwei Prompt-Koordinaten und Labels.

Lokal bauen

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

Eingaben und Ausgaben

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