inteintegrity2026-09-03

基于 reComputer RK3576 的实时引体向上计数器

一个基于 YOLO11 的姿态检测应用,利用 RK3576 NPU 检测人体、绘制骨架与人体框, 并对视频、摄像头或 RTSP 画面中的引体向上动作进行实时计数。

CVPose EstimationFitnessGithub

基于 reComputer RK3576 的实时引体向上计数器

1. 方案概述

该项目把 reComputer RK3576 变成一个低延迟、数据本地处理的健身计数器。YOLO11n-Pose 模型运行在板载 NPU 上,应用会在画面中绘制人体框、17 个身体关键点、姿态骨架、当前动作阶段和已完成的引体向上次数。

reComputer RK3576 引体向上计数演示

项目源码与部署文件:https://github.com/Seeed-Projects/reComputer-AI-Lab-Project/tree/main/rk_project/pullup_counter

项目功能

  • 通过 RKNNLite 在 RK3576 NPU 上运行 YOLO11n-Pose。
  • 检测主要人物并绘制人体框与 COCO-17 姿态骨架。
  • 使用带迟滞阈值的状态机统计完整引体向上次数。
  • 支持内置视频、USB 摄像头、RTSP 流以及其他本地视频。
  • 提供 Web 页面,显示次数、动作阶段、FPS、NPU 延迟,并支持暂停和清零。
  • 使用项目自带的 AArch64 wheel 安装到独立 Python 虚拟环境。

软硬件要求

  • 运行 64 位 Linux 的 reComputer RK3576
  • Python 3.11 与 venv
  • 开发板系统镜像自带的 RKNN Runtime 和 RKNPU 驱动
  • 固定输入尺寸为 640 × 640 的 YOLO11n-Pose RKNN 模型
  • 与开发板处于同一网络的电脑或手机

当前项目使用 FP16 RKNN 模型。

2. RK3576 部署指南

部署到板子

克隆仓库并安装环境(一次性操作):

bash
git clone https://github.com/Seeed-Projects/reComputer-AI-Lab-Project.git
cd reComputer-AI-Lab-Project/rk_project/pullup_counter
bash install.sh

运行

启动 Web 服务:

bash
bash run_web.sh

安装脚本会创建 .venv,使用项目自带的 AArch64 wheel 离线安装依赖,并执行环境检查和单帧 NPU 推理测试。

启动成功后,在同一局域网中的浏览器访问:

text
http://<RK3576_IP>:8000

例如:

text
http://192.168.3.120:8000

切换输入源

默认循环播放项目自带的演示视频:

bash
bash run_web.sh

使用 USB 摄像头:

bash
bash run_web.sh --source 0

使用 RTSP 视频流:

bash
bash run_web.sh --source 'rtsp://user:password@camera/stream'

使用其他视频或端口:

bash
bash run_web.sh --source /path/to/video.mp4 --port 8080

通常只应让一个进程占用 NPU 模型。如果 8000 端口已被占用,请停止旧的 Web 进程或切换端口。

命令行处理视频

不启动 Web 页面,直接生成带标注的视频和 CSV 计数记录:

bash
bash run_demo.sh

默认输出:

text
video/output/test_counted.mp4
video/output/test_counted.csv

3. 计数逻辑与运行建议

程序选择置信度最高的人体目标。手腕关键点用于估算单杠高度,鼻子和肩部关键点用于描述身体的垂直运动,并根据人体尺寸对距离进行归一化,以适应不同拍摄距离。

计数器使用上下两个独立阈值构成迟滞状态机,避免人体在边界附近停留时重复计数。只有稳定到达顶部、再稳定返回底部后才增加一次计数。短时间关键点丢失不会立即中断动作;如果长时间未检测到人体,只重置动作阶段,不会清空已完成次数。

为了获得更稳定的结果,请让上半身完整出现在画面中,使用固定机位,避免强逆光,并尽量采用接近正面的拍摄角度。

Web 接口

页面会显示带标注的视频流和实时统计信息,并提供:

  • GET /healthz:服务健康检查
  • GET /api/status:当前次数、动作阶段、FPS 和推理状态

该服务默认用于可信局域网,不包含身份验证和 TLS,请勿直接暴露到公网。

部署建议

  • 项目复制到开发板后,先运行 sha256sum -c MANIFEST.sha256,确认模型、依赖 wheel 和演示文件完整。
  • 优先使用开发板系统镜像自带的 RKNN Runtime 与 RKNPU 驱动;只有确认与模型转换所用 RKNN Toolkit 版本兼容后再进行替换。
  • 使用安装脚本创建的 .venv 运行项目,避免把依赖直接安装到系统 Python 环境。
  • 同一个 NPU 模型通常只运行一个推理进程。如果 8000 端口已被占用,应停止旧进程或更换端口。
  • 固定摄像头位置,让单杠和完整上半身保持可见,并尽量避免强逆光。
  • Web 页面建议只在可信局域网中使用。需要长期运行时,可通过 systemd 管理进程;需要远程访问时,应在反向代理中增加身份验证和 TLS。

已知限制

  • 当前版本只跟踪一个主要人物。
  • 面部、肩膀或手腕被严重遮挡时,动作阶段切换可能延迟。
  • 镜头大幅移动会降低计数稳定性。
  • Web 服务面向局域网演示,不是公网生产服务。