CV / ResNet
ResNet50V2
reComputer RK3588
Clasificación de imágenes con ResNet50V2 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-resnet50v2:latest \
python3 web_classification.py --model_path model/rk3588_resnet50-v2-7.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": "resnet50-v2-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'import requests
resp = requests.post(
"http://localhost:8080/v1/chat/completions",
json={"model": "resnet50-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 ResNet50V2 en reComputer-RK-CV. El servicio ejecuta clasificación ImageNet en la NPU Rockchip y ofrece interfaces de navegador, MJPEG, comprobación de estado y REST.
Información del modelo
| Propiedad | Valor |
|---|---|
| Tarea | Clasificación de imágenes |
| Entrada | Imagen RGB de 224 x 224 |
| Salida | Etiquetas ImageNet Top-K y puntuaciones de confianza configurables |
| Modelo RK3576 | model/rk3576_resnet50-v2-7.rknn |
| Modelo RK3588 | model/rk3588_resnet50-v2-7.rknn |
| Etiquetas | model/synset.txt |
Paso A: Descargar las imágenes
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-resnet50v2:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-resnet50v2: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-resnet50v2:latest \
python3 web_classification.py \
--model_path model/rk3576_resnet50-v2-7.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-resnet50v2:latest \
python3 web_classification.py \
--model_path model/rk3588_resnet50-v2-7.rknn --camera_id -1Abra http://<BOARD_IP>:8000 para la página web o http://<BOARD_IP>:8000/docs para OpenAPI.
🔌 Documentación de la API
1. Interfaz de inferencia del modelo (Predict)
Endpoint: POST /api/models/resnet50v2/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/resnet50v2/predict" \
-F "file=@dog_224x224.jpg" -F "topk=5" -F "conf=0.01"curl -X POST "http://<BOARD_IP>:8000/api/models/resnet50v2/predict" \
-F "video=@test.mp4" -F "timestamp=5.5" -F "topk=3"Formato de respuesta (JSON):
{
"success": true,
"model": "resnet50v2",
"source": "uploaded image",
"predictions": [
{"class": "n02099601 golden retriever", "confidence": 0.89}
],
"image": {"width": 224, "height": 224}
}2. Interfaz de configuración del sistema (Config)
GET /api/config devuelve conf_thresh; actualícelo mediante JSON con POST /api/config. El conf de la solicitud tiene prioridad.
| Endpoint | Finalidad |
|---|---|
GET /api/health | Servicio, plataforma, modelo y disponibilidad. |
GET /api/video_feed | Vista previa MJPEG anotada. |
POST /api/video/upload | Subir una imagen o un MP4. |
POST /api/video/analyze | Analizar un filename subido. |
GET /api/video/status | Progreso del procesamiento y errores. |
GET /api/video/list | Archivos subidos y generados. |
GET /api/video/download/{filename} | Descargar un resultado. |
3. Argumentos de línea de comandos
La aplicación acepta una imagen subida, un fotograma seleccionado de un MP4 subido, un vídeo local en bucle o un fotograma de 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 la cámara. |
--host | 0.0.0.0 | Dirección de escucha de FastAPI. |
--port | 8000 | Puerto del servicio. |
Asigne /dev/videoN al contenedor al seleccionar la cámara N.
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 runtime redimensiona la entrada a 224 x 224, convierte BGR a RGB, aplica softmax y filtra los resultados Top-K. Un modelo de sustitución debe conservar la disposición de entrada, normalización, orden de canales y formato de salida previstos. Actualice synset.txt si cambia el conjunto de clases. Los archivos se almacenan en workspace/; defina RK_CV_WORKSPACE para cambiar esa ubicación.
Compilar localmente
docker build -f docker/rk3576/resnet50v2.dockerfile \
-t rk3576-resnet50v2:local src/rk3576_resnet50v2
docker build -f docker/rk3588/resnet50v2.dockerfile \
-t rk3588-resnet50v2:local src/rk3588_resnet50v2Entradas y salidas
Input: image, video frame, or camera frame. Output: Top-K ImageNet labels and confidence scores.