William Zhang2026-07-23

Valdetectie in meerdere scenario's op basis van reComputer RK3576

Valgedragdetectie in scenario's met meerdere situaties en meerdere doelen met behulp van het YOLOv8n‑pose model, met inferentieversnelling mogelijk gemaakt door de reComputer RK3576, en eenvoudige informatiefeedback via een webpagina.

reComputer-RKrk3576yolofall_detectionGithub

基于 reComputer RK3576 的多场景跌倒检测

一个基于 RK3576 / RKNN / YOLO / RGA 的跌倒检测项目

你可以在以下地址查看本项目的源代码:https://github.com/doublelf/fall_detection

快速开始

通过 Docker 拉取项目镜像

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

使用内置示例测试模型效果

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

其中 "-v $(pwd)/video:/app/video" 将本地的 video 文件夹映射到镜像中的 /app/video 位置。

如果你想使用本地视频进行推理,请将本地文件存放到 $(pwd)/video 指定的文件夹中。

项目成功运行后,访问 http://<board_ip>:8000/ 即可查看实时推理效果。

基于项目进行二次开发

使用 cp 命令将镜像拉取到本地

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

修改 web_detection.py 代码后,记得将本地代码重新构建到镜像中

bash
sudo docker build -t seeed/pose_optimized:local

然后再次运行。

调用摄像头进行实时推理

运行推理时,将 "--video" 参数改为 "--camera_id" 即可调用摄像头进行推理。

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

这里的 "--camera_id" 与你通过 "--device /dev/video1:/dev/video1" 指定的设备相关联。

AI 推理扩展

推理引擎: 基于 RKNN C API 封装,主入口在 web_detection.py 中,实际调用 utils/rknn_wrapper.py,支持 RK3576 NPU 硬件加速。 模型输入: 接受 yolov8n_pose.rknn 量化模型,固定输入尺寸为 640×640。输出包含物体检测框和 17 个关键点坐标。 后处理: 解析模型输出的三个特征图,通过 NMS 去除重复框,并使用 OKS 算法优化关键点置信度,最终生成结构化姿态数据。

预处理与图像处理

硬件加速: 利用 RK3576 的 RGA 单元进行图像缩放、色彩空间转换(YUV→RGB)和格式转换,显著降低 CPU 负载。 视频采集: 支持直接从 V4L2 摄像头捕获或从本地视频文件读取,通过 --camera_id 和 --video 参数切换输入源。 帧率控制: 采集线程与推理线程分离,使用双缓冲队列避免丢帧,确保实时流的最小延迟。

部署建议

运行时权限: 必须使用 --privileged 容器模式,并显式映射 /dev/video*、/dev/dri/renderD*(用于 RGA)以及设备树兼容文件,以确保正常访问 NPU 和 VPU。 镜像打包: 镜像已包含所有依赖项(RKNN Runtime、OpenCV、Flask)。建议使用 --net=host 避免端口映射复杂性。如需持久化模型或配置,可挂载外部目录。 长期运行: 建议使用 systemd 服务或 supervisor 监控容器进程,并设置 --restart=always 策略。

已知限制

单流推理: 当前设计仅支持单路视频流输入。多路并发需要额外开发多线程/多进程管理逻辑。 渲染开销: 尽管 RGA 加速了预处理,但 OpenCV 的绘制操作仍会消耗部分 CPU 资源。在高分辨率下,帧率可能降至 15-20 FPS。 网络流支持: 目前仅支持本地摄像头或文件,尚未集成 RTSP/HTTP 网络流拉取。 无持久化缓存: 检测结果仅用于实时显示,不会存储到数据库或文件系统。历史记录需要自定义扩展。 硬件兼容性: RGA 加速依赖于 RK3576 专用驱动。其他 RK 系列芯片(如 RK3568)可能无法直接运行,可能需要重新编译 OpenCV 并调整 RGA 调用接口。