CV / MobileSAM

MobileSAM

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

31 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

Inicio rápido

1. Instalar Docker

Ejecute los siguientes comandos en la placa de desarrollo para instalar 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. Ejecutar el proyecto (un comando y vista previa de doble modo)

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

Paso A: Descargar las imágenes

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

Paso B: Ejecutar con un clic

Para 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

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


🔌 Documentación de la API

1. Segmentación con prompts (Predict)

Endpoint: POST /api/models/mobilesam/predict

Parámetros de solicitud (Multipart/Form-Data):

Suba file y especifique dos puntos o esquinas mediante point_coords y point_labels.

Ejemplos de uso:

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.

2. Interfaz de configuración del sistema (Config)

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.

3. Argumentos de línea de comandos

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.


Interfaz de vídeo en tiempo real (Video Feed)

Obtenga el último flujo MJPEG anotado para la vista previa en el navegador:

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

🛠️ Guía para desarrolladores (recomendaciones de producción)

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.