William Zhang2026-07-23

Detección de caídas multiescenario basada en reComputer RK3576

Detección de comportamiento de caídas en situaciones multiescenario y multiobjetivo utilizando el modelo YOLOv8n‑pose, con aceleración de inferencia potenciada por el reComputer RK3576, y retroalimentación simple de información a través de una página web.

reComputer-RKrk3576yolofall_detectionGithub

Detección de caídas multiescenario basada en reComputer RK3576

Un proyecto de detección de caídas basado en RK3576 / RKNN / YOLO / RGA

Puedes consultar el código fuente de este proyecto en: https://github.com/doublelf/fall_detection

Inicio rápido

Obtén la imagen del proyecto mediante Docker

bash
docker pull ghcr.io/doublelf/pose_optimized:v1

Prueba el modelo con el ejemplo integrado

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  -v $(pwd)/video:/app/video \
  seeed/pose_optimized:local \
  python3 web_detection.py --model_path model/yolov8n_pose.rknn --video video/example1.mp4

Donde "-v $(pwd)/video:/app/video" mapea la carpeta local de video a la ubicación /app/video en la imagen.

Si deseas usar un video local para la inferencia, almacena el archivo local en la carpeta especificada por $(pwd)/video.

Una vez que el proyecto se ejecute correctamente, accede a http://<board_ip>:8000/ para ver el efecto de inferencia en tiempo real.

Desarrollo secundario basado en el proyecto

Extrae la imagen al equipo local mediante el comando cp

bash
sudo docker cp pose_optimized:/app/web_detection.py ./

Después de modificar el código de web_detection.py, recuerda recompilar la imagen con el código local

bash
sudo docker build -t seeed/pose_optimized:local

Luego ejecútalo de nuevo.

Uso de la cámara para inferencia en tiempo real

Al ejecutar la inferencia, cambia el parámetro "--video" por "--camera_id" para invocar la cámara.

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  -v $(pwd)/video:/app/video \
  seeed/pose_optimized:local \
  python3 web_detection.py --model_path model/yolov8n_pose.rknn --camera_id 1

Aquí, "--camera_id" está relacionado con el dispositivo que especificaste en "--device /dev/video1:/dev/video1".

Extensiones de inferencia de IA

Motor de inferencia: Envuelto sobre la API C de RKNN, con el punto de entrada principal en web_detection.py y las llamadas reales a utils/rknn_wrapper.py, compatible con la aceleración por hardware de la NPU del RK3576. Entrada del modelo: Acepta el modelo cuantizado yolov8n_pose.rknn con un tamaño de entrada fijo de 640×640. La salida incluye cajas de detección de objetos y 17 coordenadas de puntos clave. Posprocesamiento: Analiza los tres mapas de características de la salida del modelo, elimina las cajas duplicadas mediante NMS y utiliza el algoritmo OKS para optimizar la confianza de los puntos clave, generando finalmente datos estructurados de pose.

Preprocesamiento y procesamiento de imágenes

Aceleración por hardware: Utiliza la unidad RGA del RK3576 para el escalado de imágenes, la conversión del espacio de color (YUV→RGB) y la conversión de formato, reduciendo significativamente la carga de la CPU. Captura de video: Admite la captura directa desde cámaras V4L2 o la lectura de archivos de video locales, alternando las fuentes de entrada mediante los parámetros --camera_id y --video. Control de velocidad de fotogramas: El hilo de captura y el hilo de inferencia están separados, utilizando una cola de doble búfer para evitar la pérdida de fotogramas y garantizar una latencia mínima para las transmisiones en tiempo real.

Recomendaciones de despliegue

Permisos de ejecución: Debes utilizar el modo de contenedor --privileged y mapear explícitamente /dev/video*, /dev/dri/renderD* (para RGA) y el archivo de compatibilidad del árbol de dispositivos para garantizar el acceso normal a la NPU y VPU. Empaquetado de la imagen: La imagen ya incluye todas las dependencias (RKNN Runtime, OpenCV, Flask). Se recomienda usar --net=host para evitar la complejidad del mapeo de puertos. Si necesitas persistir modelos o configuraciones, puedes montar directorios externos. Operación de larga duración: Se recomienda usar un servicio systemd o supervisor para monitorizar el proceso del contenedor, y establecer la política --restart=always.

Limitaciones conocidas

Inferencia de flujo único: El diseño actual solo admite la entrada de un único flujo de video. La concurrencia de múltiples flujos requiere desarrollo adicional de lógica de gestión de múltiples hilos/procesos. Sobrecarga de renderizado: Aunque RGA acelera el preprocesamiento, las operaciones de dibujo de OpenCV aún consumen algunos recursos de CPU. En resoluciones altas, la velocidad de fotogramas puede descender a 15-20 FPS. Compatibilidad con flujos de red: Actualmente solo admite cámaras locales o archivos; la recepción de flujos de red RTSP/HTTP aún no está integrada. Sin almacenamiento persistente: Los resultados de detección solo se utilizan para la visualización en tiempo real y no se almacenan en una base de datos ni en el sistema de archivos. Los registros históricos requieren extensiones personalizadas. Compatibilidad de hardware: La aceleración RGA depende de los controladores específicos del RK3576. Es posible que otros chips de la serie RK (como el RK3568) no funcionen directamente y requieran recompilar OpenCV y ajustar la interfaz de llamada RGA.