CV / MobileSAM
MobileSAM
Segment objects using a box or foreground/background point prompts in the Web UI or REST API.
Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.
Pour commencer
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 8000API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
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())Détails du modèle
MobileSAM sur reComputer RK3576 et RK3588
Ce déploiement empaquette Mobile Segment Anything de reComputer-RK-CV. L’encodeur d’image et le décodeur fixe à deux prompts s’exécutent comme modèles RKNN.
Informations sur le modèle
| Composant | Fichier |
|---|---|
| Encodeur d’image | model/mobilesam_encoder.rknn |
| Décodeur de prompts | model/mobilesam_decoder.rknn |
| Prétraitement de l’entrée | 448 x 448 |
| Prompts | Boîte ou points de premier plan/arrière-plan |
| Sortie | Masque, indice du masque sélectionné, score de qualité et nombre de pixels |
Exécuter le service
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 8000RK3588
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 8000Ouvrez http://<BOARD_IP>:8000 pour téléverser une image et tracer une boîte ou ajouter des points de premier plan/arrière-plan. Le prompt courant est partagé entre l’image, la caméra, la vidéo locale et la vidéo téléversée jusqu’à sa modification.
Modes d’entrée et arguments de démarrage
| Argument | Valeur par défaut | Description |
|---|---|---|
--platform | Obligatoire | rk3576 ou rk3588. |
--model_dir | model | Répertoire de l’encodeur, du décodeur et de l’image de préchauffage. |
--camera_id | -1 | Indice de caméra ; -1 active uniquement les téléversements. |
--video, --video_path | Aucun | Vidéo locale en boucle ; remplace la caméra. |
--host / --port | 0.0.0.0 / 8000 | Adresse et port du service. |
L’interface Web prend en charge une boîte tracée, un point positif, un point négatif et un prompt sur l’image entière. La modification du prompt affecte les images suivantes du flux et des vidéos téléversées sans redémarrer le conteneur.
REST API
Endpoint : POST /api/models/mobilesam/predict
La requête multipart accepte file, point_coords et point_labels. point_coords doit contenir exactement deux coordonnées de l’image source. Les labels SAM sont 0 pour un point négatif, 1 pour un point positif, 2 pour le coin supérieur gauche de la boîte et 3 pour le coin inférieur droit.
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]'Le runtime adapte les coordonnées du prompt à l’entrée de l’encodeur, exécute l’encodeur et le décodeur, choisit le masque demandé ou le mieux noté, puis le restaure sur l’image source. Les interfaces d’état, de configuration, MJPEG et vidéo asynchrone sont également disponibles.
La réponse contient iou_scores, selected_mask, mask_pixels et le prompt effectif. GET /api/config renvoie le prompt persistant du flux ; POST /api/config accepte point_coords et point_labels, ou les deux à null pour rétablir le mode image entière. Les valeurs génériques threshold et topk ne modifient pas la sélection du masque.
Les vidéos téléversées utilisent le prompt persistant actif au démarrage de l’analyse. Les endpoints standard /api/video/* assurent le téléversement, l’analyse, la progression, la liste et le téléchargement.
L’encodeur et le décodeur sont des étapes du pipeline, pas des variantes de taille. Les deux fichiers doivent rester compatibles lors du remplacement de l’un d’eux. L’encodeur conserve le ratio, redimensionne le côté long à 448 et complète jusqu’à 448 x 448 ; le contrat du décodeur exige exactement deux coordonnées et labels de prompt.
Compiler localement
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_mobilesamEntrées et sorties
Input: image plus box or point prompts. Output: segmentation mask, mask score, and overlay.