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 上でローカルにプロジェクトを実行することもできます。
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.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 - Linux/aarch64 向けのリリースアーカイブを
dist/配下に生成 v1.0.0のようなタグがプッシュされた際に、そのアーカイブを GitHub リリースとして公開
使用方法:
- 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.15AIデバッグストリーム + 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-infoNPU入力フレームのエクスポート
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
アップロード/ファイルAPI
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は現在圧縮ストリーム読み込みパスを使用しており、主にオフライン検証とループ推論を目的としています