Parker Hu2025-07-17
使用reComputer RK3576 做足球运动员追踪分析
使用reComputer RK3576 RGA 2D硬件加速和vpu mpp加速。 运行yolov8n模型识别足球运动员,实现实时分析效果。
reComputer RK3576 足球运动员追踪分析
一个基于 RK3576 / RKNN / MPP / RGA / ZLMediaKit 的智能足球场分析项目。
你可以通过以下链接查看该项目的源代码:
https://github.com/litxaohu/football_project
你也可以下载编译好的版本,在你的 reComputer RK3576 上本地运行该项目:
注意:该项目内存占用较低,但 CPU 占用较高。未来会考虑对 CPU 占用进行优化。
bash
wget -O rk3576_football_demo-linux-aarch64.tar.gz https://github.com/litxaohu/football_project/releases/download/v1.0.0/rk3576_football_demo-linux-aarch64.tar.gz
tar -xzvf rk3576_football_demo-linux-aarch64.tar.gz
cd install
export LD_LIBRARY_PATH="$(pwd)/lib:${LD_LIBRARY_PATH}"你可以上传本地视频到设备进行分析处理,也可以添加 RTSP 视频源进行实时分析:
本地视频分析:
bash
sudo ./bin/rk3576_football_demo \
--source localvideo \
--localvideo ./video/football.mp4 \ #修改为你本地视频文件的路径
--model model/yolov8n_rk3576.rknn \
--output-width 1280 \
--output-height 720 \
--fps 30 \
--http-port 8000 \
--streams ai \
--ai-conf-threshold 0.25RTSP 视频分析:
bash
sudo ./bin/rk3576_football_demo \
--source rtsp \
--rtsp-input-url "rtsp://192.168.100.101:554/live" \
--rtsp-username admin \
--rtsp-password 123456 \
--model model/yolov8n_rk3576.rknn \
--output-width 1280 \
--output-height 720 \
--fps 30 \
--http-port 8000 \
--streams ai \
--ai-conf-threshold 0.25预览:
- 页面入口
http://<board-ip>:8000/
项目特性
当前功能
- 输入源:
v4l2rtsplocalvideo
- 输出流:
- 主码流
rtsp://<board-ip>:8554/live/camera - 子码流
rtsp://<board-ip>:8554/live/camera_sub - AI 调试流
rtsp://<board-ip>:8554/live/camera_ai
- 主码流
- Web:
- 页面入口
http://<board-ip>:8000/ - HLS 状态接口
/api/hls/status - HLS 播放列表
/api/hls/playlist.m3u8 - 实时检测接口
/api/live_state
- 页面入口
- AI:
- 固定 NPU 输入尺寸
640x640 - 默认检测目标
person --enable-ball启用ball(足球)输出--ball-trail在 AI 调试流上启用足球轨迹绘制
- 固定 NPU 输入尺寸
- 追踪:
- 稳定的
track_id输出 - JSON 返回
track_id、appear_frames、first_seen_sec、last_seen_sec
- 稳定的
Web 播放
目前采用:
- 协议:
HLS - 编码:
H.264 - 帧率:
30 FPS - 分辨率:
1280x720
构建与运行
GitHub CI 与发布打包
该仓库包含一个 GitHub Actions 工作流,将会:
- 在 push 或 pull request 时自动构建项目
- 运行与本地相同的构建脚本:
./scripts/build-linux.sh - 在
dist/下生成 Linux/aarch64 的发布压缩包 - 当推送形如
v1.0.0的标签时,将该压缩包发布为 GitHub release
使用方法:
- 创建一个 GitHub 仓库并将项目推送上去。
- 将该仓库添加到 GitHub Actions。
- 推送一个类似
git tag v1.0.0 && git push origin v1.0.0的标签以触发打包发布。
依赖项
- RK3576 板卡运行环境
- RKNN Runtime
- Rockchip MPP
- RGA
- ZLMediaKit
- FFmpeg
构建
bash
cd rk3576_football_demo
chmod +x scripts/build-linux.sh
./scripts/build-linux.sh运行前准备
bash
cd install
export LD_LIBRARY_PATH="$(pwd)/lib:${LD_LIBRARY_PATH}"模型目录
text
model/
yolov8n_rk3576.rknn
yolov8s_rk3576.rknn
yolov8m_rk3576.rknn当未显式指定 --model 时,会自动尝试上述默认模型名称。
启动示例
RTSP 实时足球分析 + Web
bash
./bin/rk3576_football_demo \
--source rtsp \
--rtsp-input-url "rtsp://192.168.100.101:554/live" \
--rtsp-username admin \
--rtsp-password 123456 \
--model model/yolov8n_rk3576.rknn \
--output-width 1280 \
--output-height 720 \
--fps 30 \
--http-port 8000 \
--streams main,sub,aibash
sudo ./bin/rk3576_football_demo \
--source localvideo \
--localvideo ./video/football.mp4 \
--model model/yolov8n_rk3576.rknn \
--output-width 1280 \
--output-height 720 \
--fps 30 \
--http-port 8000 \
--streams ai \
--ai-conf-threshold 0.15仅 AI 调试流 + Web
bash
./bin/rk3576_football_demo \
--source rtsp \
--rtsp-input-url "rtsp://192.168.100.101:554/live" \
--rtsp-username admin \
--rtsp-password 123456 \
--model model/yolov8n_rk3576.rknn \
--streams ai \
--http-port 8000启用足球检测与轨迹绘制
bash
./bin/rk3576_football_demo \
--source rtsp \
--rtsp-input-url "rtsp://192.168.100.101:554/live" \
--model model/yolov8n_rk3576.rknn \
--enable-ball \
--ball-trail \
--ball-trail-length 20调试低置信度目标
bash
./bin/rk3576_football_demo \
--source localvideo \
--localvideo /home/rk76/CPP_yolov8/video/football.mp4 \
--model model/yolov8n_rk3576.rknn \
--streams ai \
--ai-conf-threshold 0.15 \
--detail-info导出 NPU 输入帧
bash
./bin/rk3576_football_demo \
--source localvideo \
--localvideo /home/rk76/CPP_yolov8/video/football.mp4 \
--model model/yolov8n_rk3576.rknn \
--streams ai \
--dump-ai-input-dir ./debug_ai_input \
--dump-ai-input-every 30 \
--detail-info显示帮助信息
bash
./bin/rk3576_football_demo --helpWeb API
实时状态
GET /api/live_state
响应示例:
json
{
"success": true,
"message": "",
"stream_type": "hls",
"detect_fps": 28.7,
"updated_at": 1720851200,
"source": "live frame",
"image": {
"width": 1280,
"height": 720
},
"predictions": [
{
"class": "person",
"confidence": 0.92,
"track_id": "#12",
"track_numeric": 12,
"appear_frames": 35,
"first_seen_sec": 3,
"last_seen_sec": 5,
"box": {
"x1": 100,
"y1": 200,
"x2": 300,
"y2": 500
}
}
]
}HLS 状态
GET /api/hls/status
HLS 播放
GET /api/hls/playlist.m3u8
上传/文件接口
POST /api/video/uploadGET /api/video/listGET /api/video/download/<filename>
说明:
- 当前版本优先支持实时 Web/HLS 与实时 JSON 输出。
POST /api/video/analyze以及完整的离线分析任务管理功能保留用于未来扩展。
关键参数
--streams <main,sub,ai>:选择要启用的输出流--ai-width <value>/--ai-height <value>:AI 调试流的输出尺寸--http-host <value>:Web 监听地址--http-port <value>:Web 监听端口,默认为8000--web-root <path>:静态资源根目录--hls-dir <path>:HLS 输出目录--uploads-dir <path>:上传目录--results-dir <path>:结果目录--enable-ball:启用足球检测输出--ball-trail:启用足球轨迹绘制--ball-trail-length <value>:保留的轨迹点数量--ai-conf-threshold <value>:AI 检测置信度阈值,默认为0.25--disable-web:禁用内置 Web/HLS 服务--detail-info:启用详细日志
项目结构
text
rk3576_football_demo
├── CMakeLists.txt
├── football_players.html
├── static
│ └── hls.min.js
├── include
│ └── rk3576_yolo_demo
│ ├── ai
│ ├── app
│ ├── branch
│ ├── common
│ ├── tracking
│ └── web
├── src
│ ├── ai
│ ├── app
│ ├── branch
│ ├── common
│ ├── tracking
│ ├── web
│ └── ...
└── third_partyAI 推理扩展
- RKNN 入口位于
src/ai/yolov8_engine.cpp - 预处理主要使用
RGA - 检测结果存储在
DetectionFrame缓存中,随后由 AI 分支根据PTS进行匹配与合并
日志与调试
- 默认情况下仅打印启动摘要信息
- 使用
--detail-info可启用详细的运行时日志 - 日志记录器位于
include/rk3576_yolo_demo/common/logger.hpp
部署建议
- 生产环境部署时,请为
/dev/rga、视频设备以及相关运行时库配置好权限 - 建议将模型、运行时库和配置文件一起打包到
install/中 - RTSP 输入优先使用
libavformat;较旧的环境会自动回退到ffmpeg pipe - 若需长期稳定运行,建议使用 systemd 或 supervisor 进行进程管理与重启
已知限制
camera_ai的边界框渲染和水印叠加仍会产生一定的 CPU 开销e2e并非完整的端到端延迟,仅代表内部分支处理时间localvideo目前采用压缩码流读取路径,主要用于离线验证和循环推理