Hanzo Huang2026-09-14

Detección de equipos de protección por zonas con Raspberry Pi 5 y Hailo-8

Comprueba el uso de cascos, chalecos de seguridad y mascarillas en una zona definida, con detección acelerada por Hailo-8 y un panel web en Raspberry Pi 5.

CVObject DetectionPPEGitHub

¿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.

Demostración de detección de equipos de protección por zonas

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:

IDEtiqueta
0Hardhat
1Mask
2NO-Hardhat
3NO-Mask
4NO-Safety Vest
5Person
6Safety Cone
7Safety Vest
8machinery
9vehicle

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:

bash
sudo apt update
sudo apt install hailo-all
sudo reboot

Después de reiniciar, abre un terminal y comprueba el dispositivo y la arquitectura:

bash
hailortcli fw-control identify
ls /dev/hailo0
uname -m

La 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

bash
git clone https://github.com/Hanzo-Huang/pi-ai-demos.git
cd pi-ai-demos

La 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:

bash
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

Acepta 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:

bash
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.whl

python --version debe mostrar Python 3.12.x. Comprueba las dependencias:

bash
python -c "import cv2, fastapi, hailo_platform, numpy; print('Python dependencies: OK')"
hailortcli fw-control identify

3. Iniciar el proyecto

Desde la raíz del repositorio, con el entorno activado, inicia la aplicación sin cámara USB:

bash
python examples/cv/ppe-detection/run.py --camera-id -1

Abre 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:

bash
python examples/cv/ppe-detection/run.py --camera-id 0

En otro terminal de la Raspberry Pi, comprueba el estado del backend:

bash
curl http://127.0.0.1:8000/api/health

Antes 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

  1. Sube una imagen o un vídeo, utiliza la cámara USB o introduce una URL completa rtsp:// o rtsps:// y selecciona Connect RTSP (conectar RTSP).
  2. 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.
  3. 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.
  4. Elige el equipo obligatorio: casco, chaleco de seguridad, mascarilla o una combinación de ellos.
  5. 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:

bash
python -m unittest discover examples/cv/ppe-detection/tests -v