¿Qué es la detección de PPE?
La detección de equipos de protección individual (EPI, o PPE por sus siglas en inglés) utiliza visión artificial para identificar personas y elementos de protección, como cascos, chalecos de seguridad y mascarillas. Este proyecto se ejecuta en una Raspberry Pi 5 con un acelerador Hailo-8 y muestra los resultados en un panel web. Solo comprueba el equipo exigido a las personas que se encuentran dentro de un polígono guardado, lo que permite centrarse en una zona de trabajo concreta.

El panel admite imágenes subidas, vídeos reproducidos en el navegador, una cámara USB y cámaras RTSP/RTSPS. Para determinar si una persona está dentro de la zona, se usa el punto central del borde inferior de su recuadro de detección. Las personas que quedan fuera aparecen en gris y no se incluyen en los recuentos de cumplimiento ni de infracciones.
Dentro de la zona, la aplicación asocia los equipos detectados con cada persona. Si no hay una detección positiva de un elemento obligatorio, se considera que falta. Si aparecen etiquetas contradictorias de presencia y ausencia, prevalece la de mayor confianza. Los recuentos se basan en las detecciones del modelo y en las reglas configuradas.
Modelo PPE y conjunto de datos
Las notas del modelo remiten al conjunto Construction Site Safety Image Dataset Roboflow en Kaggle. Ese enlace corresponde al conjunto de datos; para la inferencia se utiliza el modelo exportado que incluye el repositorio, por lo que no es necesario descargar los datos para seguir esta guía de inicio.
La demo carga models/ppe_hailo_model/ppe.hef, un modelo exportado con Ultralytics para Hailo-8 que incorpora supresión de no máximos (NMS) por clase. Sus metadatos especifican una entrada de 640 × 640 y las siguientes etiquetas:
| ID | Etiqueta |
|---|---|
| 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 |
En el panel puedes exigir casco, chaleco de seguridad, mascarilla o cualquier combinación de estos elementos. Las demás clases del modelo no se configuran como requisitos adicionales de protección.
Primeros pasos
Estos pasos siguen la guía de configuración del repositorio original y las instrucciones de la demo PPE.
1. Preparar la Raspberry Pi y el entorno de Hailo
Utiliza una Raspberry Pi 5 con un acelerador Hailo-8 y Raspberry Pi OS Bookworm de 64 bits. Instala los paquetes de Hailo:
sudo apt update
sudo apt install hailo-all
sudo rebootDespués de reiniciar, abre un terminal y comprueba el dispositivo y la arquitectura:
hailortcli fw-control identify
ls /dev/hailo0
uname -mLa arquitectura debe ser aarch64. El paquete wheel de Python incluido requiere HailoRT 4.23 y CPython 3.12 en Linux ARM de 64 bits. Comprueba la versión del entorno antes de usarlo: si el controlador corresponde a otra versión de HailoRT, obtén un wheel compatible en Hailo Developer Zone, tal como indica la guía del repositorio.
2. Obtener el código y crear el entorno de Python
git clone https://github.com/Hanzo-Huang/pi-ai-demos.git
cd pi-ai-demosLa guía del repositorio recomienda Miniforge para instalar Python 3.12 sin sustituir el Python del sistema. Si todavía no lo tienes instalado, ejecuta:
sudo apt install curl
curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.shAcepta la ubicación de instalación predeterminada y permite que el instalador inicialice el shell. Cierra el terminal, vuelve a abrirlo y regresa al directorio pi-ai-demos que acabas de clonar. Crea y activa el entorno:
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 debe mostrar Python 3.12.x. Comprueba las dependencias:
python -c "import cv2, fastapi, hailo_platform, numpy; print('Python dependencies: OK')"
hailortcli fw-control identify3. Iniciar el proyecto
Desde la raíz del repositorio, con el entorno activado, inicia la aplicación sin cámara USB:
python examples/cv/ppe-detection/run.py --camera-id -1Abre http://<pi-ip>:8000 en un navegador de la misma red y sustituye <pi-ip> por la dirección IP de la Raspberry Pi. Para usar la primera cámara USB, detén el servidor con Ctrl+C y ejecuta:
python examples/cv/ppe-detection/run.py --camera-id 0En otro terminal de la Raspberry Pi, comprueba el estado del backend:
curl http://127.0.0.1:8000/api/healthAntes de iniciar el análisis, la respuesta debe incluir "model_exists":true y "hailo_platform_importable":true. La ruta del modelo predeterminado es models/ppe_hailo_model/ppe.hef. Cada vez que abras un terminal nuevo para ejecutar la demo, vuelve a activar pi-hailo.
4. Elegir una fuente y la zona de detección
- Sube una imagen o un vídeo, utiliza la cámara USB o introduce una URL completa
rtsp://ortsps://y selecciona Connect RTSP (conectar RTSP). - Selecciona Edit area (editar zona) y dibuja un polígono con al menos tres puntos, o elige Full frame (imagen completa) para analizar toda la imagen.
- Selecciona Save area (guardar zona). El análisis utiliza siempre el último polígono guardado; solo puedes modificar la zona en el lienzo durante el modo de edición.
- Elige el equipo obligatorio: casco, chaleco de seguridad, mascarilla o una combinación de ellos.
- Revisa las detecciones superpuestas en la imagen y los recuentos de cumplimiento e infracciones de las personas dentro de la zona guardada.
5. Comprobar las reglas de PPE
El proyecto original incluye pruebas sin dependencias adicionales para las reglas de zona y de cumplimiento. Ejecútalas desde la raíz del repositorio:
python -m unittest discover examples/cv/ppe-detection/tests -v