reComputer-RK / Docker / RKNN / YOLO に基づき、車載障害物認識プロジェクトを手早く構築

本プロジェクトのソースコードは GitHub で確認できます: https://github.com/doublelf/area-intrusion-alarm
プロジェクト概要
本プロジェクトは RK3576 / RKNN / YOLO / RGA をベースにした エリア侵入検知 プロジェクトに由来しています。元のシナリオは、固定カメラの映像の中で指定したポリゴンに「人 / 車」対象が入った際にアラートを発火するというものでした。「エリア描画 + ステートマシン + スナップショット保存」という一連のロジックは、車載シナリオへも自然に移植できます: ポリゴンを「立入禁止エリア」から「衝突リスクエリア / 死角 / 横断歩道」へ再定義し、発火クラスを 2 クラスから車両・人関連 8 クラスへ拡張することで、本プロジェクトが示す車載障害物認識能力を実現しています。
デモ素材の説明: 本リポジトリのルートにある
video/1-1.mp4は走行シーンの動画で、実行中は MJPEG プレビューが上部の GIF を置き換えます。
クイックスタート
1. プロジェクトのクローン
git clone https://github.com/doublelf/area-intrusion-alarm
cd area-intrusion-alarm2. クラスファイル class_config.txt の準備
リポジトリのルートには class_config.txt という名前があらかじめ予約されていますが、現状は空ディレクトリのプレースホルダです(同期時に一部マウントポイントにより誤ってディレクトリ化されました)。これを同名のファイルに置き換えて、以下の内容にしてください(COCO の車両 / 歩行者サブセット、8 クラス):
"person", "bicycle", "car", "motorbike", "bus", "truck", "traffic light", "stop sign"3. イメージのビルド
sudo docker build -t area-intrusion:local .4. コンテナの起動と推論実行
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 \
-e RKNN_LOG_LEVEL=0 \
-v $(pwd)/class_config.txt:/app/class_config.txt \
-v $(pwd)/video:/app/video:ro \
--device /dev/video0:/dev/video0 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible \
area-intrusion:local \
python3 web_detection.py --model_path model/yolov8n.rknn --video video/1-1.mp4 --class_path class_config.txt各項目の意味:
-v $(pwd)/class_config.txt:/app/class_config.txtはクラスファイルをコンテナ内にマウントし、--class_path class_config.txtと組み合わせて 8 クラスの車両 / 歩行者サブセットを有効にします;-v $(pwd)/video:/app/video:roはローカルのvideo/ディレクトリをイメージ内の/app/videoに読み取り専用でマウントします;--device /dev/video0:/dev/video0と--device /dev/dri/renderD128:/dev/dri/renderD128はそれぞれ V4L2 カメラと RGA ハードウェアアクセラレーションのために使用します;- 末尾の
python3 web_detection.py --model_path ... --video video/1-1.mp4 --class_path ...が推論起動コマンドです。
CLI 互換性に関する注意: 本リポジトリの
web_detection.pyで現在のパラメータ名は--video_pathです(web_detection.py:1206を参照)。実行時にunknown arg: --videoと表示された場合は、--video video/1-1.mp4を--video_path video/1-1.mp4に書き換えてください。その他のパラメータは変更不要です。
5. Web プラットフォームへのアクセス
プロジェクトの起動が成功したら、ブラウザで http://<board_ip>:8000/ にアクセスし、上部のタブで 障害物エリア(Intrusion Zones)に切り替えます:
- Draw モードを選択し、画面上で 3 つ以上の点を順にクリックし、ダブルクリックするか始点を再度クリックしてポリゴンを閉じ、エリア名(例:
前方死角、右ミラー死角、横断歩道)を入力して確定; - Target チェックボックスで、警告に含める対象クラスを選択します(デフォルトで person / car にチェック、必要に応じて truck / bus / bicycle / motorbike / traffic light / stop sign を追加できます);
- 任意のターゲットの重心が有効なエリアに入ると、右側の Recent Warnings リストに新しい行が追加されます。トリガー時刻、対象クラス、所属エリア名、注釈付き JPEG サムネイルが含まれます(クリックで原画像をダウンロードできます)。

プロジェクトに基づく二次開発
イメージから完全なソースコードをローカルに取り出します:
sudo docker cp area-intrusion:local:/app/web_detection.py ./
sudo docker cp area-intrusion:local:/app/py_utils ./修正後、イメージを再ビルドします:
sudo docker build -t area-intrusion:local .その後、上記の docker run コマンドで再起動してください。
一般的な二次開発の切入点:
- 検知クラスの差し替え:
class_config.txtを編集してクラスの追加 / 削除を行います。コード変更不要で即時反映されます; - 発火感度の切り替え:Web の Real-time Detection タブで Confidence Threshold と IOU Threshold のスライダを操作します;
- カスタムエリアの組み込み:
POST /api/regionsを呼び出してポリゴン頂点を直接書き込みます。座標はソース画像座標系で、車載 HMI 上位機との接続に適しています。
カメラを呼び出してリアルタイム推論
--video を --camera_id に置き換えれば、USB / CSI カメラを呼び出せます。コマンドライン引数は --device でマップしたカメラデバイスと一対一に対応します:
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 \
-e RKNN_LOG_LEVEL=0 \
-v $(pwd)/class_config.txt:/app/class_config.txt \
--device /dev/video0:/dev/video0 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible \
area-intrusion:local \
python3 web_detection.py --model_path model/yolov8n.rknn --camera_id 0 --class_path class_config.txt