CV / MobileSAM

MobileSAM

Prompt-based MobileSAM image segmentation with RKNN encoder and decoder models.

31 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

Schnellstart

1. Docker installieren

Führen Sie auf dem Entwicklungsboard die folgenden Befehle aus, um Docker zu installieren:

bash
# Docker
curl -fsSL https://get.docker.com -o get-docker.sh
# Aliyun
sudo sh get-docker.sh --mirror Aliyun
# systemd
sudo systemctl enable docker
sudo systemctl start docker

2. Projekt ausführen (ein Befehl, Vorschau in zwei Modi)

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

Schritt A: Images abrufen

bash
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-mobilesam:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mobilesam:latest

Schritt B: Mit einem Klick ausführen

Für 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

Für 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.


🔌 API-Dokumentation

1. Prompt-basierte Segmentierung (Predict)

Endpunkt: POST /api/models/mobilesam/predict

Anfrageparameter (Multipart/Form-Data):

Laden Sie file hoch und geben Sie mit point_coords und point_labels zwei Punkte oder Rahmenecken an.

Anwendungsbeispiele:

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.

2. Schnittstelle zur Systemkonfiguration (Config)

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.

3. Befehlszeilenargumente

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.


Echtzeit-Videostream (Video Feed)

Rufen Sie den neuesten annotierten MJPEG-Stream für die Browservorschau ab:

  • Endpunkt: GET /api/video_feed
  • Beispiel: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Entwicklerleitfaden (Empfehlungen für den Produktionseinsatz)

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.