Parker Hu2025-07-17

使用reComputer RK3576 做足球运动员追踪分析

使用reComputer RK3576 RGA 2D硬件加速和vpu mpp加速。 运行yolov8n模型识别足球运动员,实现实时分析效果。

reComputer-RKrk3576yolotrackingfootballGithub

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.25

RTSP 视频分析:

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/

项目特性

当前功能

  • 输入源:
    • v4l2
    • rtsp
    • localvideo
  • 输出流:
    • 主码流 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 调试流上启用足球轨迹绘制
  • 追踪:
    • 稳定的 track_id 输出
    • JSON 返回 track_idappear_framesfirst_seen_seclast_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

使用方法:

  1. 创建一个 GitHub 仓库并将项目推送上去。
  2. 将该仓库添加到 GitHub Actions。
  3. 推送一个类似 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,ai
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.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 --help

Web 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/upload
  • GET /api/video/list
  • GET /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_party

AI 推理扩展

  • 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 目前采用压缩码流读取路径,主要用于离线验证和循环推理