Englisch | 繁體中文
Server-API | Streaming-Web | Datenerweiterung | Auswertung | Zug
„Construction-Hazard-Detection“ ist ein KI-gestütztes Tool zur Erhöhung der Sicherheit auf Baustellen. Durch die Nutzung des YOLO-Modells zur Objekterkennung identifiziert es potenzielle Gefahren wie:
Arbeiter ohne Helm
Arbeiter ohne Sicherheitswesten
Arbeiter in der Nähe von Maschinen oder Fahrzeugen
Für Arbeiter in Sperrgebieten werden Sperrgebiete automatisch durch Berechnen und Clustern der Koordinaten von Sicherheitskegeln generiert.
Nachbearbeitungsalgorithmen verbessern die Erkennungsgenauigkeit weiter. Das System ist für den Echtzeiteinsatz konzipiert und bietet sofortige Analysen und Warnungen bei erkannten Gefahren.
Darüber hinaus integriert das System KI-Erkennungsergebnisse in Echtzeit über eine Webschnittstelle. Es kann Benachrichtigungen und Echtzeitbilder vor Ort über Messaging-Apps wie LINE, Messenger, WeChat und Telegram senden, um sofortige Warnungen und Erinnerungen zu erhalten. Das System unterstützt außerdem mehrere Sprachen, sodass Benutzer Benachrichtigungen erhalten und mit der Benutzeroberfläche in ihrer bevorzugten Sprache interagieren können. Zu den unterstützten Sprachen gehören:
Traditionelles Chinesisch (Taiwan)
Vereinfachtes Chinesisch (Festlandchina)
Französisch
Englisch
Thailändisch
Vietnamesisch
Indonesisch
Diese Mehrsprachenunterstützung macht das System einem globalen Publikum zugänglich und verbessert die Benutzerfreundlichkeit in verschiedenen Regionen.
Beispiele zur Gefahrenerkennung
Verwendung
Weitere Informationen
Datensatzinformationen
Mitwirken
Entwicklungs-Roadmap
Lizenz
Nachfolgend finden Sie Beispiele für die Echtzeit-Gefahrenerkennung durch das System:
Arbeiter ohne Helme oder Sicherheitswesten
Arbeiter in der Nähe von Maschinen oder Fahrzeugen
Arbeiter in Sperrgebieten
Bevor Sie die Anwendung ausführen, müssen Sie das System konfigurieren, indem Sie die Details der Videostreams und andere Parameter in einer JSON-Konfigurationsdatei angeben. Eine Beispielkonfigurationsdatei config/configuration.json
sollte wie folgt aussehen:
[ {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/", "site": "Kaohsiung", "stream_name": "Test", "model_key": "yolo11n", "notifications ": { "line_token_1": "Sprache_1", "line_token_2": "Sprache_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“: wahr }, {"video_url": "Streaming-URL", "Site": "Factory_1", "Stream_name": "Kamera_1", "Modellschlüssel": "yolo11n", "Benachrichtigungen": { "line_token_3": "Sprache_3", "line_token_4" : „Sprache_4“}, „detect_with_server“: false, „expire_date“: „Kein Ablaufdatum“, „detection_items“: { „detect_no_safety_vest_or_helmet“: true, „detect_near_machinery_or_vehicle“: false, „detect_in_restricted_area“: true}, „work_start_hour“: 0, „work_end_hour“: 24, „store_in_redis“: true } ]
Jedes Objekt im Array stellt eine Videostream-Konfiguration mit den folgenden Feldern dar:
video_url
: Die URL des Live-Videostreams. Dies kann Folgendes umfassen:
Überwachungsströme
RTSP-Streams
Sekundärströme
YouTube-Videos oder Livestreams
Discord-Streams
site
: Der Standort des Überwachungssystems (z. B. Baustelle, Fabrik).
stream_name
: Der der Kamera oder dem Stream zugewiesene Name (z. B. „Front Gate“, „Kamera 1“).
model_key
: Die Schlüsselkennung für das zu verwendende Machine-Learning-Modell (z. B. „yolo11n“).
notifications
: Eine Liste von LINE-Messaging-API-Tokens und entsprechenden Sprachen zum Senden von Benachrichtigungen.
Zu den unterstützten Sprachen für Benachrichtigungen gehören:
Informationen zum Erhalt eines LINE-Tokens finden Sie unter line_notify_guide_en.
zh-TW
: Traditionelles Chinesisch
zh-CN
: Vereinfachtes Chinesisch
en
: Englisch
fr
: Französisch
vi
: Vietnamesisch
id
: Indonesisch
th
: Thailändisch
line_token_1
, line_token_2
usw.: Dies sind die LINE-API-Tokens.
language_1
, language_2
usw.: Die Sprachen für die Benachrichtigungen (z. B. „en“ für Englisch, „zh-TW“ für traditionelles Chinesisch).
detect_with_server
: Boolescher Wert, der angibt, ob die Objekterkennung mithilfe einer Server-API ausgeführt werden soll. Bei True
verwendet das System den Server zur Objekterkennung. Bei False
wird die Objekterkennung lokal auf dem Computer ausgeführt.
expire_date
: Ablaufdatum für die Videostream-Konfiguration im ISO 8601-Format (z. B. „2024-12-31T23:59:59“). Wenn kein Ablaufdatum vorhanden ist, kann eine Zeichenfolge wie „Kein Ablaufdatum“ verwendet werden.
detection_items
: Gibt die Sicherheitserkennungselemente für die Überwachung bestimmter Szenarien an. Jedes Element kann zum Aktivieren auf True
oder zum Deaktivieren auf False
gesetzt werden. Die verfügbaren Erkennungselemente sind:
detect_no_safety_vest_or_helmet
: Erkennt, ob eine Person keine Sicherheitsweste oder keinen Helm trägt. Dies ist wichtig für die Überwachung der Einhaltung der Sicherheitsausrüstungsanforderungen an Standorten, an denen diese Ausrüstung zum Schutz des Personals obligatorisch ist.
detect_near_machinery_or_vehicle
: Erkennt, ob sich eine Person gefährlich nahe an Maschinen oder Fahrzeugen befindet. Dies trägt dazu bei, Unfälle zu vermeiden, die durch die Nähe zu schwerem Gerät oder fahrenden Fahrzeugen verursacht werden, wie sie häufig auf Baustellen oder in Industriegebieten vorkommen.
detect_in_restricted_area
: Erkennt, ob eine Person einen Sperr- oder Kontrollbereich betreten hat. Sperrbereiche können für ungeschultes Personal gefährlich sein oder empfindliche Geräte enthalten. Diese Einstellung hilft daher bei der Kontrolle des Zugangs zu solchen Zonen.
work_start_hour
: Gibt die Stunde (im 24-Stunden-Format) an, zu der das System mit der Überwachung des Videostreams beginnen soll. Dadurch kann die Überwachung auf aktive Arbeitszeiten beschränkt werden, wodurch unnötige Verarbeitung außerhalb des definierten Zeitrahmens (z. B. 7
für 7:00 Uhr) reduziert wird.
work_end_hour
: Gibt die Stunde (im 24-Stunden-Format) an, zu der das System die Überwachung des Videostreams beenden soll. Nach dieser Zeit wird die Überwachung beendet, um die Ressourcennutzung zu optimieren (z. B. 18
für 18:00 Uhr).
Zusammen definieren work_start_hour
und work_end_hour
den Überwachungszeitraum während eines Tages. Für eine 24-Stunden-Überwachung setzen Sie work_start_hour
auf 0
und work_end_hour
auf 24
.
store_in_redis
: Ein boolescher Wert, der bestimmt, ob verarbeitete Frames und zugehörige Erkennungsdaten in Redis gespeichert werden sollen. Bei True
speichert das System die Daten zur weiteren Verwendung, beispielsweise zur Echtzeitüberwachung oder zur Integration mit anderen Diensten, in einer Redis-Datenbank. Bei False
werden keine Daten in Redis gespeichert.
Für die ordnungsgemäße Konfiguration benötigt die Anwendung bestimmte Umgebungsvariablen. Diese Variablen sollten in einer .env
Datei definiert werden, die sich im Stammverzeichnis des Projekts befindet. Unten sehen Sie ein Beispiel der .env
Datei:
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
: Die Verbindungs-URL für die MySQL-Datenbank. Wird vom server_api
Modul verwendet.
API_USERNAME
: Der Benutzername für die Authentifizierung bei der API. Wird von main.py
verwendet.
API_PASSWORD
: Das Passwort für die Authentifizierung bei der API. Wird von main.py
verwendet.
API_URL
: Die URL der YOLO-Server-API. Wird von main.py
verwendet.
REDIS_HOST
: Der Hostname für den Redis-Server. Wird von main.py
verwendet.
REDIS_PORT
: Die Portnummer für den Redis-Server. Wird von main.py
verwendet.
REDIS_PASSWORD
: Das Passwort für die Verbindung zum Redis-Server. Wird von main.py
verwendet.
LINE_CHANNEL_ACCESS_TOKEN
: Das Zugriffstoken für die LINE Messaging API. Wird von src/notifiers/line_notifier_message_api.py
verwendet.
CLOUDINARY_CLOUD_NAME
: Der Cloudinary-Cloud-Name für die Medienverwaltung. Wird von src/notifiers/line_notifier_message_api.py
verwendet.
CLOUDINARY_API_KEY
: Der API-Schlüssel für den Zugriff auf Cloudinary-Dienste. Wird von src/notifiers/line_notifier_message_api.py
verwendet.
CLOUDINARY_API_SECRET
: Das API-Geheimnis für den Zugriff auf Cloudinary-Dienste. Wird von src/notifiers/line_notifier_message_api.py
verwendet.
Hinweis : Ersetzen Sie Platzhalterwerte durch tatsächliche Anmeldeinformationen und Konfigurationsdetails, um eine ordnungsgemäße Funktionalität sicherzustellen.
Jetzt können Sie das Gefahrenerkennungssystem in der Docker- oder Python-Umgebung starten:
Um das Gefahrenerkennungssystem auszuführen, müssen Docker und Docker Compose auf Ihrem Computer installiert sein. Befolgen Sie diese Schritte, um das System zum Laufen zu bringen:
Klonen Sie das Repository auf Ihren lokalen Computer.
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
Navigieren Sie zum geklonten Verzeichnis.
cd Construction-Hazard-Detection
Erstellen Sie die Dienste und führen Sie sie mit Docker Compose aus:
Docker-Compose-Build
Um die Anwendung auszuführen, verwenden Sie den folgenden Befehl:
Docker-Komponieren
Sie können die Erkennungsergebnisse unter http://localhost anzeigen
Um die Dienste zu stoppen, verwenden Sie den folgenden Befehl:
Docker-Compose nach unten
Um das Gefahrenmeldesystem mit Python auszuführen, gehen Sie folgendermaßen vor:
Verwenden Sie den folgenden Befehl, um das Repository von GitHub zu klonen:
Git-Klon https://github.com/yihong1120/Construction-Hazard-Detection.git
Ändern Sie das Verzeichnis in das neu geklonte Repository:
cd Bau-Gefahren-Erkennung
Führen Sie den folgenden Befehl aus, um die erforderlichen Python-Pakete zu installieren:
pip install -r Anforderungen.txt
Öffnen Sie das Terminal und führen Sie die folgenden Befehle aus, um den MySQL-Server zu installieren und zu starten:
Sudo apt-Update sudo apt install mysql-server sudo systemctl startet mysql.service
Laden Sie die entsprechende Version von MySQL für Ihr Betriebssystem von der MySQL-Downloads-Seite herunter und installieren Sie sie.
Verwenden Sie nach der Installation von MySQL den folgenden Befehl, um die Datenbank construction_hazard_detection
zu initialisieren und die users
zu erstellen:
mysql -u root -p <scripts/init.sql
Sie werden aufgefordert, das MySQL-Root-Passwort einzugeben. Stellen Sie sicher, dass die Datei scripts/init.sql
die erforderlichen SQL-Befehle zum Einrichten der Datenbank und Tabellen wie zuvor beschrieben enthält.
Redis wird nur benötigt, wenn die Streaming-Web -Funktionalität verwendet wird. Führen Sie die folgenden Schritte aus, um Redis einzurichten.
Installieren Sie Redis
Öffnen Sie das Terminal und führen Sie die folgenden Befehle aus:
Sudo apt-Update sudo apt install redis-server
Redis konfigurieren (optional)
Wenn Sie benutzerdefinierte Einstellungen benötigen, bearbeiten Sie die Redis-Konfigurationsdatei:
sudo vim /etc/redis/redis.conf
Um die Sicherheit zu erhöhen, aktivieren Sie den Passwortschutz, indem Sie die folgende Zeile hinzufügen oder ändern:
requirepass YourStrongPassword
Ersetzen Sie YourStrongPassword
durch ein sicheres Passwort.
Starten und aktivieren Sie den Redis-Dienst
Starten Sie den Redis-Dienst:
sudo systemctl startet redis.service
Aktivieren Sie Redis, um beim Booten automatisch zu starten:
sudo systemctl aktiviert redis.service
Anweisungen speziell für Ihr Betriebssystem finden Sie im offiziellen Redis-Installationshandbuch.
Starten Sie die Objekterkennungs-API mit dem folgenden Befehl:
uvicorn examples.YOLO_server.backend.app:sio_app --host 0.0.0.0 --port 8001
Verwenden Sie den folgenden Befehl, um die Hauptanwendung auszuführen und die Konfigurationsdatei anzugeben:
python3 main.py --config config/configuration.json
Ersetzen Sie config/configuration.json
durch den tatsächlichen Pfad zu Ihrer Konfigurationsdatei.
Führen Sie den folgenden Befehl aus, um den Backend-Dienst auf einem Linux-System zu starten:
uvicorn examples.streaming_web.backend.app:sio_app --host 127.0.0.1 --port 8002
Um den Backend-Dienst auf einem Windows-System zu starten, verwenden Sie den folgenden Befehl:
waitress-serve --host=127.0.0.1 --port=8002 "examples.streaming_web.backend.app:streaming-web-app"
Anweisungen zur Bereitstellung finden Sie in der Datei examples/YOLO_server_api/frontend/nginx.conf
. Platzieren Sie die statischen Webdateien im folgenden Verzeichnis:
examples/YOLO_server_api/frontend/dist
Die Systemprotokolle sind im Docker-Container verfügbar und können zu Debugging-Zwecken abgerufen werden.
Die Ausgabebilder mit Erkennungen (sofern aktiviert) werden im angegebenen Ausgabepfad gespeichert.
Wenn Gefahren erkannt werden, werden zu den angegebenen Zeiten Benachrichtigungen über die LINE-Messaging-API gesendet.
Stellen Sie sicher, dass die Dockerfile
im Stammverzeichnis des Projekts vorhanden und gemäß den Anforderungen Ihrer Anwendung ordnungsgemäß konfiguriert ist.
Weitere Informationen zur Verwendung und den Befehlen von Docker finden Sie in der Docker-Dokumentation.
Der primäre Datensatz für das Training dieses Modells ist der Construction Site Safety Image Dataset von Roboflow. Wir haben diesen Datensatz mit zusätzlichen Annotationen angereichert und ihn auf Roboflow offen zugänglich gemacht. Den erweiterten Datensatz finden Sie hier: Construction Hazard Detection on Roboflow. Dieser Datensatz enthält die folgenden Beschriftungen:
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'
Modell | Größe (Pixel) | Kartenwert 50 | Kartenwert 50-95 | Parameter (M) | FLOPs (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 |
Unser umfassender Datensatz stellt sicher, dass das Modell gut gerüstet ist, um ein breites Spektrum potenzieller Gefahren zu identifizieren, die häufig in Bauumgebungen auftreten.
Unterstützung für WhatsApp-Benachrichtigungen hinzufügen.
Korrigieren Sie die UI-Schnittstelle von examples/YOLO server_api/frontend mobile version
Wir freuen uns über Beiträge zu diesem Projekt. Bitte folgen Sie diesen Schritten:
Forken Sie das Repository.
Nehmen Sie Ihre Änderungen vor.
Senden Sie eine Pull-Anfrage mit einer klaren Beschreibung Ihrer Verbesserungen.
Dieses Projekt ist unter der AGPL-3.0-Lizenz lizenziert.