CV / MobileSAM

MobileSAM

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

31 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

Snel aan de slag

1. Docker installeren

Voer de volgende opdrachten op het ontwikkelbord uit om Docker te installeren:

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. Het project uitvoeren (één opdracht, voorbeeld in twee modi)

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

Stap A: Images ophalen

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

Stap B: Met één klik uitvoeren

Voor 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

Voor 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.


🔌 API-documentatie

1. Segmentatie met prompts (Predict)

Endpoint: POST /api/models/mobilesam/predict

Aanvraagparameters (Multipart/Form-Data):

Upload file en geef twee punten of kaderhoeken op met point_coords en point_labels.

Gebruiksvoorbeelden:

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.

2. Interface voor systeemconfiguratie (Config)

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.

3. Opdrachtregelargumenten

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.


Realtime videostream (Video Feed)

Haal de nieuwste geannoteerde MJPEG-stream op voor de browserweergave:

  • Endpoint: GET /api/video_feed
  • Voorbeeldgebruik: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Ontwikkelaarshandleiding (aanbevelingen voor productie)

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.