CV / MobileSAM
MobileSAM
Prompt-based MobileSAM image segmentation with RKNN encoder and decoder models.
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
Inicio rápido
1. Instalar Docker
Ejecute los siguientes comandos en la placa de desarrollo para instalar Docker:
# 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 docker2. 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
| 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 |
Paso A: Descargar las imágenes
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:latestPaso B: Ejecutar con un clic
Para 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 8000Para RK3588:
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.
🔌 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:
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
| 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.
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
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.