Inglés | 繁體中文
API de servidor | Streaming-Web | Aumento de datos | Evaluación | Tren
"Construction-Hazard-Detection" es una herramienta impulsada por IA diseñada para mejorar la seguridad en los sitios de construcción. Al aprovechar el modelo YOLO para la detección de objetos, identifica peligros potenciales como:
Trabajadores sin casco
Trabajadores sin chalecos de seguridad
Trabajadores cerca de maquinaria o vehículos.
Los trabajadores en áreas restringidas, las áreas restringidas se generarán automáticamente calculando y agrupando las coordenadas de los conos de seguridad.
Los algoritmos de posprocesamiento mejoran aún más la precisión de la detección. El sistema está diseñado para su implementación en tiempo real y ofrece análisis instantáneos y alertas de peligros identificados.
Además, el sistema integra resultados de reconocimiento de IA en tiempo real a través de una interfaz web. Puede enviar notificaciones e imágenes en el sitio en tiempo real a través de aplicaciones de mensajería como LINE, Messenger, WeChat y Telegram para recibir alertas y recordatorios rápidos. El sistema también admite varios idiomas, lo que permite a los usuarios recibir notificaciones e interactuar con la interfaz en su idioma preferido. Los idiomas admitidos incluyen:
Chino tradicional (Taiwán)
Chino simplificado (China continental)
Francés
Inglés
tailandés
vietnamita
indonesio
Esta compatibilidad con varios idiomas hace que el sistema sea accesible para una audiencia global, mejorando la usabilidad en diferentes regiones.
Ejemplos de detección de peligros
Uso
información adicional
Información del conjunto de datos
Contribuyendo
Hoja de ruta de desarrollo
Licencia
A continuación se muestran ejemplos de detección de peligros en tiempo real por parte del sistema:
Trabajadores sin cascos ni chalecos de seguridad
Trabajadores cerca de Maquinaria o Vehículos
Trabajadores en áreas restringidas
Antes de ejecutar la aplicación, debe configurar el sistema especificando los detalles de las transmisiones de video y otros parámetros en un archivo de configuración JSON. Un archivo de configuración de ejemplo config/configuration.json
debería verse así:
[ {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/","site": "Kaohsiung","stream_name": "Prueba","model_key": "yolo11n","notificaciones ": { "line_token_1": "idioma_1", "line_token_2": "idioma_2"},"detect_with_server": true,"expire_date": "2024-12-31T23:59:59","detection_items": { "detect_no_safety_vest_or_helmet": true, "detect_near_machinery_or_vehicle": true, "detect_in_restricted_area": true},"work_start_hour": 7,"work_end_hour ": 18, "store_in_redis": verdadero }, {"video_url": "URL de transmisión","site": "Factory_1","stream_name": "camera_1","model_key": "yolo11n","notificaciones": { "line_token_3": "language_3", "line_token_4" : "language_4"},"detect_with_server": false,"expire_date": "Sin fecha de caducidad", "detection_items": { "detect_no_safety_vest_or_helmet": verdadero, "detect_near_machinery_or_vehicle": falso, "detect_in_restricted_area": verdadero}, "work_start_hour": 0, "work_end_hour": 24, "store_in_redis": verdadero } ]
Cada objeto de la matriz representa una configuración de transmisión de vídeo con los siguientes campos:
video_url
: la URL de la transmisión de video en vivo. Esto puede incluir:
Flujos de vigilancia
transmisiones RTSP
Corrientes secundarias
Vídeos de YouTube o transmisiones en vivo
Corrientes de discordia
site
: La ubicación del sistema de monitoreo (por ejemplo, sitio de construcción, fábrica).
stream_name
: el nombre asignado a la cámara o transmisión (por ejemplo, "Puerta frontal", "Cámara 1").
model_key
: el identificador de clave que utilizará el modelo de aprendizaje automático (por ejemplo, "yolo11n").
notifications
: una lista de tokens API de mensajería de LINE y los idiomas correspondientes para enviar notificaciones.
Los idiomas admitidos para notificaciones incluyen:
Para obtener información sobre cómo obtener un token LINE, consulte line_notify_guide_en.
zh-TW
: chino tradicional
zh-CN
: chino simplificado
en
: inglés
fr
: francés
vi
: vietnamita
id
: indonesio
th
: tailandés
line_token_1
, line_token_2
, etc.: estos son los tokens de LINE API.
language_1
, language_2
, etc.: los idiomas de las notificaciones (por ejemplo, "en" para inglés, "zh-TW" para chino tradicional).
detect_with_server
: valor booleano que indica si se debe ejecutar la detección de objetos utilizando una API del servidor. Si es True
, el sistema utilizará el servidor para la detección de objetos. Si es False
, la detección de objetos se ejecutará localmente en la máquina.
expire_date
: fecha de vencimiento para la configuración de transmisión de video en formato ISO 8601 (por ejemplo, "2024-12-31T23:59:59"). Si no hay fecha de vencimiento, se puede usar una cadena como "Sin fecha de vencimiento".
detection_items
: especifica los elementos de detección de seguridad para monitorear escenarios específicos. Cada elemento se puede configurar en True
para habilitarlo o False
para deshabilitarlo. Los elementos de detección disponibles son:
detect_no_safety_vest_or_helmet
: Detecta si una persona no lleva chaleco de seguridad o casco. Esto es esencial para monitorear el cumplimiento de los requisitos del equipo de seguridad en sitios donde dicho equipo es obligatorio para la protección del personal.
detect_near_machinery_or_vehicle
: Detecta si una persona está peligrosamente cerca de maquinaria o vehículos. Esto ayuda a prevenir accidentes causados por la proximidad a equipos pesados o vehículos en movimiento, que a menudo se encuentran en sitios de construcción o áreas industriales.
detect_in_restricted_area
: Detecta si una persona ha entrado en un área restringida o controlada. Las áreas restringidas pueden ser peligrosas para el personal no capacitado o pueden contener equipos sensibles, por lo que esta configuración ayuda a controlar el acceso a dichas zonas.
work_start_hour
: especifica la hora (en formato de 24 horas) en la que el sistema debe comenzar a monitorear la transmisión de video. Esto permite restringir el monitoreo a las horas de trabajo activas, lo que reduce el procesamiento innecesario fuera del período de tiempo definido (por ejemplo, 7
a 7:00 a. m.).
work_end_hour
: Especifica la hora (en formato de 24 horas) en la que el sistema debe dejar de monitorear la transmisión de video. El monitoreo cesará después de este tiempo para optimizar el uso de recursos (por ejemplo, 18
a las 6:00 p. m.).
Juntos, work_start_hour
y work_end_hour
definen el período de seguimiento durante un día. Para la supervisión de 24 horas, establezca work_start_hour
en 0
y work_end_hour
en 24
.
store_in_redis
: un valor booleano que determina si se deben almacenar los fotogramas procesados y los datos de detección asociados en Redis. Si es True
, el sistema guardará los datos en una base de datos de Redis para su uso posterior, como monitoreo en tiempo real o integración con otros servicios. Si es False
, no se guardarán datos en Redis.
La aplicación requiere variables de entorno específicas para una configuración adecuada. Estas variables deben definirse en un archivo .env
ubicado en el directorio raíz del proyecto. A continuación se muestra un ejemplo del archivo .env
:
DATABASE_URL='mysql+asyncmy://username:password@mysql/construction_hazard_detection'
API_USERNAME='user'
API_PASSWORD='password'
API_URL="http://yolo-server-api:6000"
REDIS_HOST='redis'
REDIS_PORT=6379
REDIS_PASSWORD='password'
LINE_CHANNEL_ACCESS_TOKEN='YOUR_LINE_CHANNEL_ACCESS_TOKEN'
CLOUDINARY_CLOUD_NAME='YOUR_CLOUDINARY_CLOUD_NAME'
CLOUDINARY_API_KEY='YOUR_CLOUD_API_KEY'
CLOUDINARY_API_SECRET='YOUR_CLOUD_API_SECRET'
DATABASE_URL
: la URL de conexión para la base de datos MySQL. Utilizado por el módulo server_api
.
API_USERNAME
: el nombre de usuario para autenticarse con la API. Utilizado por main.py
API_PASSWORD
: la contraseña para autenticarse con la API. Utilizado por main.py
API_URL
: la URL de la API del servidor YOLO. Utilizado por main.py
REDIS_HOST
: el nombre de host del servidor Redis. Utilizado por main.py
REDIS_PORT
: el número de puerto del servidor Redis. Utilizado por main.py
REDIS_PASSWORD
: la contraseña para conectarse al servidor Redis. Utilizado por main.py
LINE_CHANNEL_ACCESS_TOKEN
: el token de acceso para la API de mensajería LINE. Utilizado por src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_CLOUD_NAME
: el nombre de la nube de Cloudinary para la gestión de medios. Utilizado por src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_KEY
: la clave API para acceder a los servicios de Cloudinary. Utilizado por src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_SECRET
: El secreto de API para acceder a los servicios de Cloudinary. Utilizado por src/notifiers/line_notifier_message_api.py
.
Nota : Reemplace los valores de los marcadores de posición con credenciales reales y detalles de configuración para garantizar una funcionalidad adecuada.
Ahora, puede iniciar el sistema de detección de peligros en Docker o Python env:
Para ejecutar el sistema de detección de peligros, debe tener Docker y Docker Compose instalados en su máquina. Siga estos pasos para que el sistema esté en funcionamiento:
Clona el repositorio en tu máquina local.
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
Navegue hasta el directorio clonado.
cd Construction-Hazard-Detection
Compile y ejecute los servicios utilizando Docker Compose:
compilación de composición acoplable
Para ejecutar la aplicación, utilice el siguiente comando:
Docker-componer
Puede ver los resultados de la detección en http://localhost
Para detener los servicios, utilice el siguiente comando:
Docker-componer hacia abajo
Para ejecutar el sistema de detección de peligros con Python, siga estos pasos:
Utilice el siguiente comando para clonar el repositorio de GitHub:
clon de git https://github.com/yihong1120/Construction-Hazard-Detection.git
Cambie el directorio al repositorio recién clonado:
cd Detección-de-peligros-en-la-construcción
Ejecute el siguiente comando para instalar los paquetes de Python necesarios:
instalación de pip -r requisitos.txt
Abra la terminal y ejecute los siguientes comandos para instalar e iniciar el servidor MySQL:
actualización sudo apta sudo apto instalar servidor mysql sudo systemctl iniciar mysql.service
Descargue e instale la versión apropiada de MySQL para su sistema operativo desde la página de Descargas de MySQL.
Después de instalar MySQL, use el siguiente comando para inicializar la base de datos construction_hazard_detection
y crear la tabla users
:
mysql -u raíz -p <scripts/init.sql
Se le pedirá que ingrese la contraseña de root de MySQL. Asegúrese de que el archivo scripts/init.sql
contenga los comandos SQL necesarios para configurar la base de datos y las tablas como se describió anteriormente.
Redis solo es necesario cuando se utiliza la funcionalidad Streaming Web . Siga los pasos a continuación para configurar Redis.
Instalar Redis
Abra la terminal y ejecute los siguientes comandos:
actualización sudo apta sudo apto instalar servidor redis
Configurar Redis (opcional)
Si necesita configuraciones personalizadas, edite el archivo de configuración de Redis:
sudo vim /etc/redis/redis.conf
Para mejorar la seguridad, habilite la protección con contraseña agregando o modificando la siguiente línea:
requirepass YourStrongPassword
Reemplace YourStrongPassword
con una contraseña segura.
Iniciar y habilitar el servicio Redis
Inicie el servicio Redis:
sudo systemctl iniciar redis.servicio
Habilite Redis para que se inicie automáticamente al arrancar:
sudo systemctl habilitar redis.service
Consulte la guía de instalación oficial de Redis para obtener instrucciones específicas para su sistema operativo.
Inicie la API de detección de objetos con el siguiente comando:
ejemplos de uvicorn.YOLO_server.backend.app:sio_app --host 0.0.0.0 --puerto 8001
Utilice el siguiente comando para ejecutar la aplicación principal y especificar el archivo de configuración:
python3 main.py --config config/configuration.json
Reemplace config/configuration.json
con la ruta real a su archivo de configuración.
Ejecute el siguiente comando para iniciar el servicio backend en un sistema Linux:
ejemplos de uvicorn.streaming_web.backend.app:sio_app --host 127.0.0.1 --puerto 8002
Para iniciar el servicio backend en un sistema Windows, use el siguiente comando:
servicio-camarera --host=127.0.0.1 --port=8002 "examples.streaming_web.backend.app:streaming-web-app"
Consulte el archivo examples/YOLO_server_api/frontend/nginx.conf
para obtener instrucciones de implementación. Coloque los archivos web estáticos en el siguiente directorio:
examples/YOLO_server_api/frontend/dist
Los registros del sistema están disponibles dentro del contenedor Docker y se puede acceder a ellos para fines de depuración.
Las imágenes de salida con detecciones (si están habilitadas) se guardarán en la ruta de salida especificada.
Las notificaciones se enviarán a través de la API de mensajería de LINE durante las horas especificadas si se detectan peligros.
Asegúrese de que Dockerfile
esté presente en el directorio raíz del proyecto y esté configurado correctamente según los requisitos de su aplicación.
Para obtener más información sobre el uso y los comandos de Docker, consulte la documentación de Docker.
El conjunto de datos principal para entrenar este modelo es el conjunto de datos de imágenes de seguridad en el sitio de construcción de Roboflow. Hemos enriquecido este conjunto de datos con anotaciones adicionales y lo hemos hecho accesible abiertamente en Roboflow. El conjunto de datos mejorado se puede encontrar aquí: Detección de peligros de construcción en Roboflow. Este conjunto de datos incluye las siguientes etiquetas:
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'
Modelo | tamaño (píxeles) | valor del mapa 50 | valor del mapa 50-95 | parámetros (METRO) | FLOP (B) |
---|---|---|---|---|---|
yolo11n | 640 | 58.0 | 34.2 | 2.6 | 6.5 |
yolo11s | 640 | 70.1 | 44,8 | 9.4 | 21.6 |
YOLO11m | 640 | 73.3 | 42,6 | 20.1 | 68.0 |
yolo11l | 640 | 77,3 | 54,6 | 25.3 | 86,9 |
yolo11x | 640 | 82.0 | 61,7 | 56,9 | 194,9 |
Nuestro completo conjunto de datos garantiza que el modelo esté bien equipado para identificar una amplia gama de peligros potenciales que se encuentran comúnmente en entornos de construcción.
Agregue soporte para notificaciones de WhatsApp.
Corrija la interfaz UI de ejemplos/YOLO server_api/versión móvil frontend
Agradecemos las contribuciones a este proyecto. Siga estos pasos:
Bifurca el repositorio.
Haz tus cambios.
Envíe una solicitud de extracción con una descripción clara de sus mejoras.
Este proyecto está bajo la Licencia AGPL-3.0.