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 上でローカルにプロジェクトを実行することもできます。

note: 本プロジェクトはメモリ使用量が少ない一方、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-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 ワークフローが含まれています。

  • push または pull request 時に自動でプロジェクトをビルド
  • ローカルで使用しているものと同じビルドスクリプトを実行: ./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 は現在圧縮ストリーム読み込みパスを使用しており、主にオフライン検証とループ推論を目的としています