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.
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
docker pull ghcr.io/doublelf/pose_optimized:v1Probar el modelo con el ejemplo integrado
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.mp4Donde "-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
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
sudo docker build -t seeed/pose_optimized:localLuego, 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.
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 1Aquí, "--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.