Seeed Studio2026-07-22

reComputer RK3576 による車載障害物認識

YOLOv8n モデルを用い、RK3576 NPU 上で車両、歩行者、二輪車、交通標識をリアルタイムに 検出します。RK3576 の 2 TOPS NPU でエッジ推論を高速化し、Web ページに 「障害物リスクエリア」ポリゴンを描画し、エリアに進入した時点でアラートを発火させ、 注釈付き JPEG スナップショットを出力します。

CVObject DetectionEdge AIGithub

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. プロジェクトのクローン

bash
git clone https://github.com/doublelf/area-intrusion-alarm
cd area-intrusion-alarm

2. クラスファイル class_config.txt の準備

リポジトリのルートには class_config.txt という名前があらかじめ予約されていますが、現状は空ディレクトリのプレースホルダです(同期時に一部マウントポイントにより誤ってディレクトリ化されました)。これを同名のファイルに置き換えて、以下の内容にしてください(COCO の車両 / 歩行者サブセット、8 クラス):

text
"person", "bicycle", "car", "motorbike", "bus", "truck", "traffic light", "stop sign"

3. イメージのビルド

bash
sudo docker build -t area-intrusion:local .

4. コンテナの起動と推論実行

bash
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)に切り替えます:

  1. Draw モードを選択し、画面上で 3 つ以上の点を順にクリックし、ダブルクリックするか始点を再度クリックしてポリゴンを閉じ、エリア名(例:前方死角、右ミラー死角、横断歩道)を入力して確定;
  2. Target チェックボックスで、警告に含める対象クラスを選択します(デフォルトで person / car にチェック、必要に応じて truck / bus / bicycle / motorbike / traffic light / stop sign を追加できます);
  3. 任意のターゲットの重心が有効なエリアに入ると、右側の Recent Warnings リストに新しい行が追加されます。トリガー時刻、対象クラス、所属エリア名、注釈付き JPEG サムネイルが含まれます(クリックで原画像をダウンロードできます)。


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

イメージから完全なソースコードをローカルに取り出します:

bash
sudo docker cp area-intrusion:local:/app/web_detection.py ./
sudo docker cp area-intrusion:local:/app/py_utils ./

修正後、イメージを再ビルドします:

bash
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 でマップしたカメラデバイスと一対一に対応します:

bash
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