CV / MobileSAM

MobileSAM

Segment objects using a box or foreground/background point prompts in the Web UI or REST API.

16 descargas
Precisión
RKNN

Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.

Primeros pasos

Desplegar
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

Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.

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

Detalles del modelo

MobileSAM en reComputer RK3576 y RK3588

Este despliegue empaqueta Mobile Segment Anything de reComputer-RK-CV. El codificador de imagen y el decodificador fijo de dos prompts se ejecutan como modelos RKNN.

Información del modelo

ComponenteArchivo
Codificador de imagenmodel/mobilesam_encoder.rknn
Decodificador de promptsmodel/mobilesam_decoder.rknn
Preprocesamiento de entrada448 x 448
PromptsCuadro o puntos de primer plano/fondo
SalidaMáscara, índice de máscara seleccionado, puntuación de calidad y número de píxeles

Ejecutar el servicio

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

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

Abra http://<BOARD_IP>:8000 para subir una imagen y dibujar un cuadro o añadir puntos de primer plano/fondo. El prompt actual se comparte entre la inferencia de imagen, cámara, vídeo local y vídeo subido hasta que se cambie.

Modos de entrada y argumentos de inicio

ArgumentoPredeterminadoDescripción
--platformObligatoriork3576 o rk3588.
--model_dirmodelDirectorio del codificador, decodificador e imagen de calentamiento.
--camera_id-1Índice de cámara; -1 habilita solo las cargas.
--video, --video_pathNingunoVídeo local en bucle; prevalece sobre la cámara.
--host / --port0.0.0.0 / 8000Dirección y puerto del servicio.

La interfaz web admite un cuadro arrastrado, punto positivo, punto negativo y prompt de imagen completa. La actualización del prompt afecta a los siguientes fotogramas del flujo y del vídeo subido sin reiniciar el contenedor.

REST API

Endpoint: POST /api/models/mobilesam/predict

La solicitud multipart acepta file, point_coords y point_labels. point_coords debe contener exactamente dos coordenadas de la imagen de origen. Las etiquetas de prompt SAM son 0 para un punto negativo, 1 para uno positivo, 2 para la esquina superior izquierda del cuadro y 3 para la esquina inferior derecha.

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

El runtime escala las coordenadas del prompt a la entrada del codificador, ejecuta codificador y decodificador, selecciona la máscara solicitada o la de mayor puntuación y la restaura en la imagen de origen. También hay interfaces de estado, configuración, MJPEG y vídeo asíncrono.

La respuesta contiene iou_scores, selected_mask, mask_pixels y el prompt efectivo. GET /api/config devuelve el prompt persistente del flujo; POST /api/config acepta point_coords y point_labels, o ambos como null para restaurar el modo de imagen completa. Los valores genéricos threshold y topk no cambian la selección de máscara.

Los vídeos subidos usan el prompt persistente activo al comenzar el análisis. Los endpoints estándar /api/video/* proporcionan carga, análisis, progreso, lista y descarga.

El codificador y el decodificador son etapas del pipeline, no alternativas de tamaño. Ambos archivos deben ser compatibles al sustituir cualquiera de los modelos. El codificador conserva la relación de aspecto, redimensiona el lado largo a 448 y rellena hasta 448 x 448; el contrato fijo del decodificador requiere exactamente dos coordenadas y etiquetas de prompt.

Compilar localmente

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

Entradas y salidas

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