William Zhang2026-07-23

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

使用 YOLOv8n‑pose 模型在多场景和多目标情况下进行跌倒行为检测,并借助 reComputer RK3576 进行推理加速,通过网页提供简单的信息反馈。

reComputer-RKrk3576yolofall_detectionGithub

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

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

你可以在 GitHub 上查看本项目源代码: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 调用接口。