CV / MobileNet
MobileNetV2
reComputer RK3588
Clasificación de imágenes con MobileNetV2 acelerada por RKNN en reComputer RK3576 y RK3588.
Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.
Primeros pasos
Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-mobilenet:latest \
python3 web_classification.py --model_path model/rk3588_mobilenet_v2.rknn --camera_id -1API REST
Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "mobilenet-v2-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'import requests
resp = requests.post(
"http://localhost:8080/v1/chat/completions",
json={"model": "mobilenet-v2-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())Detalles del modelo
Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.
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)
Esta página se adapta de los README de MobileNetV2 en reComputer-RK-CV. El servicio ejecuta clasificación ImageNet con RKNN-Toolkit-Lite2 y ofrece vista previa web, flujo MJPEG, comprobación de estado y REST API.
Información del modelo
| Propiedad | Valor |
|---|---|
| Tarea | Clasificación de imágenes |
| Entrada | Imagen de 224 x 224 |
| Salida | Etiquetas ImageNet Top-K y puntuaciones de confianza configurables |
| Modelo RK3576 | model/rk3576_mobilenet_v2.rknn |
| Modelo RK3588 | model/rk3588_mobilenet_v2.rknn |
| Etiquetas | model/synset.txt |
Paso A: Descargar las imágenes
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-mobilenet:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mobilenet: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/renderD128:/dev/dri/renderD128 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-mobilenet:latest \
python3 web_classification.py \
--model_path model/rk3576_mobilenet_v2.rknn --camera_id -1Para RK3588:
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-mobilenet:latest \
python3 web_classification.py \
--model_path model/rk3588_mobilenet_v2.rknn --camera_id -1Abra http://<BOARD_IP>:8000 para la página web o http://<BOARD_IP>:8000/docs para OpenAPI. Sustituya --camera_id -1 por un ID de cámara asignado o use --video_path video/test.mp4 para el vídeo incluido.
🔌 Documentación de la API
1. Interfaz de inferencia del modelo (Predict)
Endpoint: POST /api/models/mobilenet/predict
Parámetros de solicitud (Multipart/Form-Data):
Los campos opcionales son file, video, timestamp, conf y topk; topk admite de 1 a 20 y conf de 0.0 a 1.0. Sin carga se usa la fuente de vídeo activa.
Ejemplos de uso:
curl -X POST "http://<BOARD_IP>:8000/api/models/mobilenet/predict" \
-F "file=@bell.jpg" -F "topk=5" -F "conf=0.01"Para clasificar un fotograma a los 5.5 segundos de un MP4:
curl -X POST "http://<BOARD_IP>:8000/api/models/mobilenet/predict" \
-F "video=@test.mp4" -F "timestamp=5.5" -F "topk=3"Formato de respuesta (JSON):
{
"success": true,
"model": "mobilenet",
"source": "uploaded image",
"predictions": [
{"class": "n02123045 tabby, tabby cat", "confidence": 0.91}
],
"image": {"width": 640, "height": 480}
}2. Interfaz de configuración del sistema (Config)
GET /api/config devuelve el conf_thresh global. Actualícelo con POST /api/config y JSON como {"conf_thresh":0.1}. Un valor conf de la solicitud prevalece sobre el umbral global para esa solicitud.
| Endpoint | Finalidad |
|---|---|
GET /api/health | Plataforma, ruta del modelo y disponibilidad. |
GET /api/video_feed | Vista previa MJPEG anotada. |
POST /api/video/upload | Subir JPG, JPEG, PNG, BMP o MP4. |
POST /api/video/analyze | Iniciar análisis asíncrono mediante el filename subido. |
GET /api/video/status | Progreso y estado de error. |
GET /api/video/list | Archivos subidos y generados. |
GET /api/video/download/{filename} | Descargar un resultado generado. |
3. Argumentos de línea de comandos
La aplicación acepta una imagen subida, un fotograma de un MP4 subido seleccionado por marca de tiempo, un vídeo local en bucle o un fotograma de cámara. El vídeo local tiene prioridad sobre la cámara.
| Argumento | Predeterminado | Descripción |
|---|---|---|
--model_path | Obligatorio | Modelo RKNN seleccionado para el SoC de destino. |
--camera_id | 1 | Índice de cámara; use -1 para el modo de solo carga. |
--video_path | Ninguno | Ruta del MP4 local. Prevalece sobre --camera_id. |
--host | 0.0.0.0 | Dirección de escucha de FastAPI. |
--port | 8000 | Puerto del servicio. |
Para una cámara USB, asigne el nodo de dispositivo correspondiente, por ejemplo --device /dev/video0:/dev/video0, y pase --camera_id 0.
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)
Sustitución del modelo
El preprocesamiento conserva el orden de canales BGR requerido por este modelo, aplica softmax y filtra los resultados Top-K. Un modelo de sustitución debe conservar la disposición de entrada, el orden de canales, la normalización y el formato de salida. Actualice synset.txt al cambiar el conjunto de clases. Las cargas y salidas se almacenan en workspace/; defina RK_CV_WORKSPACE para usar otro directorio.
Compilar localmente
Ejecute desde la raíz del repositorio upstream:
docker build -f docker/rk3576/mobilenet.dockerfile \
-t rk3576-mobilenet:local src/rk3576_mobilenet
docker build -f docker/rk3588/mobilenet.dockerfile \
-t rk3588-mobilenet:local src/rk3588_mobilenetEntradas y salidas
Input: image, video frame, or camera frame. Output: Top-K ImageNet labels and confidence scores.