PPE 検出とは?
PPE(個人用保護具)検出は、コンピュータービジョンを使って人やヘルメット、安全ベスト、マスクなどの保護具を識別する技術です。このプロジェクトでは、Hailo-8 アクセラレーターを搭載した Raspberry Pi 5 で検出を行い、ブラウザーのダッシュボードに結果を表示します。保存した多角形のエリア内にいる人だけを対象に、指定した保護具の着用状況を確認できるため、特定の作業エリアに絞ってチェックできます。

ダッシュボードは、アップロードした画像、ブラウザーで再生する動画、USB カメラ、RTSP/RTSPS カメラに対応しています。人物の検出枠の下辺中央がエリア内にあるかどうかで、その人を判定対象に含めるかを決めます。エリア外の人はグレーで表示され、着用条件を満たす人数にも違反人数にも含まれません。
エリア内の人については、検出された保護具を各人物に対応付けます。必須の保護具が「着用あり」として検出されなかった場合は、未着用と判定します。「着用あり」と「着用なし」のラベルが競合した場合は、信頼度の高いラベルを採用します。集計値は、この検出結果と設定したルールに基づきます。
PPE モデルとデータセット
プロジェクトのモデル説明では、Kaggle の Construction Site Safety Image Dataset Roboflow が参照されています。このリンクはデータセットの参照先です。推論にはリポジトリに同梱されたエクスポート済みモデルを使うため、以下の手順でデモを動かす際にデータセットをダウンロードする必要はありません。
デモが読み込む models/ppe_hailo_model/ppe.hef は、Ultralytics でエクスポートされた Hailo-8 用モデルです。クラスごとの非最大値抑制(NMS)が組み込まれています。メタデータでは、入力サイズが 640 × 640、クラスラベルが以下のように定義されています。
| ID | クラスラベル |
|---|---|
| 0 | Hardhat |
| 1 | Mask |
| 2 | NO-Hardhat |
| 3 | NO-Mask |
| 4 | NO-Safety Vest |
| 5 | Person |
| 6 | Safety Cone |
| 7 | Safety Vest |
| 8 | machinery |
| 9 | vehicle |
ダッシュボードでは、ヘルメット、安全ベスト、マスクのうち、必要なものを単独または組み合わせて指定できます。それ以外の検出クラスは、保護具の着用条件として追加するものではありません。
はじめに
以下は、開発元の環境構築ガイドと PPE デモの手順に沿ったセットアップ方法です。
1. Raspberry Pi と Hailo の実行環境を準備する
Hailo-8 アクセラレーターを搭載した Raspberry Pi 5 と、64 ビット版 Raspberry Pi OS Bookworm を用意します。Hailo のパッケージをインストールします。
sudo apt update
sudo apt install hailo-all
sudo reboot再起動後、ターミナルを開いてデバイスとアーキテクチャーを確認します。
hailortcli fw-control identify
ls /dev/hailo0
uname -mアーキテクチャーは aarch64 である必要があります。同梱の Python wheel は 64 ビット ARM Linux 向けで、HailoRT 4.23 と CPython 3.12 が必要です。使用前に実行環境のバージョンを確認してください。ドライバーが別の HailoRT バージョンに対応している場合は、開発元のガイドに従い、Hailo Developer Zone から対応する wheel を入手します。
2. コードを取得し、Python 環境を作成する
git clone https://github.com/Hanzo-Huang/pi-ai-demos.git
cd pi-ai-demos開発元のガイドでは、システムの Python を置き換えずに Python 3.12 を使える Miniforge を推奨しています。まだインストールしていない場合は、次を実行します。
sudo apt install curl
curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.shインストール先はデフォルトのままにし、シェルの初期化を許可します。ターミナルを開き直して、クローンした pi-ai-demos ディレクトリに戻り、環境を作成して有効にします。
conda config --set auto_activate_base false
conda create --name pi-hailo python=3.12 pip -y
conda activate pi-hailo
python --version
python -m pip install -r requirements.txt
python -m pip install runtime/wheels/hailort-4.23.0-cp312-cp312-linux_aarch64.whlpython --version で Python 3.12.x と表示されることを確認します。続いて、依存パッケージを確認します。
python -c "import cv2, fastapi, hailo_platform, numpy; print('Python dependencies: OK')"
hailortcli fw-control identify3. プロジェクトを起動する
環境が有効な状態で、リポジトリのルートから次を実行します。USB カメラを使わずに起動するコマンドです。
python examples/cv/ppe-detection/run.py --camera-id -1同じネットワーク上のブラウザーで http://<pi-ip>:8000 を開きます。<pi-ip> は Raspberry Pi の IP アドレスに置き換えてください。最初の USB カメラを使う場合は、Ctrl+C でサーバーを停止してから次を実行します。
python examples/cv/ppe-detection/run.py --camera-id 0Raspberry Pi で別のターミナルを開き、バックエンドの状態を確認します。
curl http://127.0.0.1:8000/api/health解析を始める前に、応答に "model_exists":true と "hailo_platform_importable":true が含まれていることを確認してください。デフォルトのモデルパスは models/ppe_hailo_model/ppe.hef です。新しいターミナルでデモを実行するときは、その都度 pi-hailo を有効にしてください。
4. 入力ソースと検出エリアを選ぶ
- 画像や動画をアップロードするか、USB カメラを使用します。ネットワークカメラの場合は、完全な
rtsp://またはrtsps://URL を入力し、Connect RTSP(RTSP に接続)を選択します。 - Edit area(エリアを編集)を選び、3 点以上の頂点を持つ多角形を描きます。画面全体を対象にする場合は Full frame(全画面)を選びます。
- Save area(エリアを保存)を選択します。解析には最後に保存した多角形が使われます。キャンバス上のエリアを変更できるのは編集モード中だけです。
- 必須にする保護具を、ヘルメット、安全ベスト、マスクから選びます。複数選択も可能です。
- 検出結果の表示と、保存したエリア内で着用条件を満たす人数・違反人数を確認します。
5. PPE の判定ルールをテストする
開発元のプロジェクトには、追加の依存パッケージなしで実行できる、エリア判定と着用条件のテストが用意されています。リポジトリのルートで実行します。
python -m unittest discover examples/cv/ppe-detection/tests -v