reComputer RK3576 ベースのマルチシーン転倒検知
YOLOv8n-pose モデルを使用し、reComputer RK3576 による推論高速化を活用した、マルチシーン・マルチターゲット状況下での転倒行動検知。Web ページを通じて簡易な情報フィードバックを行います。
reComputer RK3576 に基づくマルチシナリオ転倒検知
RK3576 / RKNN / YOLO / RGA に基づく転倒検知プロジェクト
本プロジェクトのソースコードはこちらで確認できます: https://github.com/doublelf/fall_detection
クイックスタート
Docker 経由でプロジェクトイメージを取得します
docker pull ghcr.io/doublelf/pose_optimized:v1内蔵サンプルを使用してモデルの効果をテストします
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 コマンドを使ってイメージをローカルに取り出します
sudo docker cp pose_optimized:/app/web_detection.py ./web_detection.py コードを修正した後は、ローカルコードをイメージに再ビルドすることを忘れないでください
sudo docker build -t seeed/pose_optimized:localその後、再度実行します。
カメラを呼び出してリアルタイム推論を実行
推論実行時に "--video" パラメータを "--camera_id" に変更すると、カメラを呼び出して推論を行います。
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 呼び出しインターフェースの調整が必要になる場合があります。