CV / MobileSAM
MobileSAM
Segment objects using a box or foreground/background point prompts in the Web UI or REST API.
Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.
Primeros pasos
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
Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.
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())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
| Componente | Archivo |
|---|---|
| Codificador de imagen | model/mobilesam_encoder.rknn |
| Decodificador de prompts | model/mobilesam_decoder.rknn |
| Preprocesamiento de entrada | 448 x 448 |
| Prompts | Cuadro o puntos de primer plano/fondo |
| Salida | Máscara, índice de máscara seleccionado, puntuación de calidad y número de píxeles |
Ejecutar el servicio
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 8000Abra 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
| Argumento | Predeterminado | Descripción |
|---|---|---|
--platform | Obligatorio | rk3576 o rk3588. |
--model_dir | model | Directorio del codificador, decodificador e imagen de calentamiento. |
--camera_id | -1 | Índice de cámara; -1 habilita solo las cargas. |
--video, --video_path | Ninguno | Vídeo local en bucle; prevalece sobre la cámara. |
--host / --port | 0.0.0.0 / 8000 | Direcció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.
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
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_mobilesamEntradas y salidas
Input: image plus box or point prompts. Output: segmentation mask, mask score, and overlay.