Was ist PPE-Erkennung?
Bei der Erkennung persönlicher Schutzausrüstung (PSA, auf Englisch PPE) werden Personen und Ausrüstungsgegenstände wie Schutzhelme, Warnwesten und Masken mithilfe von Computer Vision erkannt. Dieses Projekt läuft auf einem Raspberry Pi 5 mit Hailo-8-Beschleuniger und zeigt die Ergebnisse in einem Webdashboard an. Die ausgewählte Schutzausrüstung wird nur bei Personen innerhalb eines gespeicherten Polygons geprüft. So lässt sich die Prüfung auf einen bestimmten Arbeitsbereich begrenzen.

Das Dashboard unterstützt hochgeladene Bilder, im Browser abgespielte Videos, eine USB-Kamera und RTSP/RTSPS-Kameras. Ob sich eine Person im Bereich befindet, wird anhand der Mitte der unteren Kante ihres Erkennungsrahmens bestimmt. Personen außerhalb des Bereichs erscheinen grau und werden weder bei erfüllten Anforderungen noch bei Verstößen mitgezählt.
Innerhalb des Bereichs ordnet die Anwendung die erkannte Schutzausrüstung den einzelnen Personen zu. Wird ein vorgeschriebener Gegenstand nicht als vorhanden erkannt, gilt er als fehlend. Widersprechen sich die Erkennungen für „vorhanden“ und „nicht vorhanden“, entscheidet die höhere Konfidenz. Die Zählergebnisse beruhen somit auf den Modellerkennungen und den eingestellten Regeln.
PPE-Modell und Datensatz
Die Modellbeschreibung verweist auf den Datensatz Construction Site Safety Image Dataset Roboflow auf Kaggle. Der Kaggle-Link führt zum Datensatz; für die Inferenz wird das bereits exportierte Modell aus dem Projekt-Repository verwendet. Für den Einstieg musst du den Datensatz daher nicht herunterladen.
Die Demo lädt models/ppe_hailo_model/ppe.hef, ein mit Ultralytics exportiertes Modell für Hailo-8 mit klassenweiser Non-Maximum Suppression (NMS). Die Metadaten geben eine Eingabegröße von 640 × 640 und folgende Klassenbezeichnungen an:
| ID | Klassenbezeichnung |
|---|---|
| 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 |
Im Dashboard kannst du Schutzhelm, Warnweste und Maske einzeln oder in Kombination vorschreiben. Die übrigen Erkennungsklassen lassen sich nicht als zusätzliche Anforderungen an die Schutzausrüstung festlegen.
Erste Schritte
Die folgenden Schritte orientieren sich an der Einrichtungsanleitung des ursprünglichen Repositorys und der Anleitung zur PPE-Demo.
1. Raspberry Pi und Hailo-Laufzeitumgebung vorbereiten
Verwende einen Raspberry Pi 5 mit Hailo-8-Beschleuniger und Raspberry Pi OS Bookworm in der 64-Bit-Version. Installiere die Hailo-Pakete:
sudo apt update
sudo apt install hailo-all
sudo rebootÖffne nach dem Neustart ein Terminal und prüfe das Gerät sowie die Architektur:
hailortcli fw-control identify
ls /dev/hailo0
uname -mDie Architektur muss aarch64 sein. Das mitgelieferte Python-Wheel benötigt HailoRT 4.23 und CPython 3.12 unter 64-Bit-ARM-Linux. Prüfe vor der Installation die Laufzeitversion: Falls dein Treiber zu einer anderen HailoRT-Version gehört, lade gemäß der Anleitung im Repository ein passendes Wheel aus der Hailo Developer Zone herunter.
2. Code herunterladen und Python-Umgebung erstellen
git clone https://github.com/Hanzo-Huang/pi-ai-demos.git
cd pi-ai-demosDie Anleitung im Repository empfiehlt Miniforge, um Python 3.12 zu installieren, ohne das System-Python zu ersetzen. Falls Miniforge noch nicht installiert ist, führe Folgendes aus:
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Übernimm den vorgeschlagenen Installationspfad und erlaube dem Installer, die Shell zu initialisieren. Schließe das Terminal, öffne es erneut und wechsle zurück in das geklonte Verzeichnis pi-ai-demos. Erstelle und aktiviere die Umgebung:
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 sollte Python 3.12.x anzeigen. Prüfe anschließend die Abhängigkeiten:
python -c "import cv2, fastapi, hailo_platform, numpy; print('Python dependencies: OK')"
hailortcli fw-control identify3. Projekt starten
Starte die Anwendung bei aktivierter Umgebung aus dem Stammverzeichnis des Repositorys zunächst ohne USB-Kamera:
python examples/cv/ppe-detection/run.py --camera-id -1Öffne http://<pi-ip>:8000 in einem Browser im selben Netzwerk. Ersetze <pi-ip> durch die IP-Adresse des Raspberry Pi. Um die erste USB-Kamera zu verwenden, beende den Server mit Ctrl+C und führe dann Folgendes aus:
python examples/cv/ppe-detection/run.py --camera-id 0Prüfe das Backend in einem weiteren Terminal auf dem Raspberry Pi:
curl http://127.0.0.1:8000/api/healthVor der Analyse sollte die Antwort "model_exists":true und "hailo_platform_importable":true enthalten. Der Standardpfad zum Modell lautet models/ppe_hailo_model/ppe.hef. Aktiviere pi-hailo erneut, wenn du die Demo in einem neuen Terminal startest.
4. Quelle und Erkennungsbereich auswählen
- Lade ein Bild oder Video hoch, verwende die USB-Kamera oder gib eine vollständige
rtsp://- bzw.rtsps://-URL ein und wähle Connect RTSP (RTSP verbinden). - Wähle Edit area (Bereich bearbeiten) und zeichne ein Polygon mit mindestens drei Punkten. Mit Full frame (gesamtes Bild) kannst du stattdessen das ganze Bild prüfen.
- Wähle Save area (Bereich speichern). Für die Analyse wird immer das zuletzt gespeicherte Polygon verwendet. Der Bereich auf der Zeichenfläche lässt sich nur im Bearbeitungsmodus ändern.
- Lege die vorgeschriebene Ausrüstung fest: Schutzhelm, Warnweste, Maske oder eine Kombination daraus.
- Prüfe die eingeblendeten Erkennungen und die Anzahl der Personen mit erfüllten Anforderungen bzw. Verstößen innerhalb des gespeicherten Bereichs.
5. PPE-Regeln testen
Das ursprüngliche Projekt enthält Tests für die Bereichs- und Ausrüstungsregeln, die ohne zusätzliche Abhängigkeiten auskommen. Führe sie im Stammverzeichnis des Repositorys aus:
python -m unittest discover examples/cv/ppe-detection/tests -v