William Zhang2025-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 ハードウェアアクセラレーションに対応しています。 モデル入力: 640×640 の固定入力サイズを持つ yolov8n_pose.rknn 量子化モデルを受け付けます。出力には物体検出ボックスと 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 呼び出しインターフェースの調整が必要になることがあります。