William Zhang2026-07-23

reComputer RK3576 ベースのマルチシーン転倒検知

YOLOv8n-pose モデルを使用し、reComputer RK3576 による推論高速化を活用した、マルチシーン・マルチターゲット状況下での転倒行動検知。Web ページを通じて簡易な情報フィードバックを行います。

reComputer-RKrk3576yolofall_detectionGithub

reComputer RK3576 に基づくマルチシナリオ転倒検知

RK3576 / RKNN / YOLO / RGA に基づく転倒検知プロジェクト

本プロジェクトのソースコードはこちらで確認できます: https://github.com/doublelf/fall_detection

クイックスタート

Docker 経由でプロジェクトイメージを取得します

bash
docker pull ghcr.io/doublelf/pose_optimized:v1

内蔵サンプルを使用してモデルの効果をテストします

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  -v $(pwd)/video:/app/video \
  seeed/pose_optimized:local \
  python3 web_detection.py --model_path model/yolov8n_pose.rknn --video video/example1.mp4

ここで "-v $(pwd)/video:/app/video" は、ローカルの video フォルダをイメージ内の /app/video へマッピングします。

ローカル動画を推論に使用したい場合は、$(pwd)/video で指定したフォルダにローカルファイルを保存してください。

プロジェクト正常起動後、http://<board_ip>:8000/ にアクセスするとリアルタイム推論効果を確認できます。

プロジェクトに基づく二次開発

cp コマンドを使ってイメージをローカルに取り出します

bash
sudo docker cp pose_optimized:/app/web_detection.py ./

web_detection.py コードを修正した後は、ローカルコードをイメージに再ビルドすることを忘れないでください

bash
sudo docker build -t seeed/pose_optimized:local

その後、再度実行します。

カメラを呼び出してリアルタイム推論を実行

推論実行時に "--video" パラメータを "--camera_id" に変更すると、カメラを呼び出して推論を行います。

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  -v $(pwd)/video:/app/video \
  seeed/pose_optimized:local \
  python3 web_detection.py --model_path model/yolov8n_pose.rknn --camera_id 1

ここで "--camera_id" は、"--device /dev/video1:/dev/video1" で指定したデバイスと対応しています。

AI 推論拡張

推論エンジン: RKNN C API をラップしており、メインエントリは web_detection.py にあり、実際の呼び出しは utils/rknn_wrapper.py を介して行われ、RK3576 NPU ハードウェアアクセラレーションをサポートします。 モデル入力: yolov8n_pose.rknn 量子化モデルを受け入れ、固定入力サイズは 640×640 です。出力には物体検出ボックスと 17 個のキーポイント座標が含まれます。 後処理: モデル出力の 3 つの特徴マップを解析し、NMS によって重複ボックスを除去し、OKS アルゴリズムを用いてキーポイント信頼度を最適化し、最終的に構造化された姿勢データを生成します。

前処理と画像処理

ハードウェアアクセラレーション: RK3576 の RGA ユニットを利用して、画像スケーリング、色空間変換(YUV→RGB)、フォーマット変換を行い、CPU 負荷を大幅に低減します。 ビデオキャプチャ: V4L2 カメラからの直接キャプチャ、またはローカルビデオファイルからの読み取りをサポートし、--camera_id および --video パラメータで入力ソースを切り替えます。 フレームレート制御: キャプチャスレッドと推論スレッドを分離し、ダブルバッファキューを使用してフレーム落ちを防ぎ、リアルタイムストリームの最小限の遅延を確保します。

デプロイメント推奨事項

ランタイム権限: --privileged コンテナモードを使用し、/dev/video*、/dev/dri/renderD*(RGA 用)、およびデバイスツリー互換性ファイルを明示的にマッピングして、NPU と VPU への正常なアクセスを確保する必要があります。 イメージパッケージング: イメージには既にすべての依存関係(RKNN Runtime、OpenCV、Flask)が含まれています。ポートマッピングの複雑さを避けるため、--net=host の使用を推奨します。モデルや設定を永続化する必要がある場合は、外部ディレクトリをマウントできます。 長期運用: コンテナプロセスを監視するために systemd サービスまたは supervisor を使用し、--restart=always ポリシーを設定することを推奨します。

既知の制限事項

シングルストリーム推論: 現在の設計は単一ビデオストリーム入力のみをサポートしています。マルチストリーム同時処理には、マルチスレッド/マルチプロセス管理ロジックの追加開発が必要です。 レンダリングオーバーヘッド: RGA により前処理が高速化されますが、OpenCV の描画操作は依然としていくつかの CPU リソースを消費します。高解像度ではフレームレートが 15-20 FPS に低下する可能性があります。 ネットワークストリームサポート: 現在はローカルカメラまたはファイルのみをサポートしており、RTSP/HTTP ネットワークストリームプルはまだ統合されていません。 永続キャッシュなし: 検出結果はリアルタイム表示のみに使用され、データベースやファイルシステムには保存されません。履歴記録にはカスタム拡張が必要です。 ハードウェア互換性: RGA アクセラレーションは RK3576 専用ドライバに依存します。他の RK シリーズチップ(RK3568 など)では直接動作しない可能性があり、OpenCV の再コンパイルと RGA 呼び出しインターフェースの調整が必要になる場合があります。