CV / MobileNet

MobileNetV2

MobileNetV2 image classification accelerated by RKNN on reComputer RK3576 and RK3588.

2 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/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 -1

API REST

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

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "mobilenet-v2-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
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

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)

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

PropiedadValor
TareaClasificación de imágenes
EntradaImagen de 224 x 224
SalidaEtiquetas ImageNet Top-K y puntuaciones de confianza configurables
Modelo RK3576model/rk3576_mobilenet_v2.rknn
Modelo RK3588model/rk3588_mobilenet_v2.rknn
Etiquetasmodel/synset.txt

Paso A: Descargar las imágenes

bash
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: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/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 -1

Para RK3588:

bash
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 -1

Abra 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:

bash
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:

bash
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):

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.

EndpointFinalidad
GET /api/healthPlataforma, ruta del modelo y disponibilidad.
GET /api/video_feedVista previa MJPEG anotada.
POST /api/video/uploadSubir JPG, JPEG, PNG, BMP o MP4.
POST /api/video/analyzeIniciar análisis asíncrono mediante el filename subido.
GET /api/video/statusProgreso y estado de error.
GET /api/video/listArchivos 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.

ArgumentoPredeterminadoDescripción
--model_pathObligatorioModelo RKNN seleccionado para el SoC de destino.
--camera_id1Índice de cámara; use -1 para el modo de solo carga.
--video_pathNingunoRuta del MP4 local. Prevalece sobre --camera_id.
--host0.0.0.0Dirección de escucha de FastAPI.
--port8000Puerto 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:

bash
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_mobilenet

Entradas y salidas

Input: image, video frame, or camera frame. Output: Top-K ImageNet labels and confidence scores.