基于reComputer RK3576的多场景跌倒检测
通过yolov8n-pose模型进行多场景、多目标情况下跌倒行为检测,基于reComputer RK3576进行推理加速,并通过web网页进行简单信息反馈
基于 reComputer RK3576 的多场景跌倒检测
一个基于 RK3576 / RKNN / YOLO / RGA 的跌倒检测项目
你可以通过以下链接查看该项目的源代码: https://github.com/doublelf/fall_detection
快速开始
通过docker拉取项目镜像
docker pull ghcr.io/doublelf/pose_optimized:v1使用自带案例测试模型效果
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命令将镜像拉取到本地
sudo docker cp pose_optimized:/app/web_detection.py ./针对web_detection.py代码修改完成后,记得重新将本地代码构建到镜像内
sudo docker build -t seeed/pose_optimized:local之后重新运行即可
调用摄像头实时进行推理
在推理时,修改 "--video" 参数为 "--camera_id" ,即可调用摄像头进行推理
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 调用接口。