CV / MobileSAM

MobileSAM

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

31 téléchargements
Précision
RKNN

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Déployer
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

API REST

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

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

Détails du modèle

Démarrage rapide

1. Installer Docker

Exécutez les commandes suivantes sur la carte de développement pour installer Docker :

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. Exécuter le projet (une commande, aperçu double mode)

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

ComposantFichier
Encodeur d’imagemodel/mobilesam_encoder.rknn
Décodeur de promptsmodel/mobilesam_decoder.rknn
Prétraitement de l’entrée448 x 448
PromptsBoîte ou points de premier plan/arrière-plan
SortieMasque, indice du masque sélectionné, score de qualité et nombre de pixels

Étape A : télécharger les images

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

Étape B : exécuter en un clic

Pour 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

Pour 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

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


🔌 Documentation de l’API

1. Segmentation guidée (Predict)

Endpoint : POST /api/models/mobilesam/predict

Paramètres de requête (Multipart/Form-Data) :

Téléversez file et indiquez deux points ou coins avec point_coords et point_labels.

Exemples d’utilisation :

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

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.

2. Interface de configuration système (Config)

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.

3. Arguments de ligne de commande

ArgumentValeur par défautDescription
--platformObligatoirerk3576 ou rk3588.
--model_dirmodelRépertoire de l’encodeur, du décodeur et de l’image de préchauffage.
--camera_id-1Indice de caméra ; -1 active uniquement les téléversements.
--video, --video_pathAucunVidéo locale en boucle ; remplace la caméra.
--host / --port0.0.0.0 / 8000Adresse 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.


Interface de flux vidéo en temps réel (Video Feed)

Obtenez le dernier flux MJPEG annoté pour l’aperçu dans le navigateur :

  • Endpoint: GET /api/video_feed
  • Exemple d’utilisation: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Guide du développeur (recommandations de production)

Compiler localement

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

Entrées et sorties

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