CV / MobileSAM
MobileSAM
Prompt-based MobileSAM image segmentation with RKNN encoder and decoder models.
Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.
Aan de slag
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 8000REST API
Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "mobilesam-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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:
# 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 docker2. 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
| Component | Bestand |
|---|---|
| Afbeeldingsencoder | model/mobilesam_encoder.rknn |
| Promptdecoder | model/mobilesam_decoder.rknn |
| Voorverwerking van invoer | 448 x 448 |
| Prompts | Vak of voorgrond-/achtergrondpunten |
| Uitvoer | Masker, index van geselecteerd masker, kwaliteitsscore en aantal pixels |
Stap A: Images ophalen
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:latestStap B: Met één klik uitvoeren
Voor RK3576:
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 8000Voor RK3588:
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 8000Open 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:
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
| Argument | Standaard | Beschrijving |
|---|---|---|
--platform | Vereist | rk3576 of rk3588. |
--model_dir | model | Map voor encoder, decoder en opwarmingsafbeelding. |
--camera_id | -1 | Camera-index; -1 schakelt alleen uploads in. |
--video, --video_path | Geen | Lokale video in een lus; overschrijft de camera. |
--host / --port | 0.0.0.0 / 8000 | Serviceadres 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
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_mobilesamInvoer en uitvoer
Input: image plus box or point prompts. Output: segmentation mask, mask score, and overlay.