Parker Hu2026-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 使用率は高くなります。今後の最適化が検討される予定です。

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 \ #Change it to the local path of your video file
  --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-ballball 出力を有効化
    • --ball-trail で AI デバッグストリームにボールの軌跡を描画
  • 追跡:
    • 安定した track_id 出力
    • JSON で track_idappear_framesfirst_seen_seclast_seen_sec を返す

Web 再生

現在使用しているもの:

  • プロトコル: HLS
  • コーデック: H.264
  • フレームレート: 30 FPS
  • 解像度: 1280x720

ビルドと実行

GitHub CI とリリースパッケージ

このリポジトリには、以下の GitHub Actions ワークフローが含まれています:

  • プッシュまたはプルリクエスト時に自動的にプロジェクトをビルド
  • ローカルで使用するビルドスクリプトと同じ ./scripts/build-linux.sh を実行
  • Linux/aarch64 向けのリリースアーカイブを dist/ に生成
  • v1.0.0 のようなタグがプッシュされたときに、GitHub リリースとしてアーカイブを公開

使用方法:

  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

アップロード/ファイル API

  • 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 は現在、圧縮ストリームの読み取りパスを使用しており、主にオフライン検証とループ推論に用いられます