Qu’est-ce que la détection des EPI ?
La détection des équipements de protection individuelle (EPI, ou PPE en anglais) s’appuie sur la vision par ordinateur pour repérer les personnes et leurs équipements : casques, gilets de sécurité et masques. Ce projet fonctionne sur un Raspberry Pi 5 équipé d’un accélérateur Hailo-8 et affiche les résultats dans un tableau de bord web. Il vérifie le port des équipements demandés uniquement pour les personnes situées à l’intérieur d’un polygone enregistré, afin de cibler une zone de travail précise.

Le tableau de bord accepte les images importées, les vidéos lues dans le navigateur, une caméra USB et les caméras RTSP/RTSPS. La position du milieu du bord inférieur du cadre de détection d’une personne détermine si elle se trouve dans la zone. Les personnes à l’extérieur apparaissent en gris et ne sont comptabilisées ni comme conformes ni comme en infraction.
Pour les personnes à l’intérieur de la zone, l’application associe les équipements détectés à chaque personne. Si un équipement obligatoire n’est pas détecté comme présent, il est considéré comme manquant. En cas de contradiction entre les libellés de présence et d’absence, celui dont le score de confiance est le plus élevé est retenu. Les totaux dépendent donc des détections du modèle et des règles configurées.
Modèle PPE et jeu de données
Les notes sur le modèle renvoient au jeu de données Construction Site Safety Image Dataset Roboflow sur Kaggle. Ce lien concerne le jeu de données ; l’inférence utilise le modèle exporté fourni dans le dépôt du projet. Il n’est donc pas nécessaire de télécharger le jeu de données pour suivre ce guide de démarrage.
La démo charge models/ppe_hailo_model/ppe.hef, un modèle exporté avec Ultralytics pour Hailo-8, qui intègre une suppression des non-maxima (NMS) par classe. Ses métadonnées indiquent une entrée de 640 × 640 et les libellés de classe suivants :
| ID | Libellé |
|---|---|
| 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 |
Le tableau de bord permet d’exiger le casque, le gilet de sécurité, le masque ou une combinaison de ces équipements. Les autres classes détectées ne constituent pas des exigences supplémentaires de port d’EPI.
Prise en main
Les étapes ci-dessous suivent le guide de configuration du dépôt d’origine et les instructions de la démo PPE.
1. Préparer le Raspberry Pi et l’environnement Hailo
Utilisez un Raspberry Pi 5 équipé d’un accélérateur Hailo-8, sous Raspberry Pi OS Bookworm 64 bits. Installez les paquets Hailo :
sudo apt update
sudo apt install hailo-all
sudo rebootAprès le redémarrage, ouvrez un terminal et vérifiez le périphérique ainsi que l’architecture :
hailortcli fw-control identify
ls /dev/hailo0
uname -mL’architecture doit être aarch64. Le paquet Python wheel fourni nécessite HailoRT 4.23 et CPython 3.12 sous Linux ARM 64 bits. Vérifiez la version de l’environnement avant de l’utiliser : si le pilote correspond à une autre version de HailoRT, récupérez un wheel compatible sur Hailo Developer Zone, comme indiqué dans le guide du dépôt.
2. Récupérer le code et créer l’environnement Python
git clone https://github.com/Hanzo-Huang/pi-ai-demos.git
cd pi-ai-demosLe guide du dépôt recommande Miniforge pour installer Python 3.12 sans remplacer le Python du système. Si Miniforge n’est pas encore installé, exécutez :
sudo apt install curl
curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.shConservez le dossier d’installation par défaut et autorisez l’initialisation du shell. Fermez puis rouvrez le terminal, et revenez dans le dossier pi-ai-demos que vous avez cloné. Créez et activez l’environnement :
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 doit afficher Python 3.12.x. Vérifiez ensuite les dépendances :
python -c "import cv2, fastapi, hailo_platform, numpy; print('Python dependencies: OK')"
hailortcli fw-control identify3. Lancer le projet
Depuis la racine du dépôt, avec l’environnement activé, démarrez l’application sans caméra USB :
python examples/cv/ppe-detection/run.py --camera-id -1Ouvrez http://<pi-ip>:8000 dans un navigateur sur le même réseau, en remplaçant <pi-ip> par l’adresse IP du Raspberry Pi. Pour utiliser la première caméra USB, arrêtez le serveur avec Ctrl+C, puis exécutez :
python examples/cv/ppe-detection/run.py --camera-id 0Dans un autre terminal sur le Raspberry Pi, vérifiez l’état du backend :
curl http://127.0.0.1:8000/api/healthAvant de lancer l’analyse, la réponse doit contenir "model_exists":true et "hailo_platform_importable":true. Le chemin du modèle par défaut est models/ppe_hailo_model/ppe.hef. Pensez à réactiver pi-hailo chaque fois que vous ouvrez un nouveau terminal pour lancer la démo.
4. Choisir une source et une zone de détection
- Importez une image ou une vidéo, utilisez la caméra USB, ou saisissez une URL complète
rtsp://ourtsps://et sélectionnez Connect RTSP (connexion RTSP). - Sélectionnez Edit area (modifier la zone) et tracez un polygone d’au moins trois points, ou choisissez Full frame (image entière) pour analyser toute l’image.
- Sélectionnez Save area (enregistrer la zone). L’analyse utilise toujours le dernier polygone enregistré ; la zone sur le canevas ne peut être modifiée qu’en mode édition.
- Choisissez les équipements obligatoires : casque, gilet de sécurité, masque ou une combinaison de ces éléments.
- Consultez les détections superposées à l’image et les totaux de personnes conformes ou en infraction à l’intérieur de la zone enregistrée.
5. Tester les règles de PPE
Le projet d’origine fournit des tests sans dépendances supplémentaires pour les règles de zone et de conformité. Exécutez-les depuis la racine du dépôt :
python -m unittest discover examples/cv/ppe-detection/tests -v