Anglais | 繁體中文
API serveur | Streaming-Web | Augmentation des données | Évaluation | Former
« Construction-Hazard-Detection » est un outil alimenté par l'IA conçu pour améliorer la sécurité sur les chantiers de construction. En exploitant le modèle YOLO pour la détection d'objets, il identifie les dangers potentiels tels que :
Travailleurs sans casque
Travailleurs sans gilets de sécurité
Travailleurs à proximité de machines ou de véhicules
Travailleurs dans les zones réglementées, les zones réglementées seront automatiquement générées en calculant et en regroupant les coordonnées des cônes de sécurité.
Les algorithmes de post-traitement améliorent encore la précision de la détection. Le système est conçu pour un déploiement en temps réel, offrant une analyse instantanée et des alertes pour les dangers identifiés.
De plus, le système intègre les résultats de reconnaissance de l’IA en temps réel via une interface Web. Il peut envoyer des notifications et des images sur site en temps réel via des applications de messagerie telles que LINE, Messenger, WeChat et Telegram pour des alertes et des rappels rapides. Le système prend également en charge plusieurs langues, permettant aux utilisateurs de recevoir des notifications et d'interagir avec l'interface dans leur langue préférée. Les langues prises en charge incluent :
Chinois traditionnel (Taïwan)
Chinois simplifié (Chine continentale)
Français
Anglais
thaïlandais
vietnamien
indonésien
Cette prise en charge multilingue rend le système accessible à un public mondial, améliorant ainsi la convivialité dans différentes régions.
Exemples de détection des dangers
Usage
Informations Complémentaires
Informations sur l'ensemble de données
Contribuer
Feuille de route de développement
Licence
Vous trouverez ci-dessous des exemples de détection des dangers en temps réel par le système :
Travailleurs sans casque ni gilet de sécurité
Travailleurs à proximité de machines ou de véhicules
Travailleurs dans les zones réglementées
Avant d'exécuter l'application, vous devez configurer le système en spécifiant les détails des flux vidéo et d'autres paramètres dans un fichier de configuration JSON. Un exemple de fichier de configuration config/configuration.json
devrait ressembler à ceci :
[ {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/","site": "Kaohsiung", "stream_name": "Test", "model_key": "yolo11n", "notifications ": { "line_token_1": "langue_1", "line_token_2": "langue_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 ": vrai }, {"video_url": "URL de streaming", "site": "Factory_1", "stream_name": "camera_1", "model_key": "yolo11n", "notifications": { "line_token_3": "langue_3", "line_token_4" : "langue_4"},"detect_with_server": false,"expire_date": "Aucune date d'expiration", "detection_items": { "detect_no_safety_vest_or_helmet": vrai, "detect_near_machinery_or_vehicle": faux, "detect_in_restricted_area": vrai}, "work_start_hour": 0, "work_end_hour": 24, "store_in_redis": vrai } ]
Chaque objet du tableau représente une configuration de flux vidéo avec les champs suivants :
video_url
: L'URL du flux vidéo en direct. Cela peut inclure :
Flux de surveillance
Flux RTSP
Flux secondaires
Vidéos YouTube ou diffusions en direct
Flux Discorde
site
: L'emplacement du système de surveillance (par exemple, chantier de construction, usine).
stream_name
: Le nom attribué à la caméra ou au flux (par exemple, "Front Gate", "Camera 1").
model_key
: L'identifiant de clé du modèle d'apprentissage automatique à utiliser (par exemple, "yolo11n").
notifications
: Une liste de jetons API de messagerie LINE et les langues correspondantes pour l'envoi de notifications.
Les langues prises en charge pour les notifications incluent :
Pour plus d'informations sur la façon d'obtenir un jeton LINE, veuillez vous référer à line_notify_guide_en.
zh-TW
: Chinois traditionnel
zh-CN
: chinois simplifié
en
: anglais
fr
: français
vi
: vietnamien
id
: indonésien
th
: Thaï
line_token_1
, line_token_2
, etc. : ce sont les jetons de l'API LINE.
language_1
, language_2
, etc. : les langues des notifications (par exemple, "en" pour l'anglais, "zh-TW" pour le chinois traditionnel).
detect_with_server
: valeur booléenne indiquant s'il faut exécuter la détection d'objet à l'aide d'une API de serveur. Si True
, le système utilisera le serveur pour la détection d'objets. Si False
, la détection d’objet s’exécutera localement sur la machine.
expire_date
: Date d'expiration de la configuration du flux vidéo au format ISO 8601 (par exemple, "2024-12-31T23:59:59"). S'il n'y a pas de date d'expiration, une chaîne telle que « Aucune date d'expiration » peut être utilisée.
detection_items
: Spécifie les éléments de détection de sécurité pour surveiller des scénarios spécifiques. Chaque élément peut être défini sur True
pour l'activer ou False
pour le désactiver. Les éléments de détection disponibles sont :
detect_no_safety_vest_or_helmet
: Détecte si une personne ne porte pas de gilet de sécurité ou de casque. Ceci est essentiel pour contrôler le respect des exigences relatives aux équipements de sécurité sur les sites où ces équipements sont obligatoires pour la protection du personnel.
detect_near_machinery_or_vehicle
: Détecte si une personne est dangereusement proche de machines ou de véhicules. Cela permet d'éviter les accidents causés par la proximité d'équipements lourds ou de véhicules en mouvement, souvent rencontrés sur les chantiers de construction ou les zones industrielles.
detect_in_restricted_area
: Détecte si une personne est entrée dans une zone restreinte ou contrôlée. Les zones réglementées peuvent être dangereuses pour le personnel non formé ou peuvent contenir des équipements sensibles, ce paramètre facilite donc le contrôle de l'accès à ces zones.
work_start_hour
: Spécifie l'heure (au format 24 heures) à laquelle le système doit commencer à surveiller le flux vidéo. Cela permet de limiter la surveillance aux heures de travail actives, réduisant ainsi les traitements inutiles en dehors de la plage horaire définie (par exemple, 7
pour 7 heures du matin).
work_end_hour
: Spécifie l'heure (au format 24 heures) à laquelle le système doit arrêter de surveiller le flux vidéo. La surveillance cessera après cette heure pour optimiser l'utilisation des ressources (par exemple, 18
pour 18h00).
Ensemble, work_start_hour
et work_end_hour
définissent la période de surveillance au cours d'une journée. Pour une surveillance 24 heures sur 24, définissez work_start_hour
sur 0
et work_end_hour
sur 24
.
store_in_redis
: valeur booléenne qui détermine s'il faut stocker les trames traitées et les données de détection associées dans Redis. Si True
, le système enregistrera les données dans une base de données Redis pour une utilisation ultérieure, comme la surveillance en temps réel ou l'intégration avec d'autres services. Si False
, aucune donnée ne sera enregistrée dans Redis.
L'application nécessite des variables d'environnement spécifiques pour une configuration correcte. Ces variables doivent être définies dans un fichier .env
situé dans le répertoire racine du projet. Vous trouverez ci-dessous un exemple du fichier .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
: L'URL de connexion à la base de données MySQL. Utilisé par le module server_api
.
API_USERNAME
: Le nom d'utilisateur pour l'authentification auprès de l'API. Utilisé par main.py
.
API_PASSWORD
: Le mot de passe pour s'authentifier auprès de l'API. Utilisé par main.py
.
API_URL
: L'URL de l'API du serveur YOLO. Utilisé par main.py
.
REDIS_HOST
: Le nom d'hôte du serveur Redis. Utilisé par main.py
.
REDIS_PORT
: Le numéro de port du serveur Redis. Utilisé par main.py
.
REDIS_PASSWORD
: Le mot de passe de connexion au serveur Redis. Utilisé par main.py
.
LINE_CHANNEL_ACCESS_TOKEN
: Le jeton d'accès pour l'API de messagerie LINE. Utilisé par src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_CLOUD_NAME
: Le nom du cloud Cloudinary pour la gestion des médias. Utilisé par src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_KEY
: La clé API pour accéder aux services Cloudinary. Utilisé par src/notifiers/line_notifier_message_api.py
.
CLOUDINARY_API_SECRET
: Le secret API pour accéder aux services Cloudinary. Utilisé par src/notifiers/line_notifier_message_api.py
.
Remarque : remplacez les valeurs d'espace réservé par les informations d'identification réelles et les détails de configuration pour garantir une fonctionnalité appropriée.
Maintenant, vous pouvez lancer le système de détection des dangers dans l'environnement Docker ou Python :
Pour exécuter le système de détection des dangers, Docker et Docker Compose doivent être installés sur votre ordinateur. Suivez ces étapes pour que le système soit opérationnel :
Clonez le référentiel sur votre ordinateur local.
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
Accédez au répertoire cloné.
cd Construction-Hazard-Detection
Créez et exécutez les services à l'aide de Docker Compose :
construction docker-compose
Pour exécuter l'application, utilisez la commande suivante :
docker-composer
Vous pouvez consulter les résultats de détection sur http://localhost
Pour arrêter les services, utilisez la commande suivante :
docker-composer vers le bas
Pour exécuter le système de détection des dangers avec Python, procédez comme suit :
Utilisez la commande suivante pour cloner le dépôt depuis GitHub :
clone git https://github.com/yihong1120/Construction-Hazard-Detection.git
Remplacez le répertoire par le référentiel nouvellement cloné :
cd Détection des risques de construction
Exécutez la commande suivante pour installer les packages Python nécessaires :
pip install -r exigences.txt
Ouvrez le terminal et exécutez les commandes suivantes pour installer et démarrer le serveur MySQL :
sudo apt mise à jour sudo apt installer le serveur mysql sudo systemctl démarrer mysql.service
Téléchargez et installez la version appropriée de MySQL pour votre système d'exploitation à partir de la page Téléchargements MySQL.
Après avoir installé MySQL, utilisez la commande suivante pour initialiser la base de données construction_hazard_detection
et créer la table users
:
mysql -u racine -p < scripts/init.sql
Vous serez invité à saisir le mot de passe root MySQL. Assurez-vous que le fichier scripts/init.sql
contient les commandes SQL nécessaires pour configurer la base de données et les tables comme décrit précédemment.
Redis n'est nécessaire que lors de l'utilisation de la fonctionnalité Streaming Web . Suivez les étapes ci-dessous pour configurer Redis.
Installer Redis
Ouvrez le terminal et exécutez les commandes suivantes :
sudo apt mise à jour sudo apt installer le serveur redis
Configurer Redis (facultatif)
Si vous avez besoin de paramètres personnalisés, modifiez le fichier de configuration Redis :
sudo vim /etc/redis/redis.conf
Pour renforcer la sécurité, activez la protection par mot de passe en ajoutant ou en modifiant la ligne suivante :
requirepass YourStrongPassword
Remplacez YourStrongPassword
par un mot de passe sécurisé.
Démarrer et activer le service Redis
Démarrez le service Redis :
sudo systemctl démarrer redis.service
Activez Redis pour qu'il démarre automatiquement au démarrage :
sudo systemctl activer redis.service
Reportez-vous au guide d'installation officiel de Redis pour obtenir des instructions spécifiques à votre système d'exploitation.
Démarrez l'API de détection d'objets avec la commande suivante :
exemples uvicorn.YOLO_server.backend.app:sio_app --host 0.0.0.0 --port 8001
Utilisez la commande suivante pour exécuter l'application principale et spécifier le fichier de configuration :
python3 main.py --config config/configuration.json
Remplacez config/configuration.json
par le chemin réel de votre fichier de configuration.
Exécutez la commande suivante pour démarrer le service backend sur un système Linux :
uvicorn examples.streaming_web.backend.app:sio_app --host 127.0.0.1 --port 8002
Pour démarrer le service backend sur un système Windows, utilisez la commande suivante :
waitress-serve --host=127.0.0.1 --port=8002 "examples.streaming_web.backend.app:streaming-web-app"
Reportez-vous au fichier examples/YOLO_server_api/frontend/nginx.conf
pour les instructions de déploiement. Placez les fichiers Web statiques dans le répertoire suivant :
examples/YOLO_server_api/frontend/dist
Les journaux système sont disponibles dans le conteneur Docker et sont accessibles à des fins de débogage.
Les images de sortie avec détections (si activées) seront enregistrées dans le chemin de sortie spécifié.
Des notifications seront envoyées via l'API de messagerie LINE pendant les heures spécifiées si des dangers sont détectés.
Assurez-vous que le Dockerfile
est présent dans le répertoire racine du projet et qu'il est correctement configuré selon les exigences de votre application.
Pour plus d'informations sur l'utilisation et les commandes de Docker, reportez-vous à la documentation Docker.
L'ensemble de données principal pour la formation de ce modèle est l'ensemble de données d'images de sécurité du chantier de construction de Roboflow. Nous avons enrichi cet ensemble de données avec des annotations supplémentaires et l'avons rendu ouvertement accessible sur Roboflow. L'ensemble de données amélioré peut être trouvé ici : Détection des risques de construction sur Roboflow. Cet ensemble de données comprend les étiquettes suivantes :
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'
Modèle | taille (pixels) | val.carte 50 | val.carte 50-95 | paramètres (M) | FLOP (B) |
---|---|---|---|---|---|
YOLO11n | 640 | 58,0 | 34.2 | 2.6 | 6.5 |
YOLO11 | 640 | 70.1 | 44,8 | 9.4 | 21.6 |
YOLO11min | 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 |
Notre ensemble de données complet garantit que le modèle est bien équipé pour identifier un large éventail de dangers potentiels couramment rencontrés dans les environnements de construction.
Ajoutez la prise en charge des notifications WhatsApp.
Corriger l'interface utilisateur des exemples/YOLO server_api/frontend mobile version
Nous apprécions les contributions à ce projet. Veuillez suivre ces étapes :
Forkez le référentiel.
Apportez vos modifications.
Soumettez une pull request avec une description claire de vos améliorations.
Ce projet est sous licence AGPL-3.0.