William Zhang2025-07-23

Detección de caídas en múltiples escenarios basada en reComputer RK3576

Detección de comportamiento de caídas en múltiples escenarios y múltiples objetivos utilizando el modelo YOLOv8n-pose, con aceleración de inferencia mediante reComputer RK3576, y retroalimentación de información simple a través de una página web.

reComputer-RKrk3576yolofall_detectionGithub

Detección de caídas multiescenario en reComputer RK3576

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

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

Inicio rápido

Obtener la imagen del proyecto mediante Docker

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

Probar 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" asigna la carpeta local video a la ubicación /app/video dentro de la imagen.

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

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

Desarrollo secundario basado en el proyecto

Extraer la imagen a la máquina 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, recuerde reconstruir el código local en la imagen

bash
sudo docker build -t seeed/pose_optimized:local

Luego, ejecútelo de nuevo.

Llamada a la cámara para inferencia en tiempo real

Al ejecutar la inferencia, cambie 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 especificó en "--device /dev/video1:/dev/video1".

Extensiones de inferencia AI

Motor de inferencia: Encapsulado a partir de la API RKNN C, con el punto de entrada principal en web_detection.py y llamadas reales a utils/rknn_wrapper.py, compatible con aceleración por hardware NPU 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. Post-procesamiento: 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 de pose estructurados.

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 de espacio de color (YUV→RGB) y la conversión de formato, reduciendo significativamente la carga de la CPU. Captura de video: Admite captura directa desde cámaras V4L2 o lectura desde archivos de video locales, cambiando la fuente de entrada mediante los parámetros --camera_id y --video. Control de la tasa 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 la latencia mínima en las transmisiones en tiempo real.

Recomendaciones de despliegue

Permisos de ejecución: Debe usarse 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 la 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 necesita persistir modelos o configuraciones, puede montar directorios externos. Operación de larga duración: Se recomienda usar un servicio systemd o supervisor para monitorear 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 el desarrollo adicional de una lógica de gestión multihilo/multiproceso. Sobrecarga de renderizado: Aunque RGA acelera el preprocesamiento, las operaciones de dibujo de OpenCV siguen consumiendo cierta cantidad de recursos de CPU. A resoluciones altas, la tasa de fotogramas puede caer a 15-20 FPS. Soporte de transmisión en red: Actualmente solo admite cámaras o archivos locales; la obtención de transmisiones de red RTSP/HTTP aún no está integrada. Sin caché persistente: Los resultados de detección solo se usan para la visualización en tiempo real y no se almacenan en una base de datos ni en un sistema de archivos. Los registros históricos requieren extensiones personalizadas. Compatibilidad de hardware: La aceleración RGA depende de controladores específicos de RK3576. Es posible que otros chips de la serie RK (como el RK3568) no funcionen directamente y puede ser necesario recompilar OpenCV y ajustar la interfaz de llamada de RGA.