"建築工地危險檢測系統" 是一款以人工智慧驅動的工具,旨在提升工地的安全性。該系統利用 YOLO 模型進行物件偵測,能夠識別以下潛在危險:
- 未佩戴安全帽的工人
- 未穿著安全背心的工人
- 靠近機械或車輛的工人
- 進入限制區域的工人,透過安全錐座標的計算和分群,限制區域將自動產生。
後處理算法進一步提高了偵測的準確性。該系統專為即時部署而設計,能夠對檢測到的危險進行即時分析並發出警報。
此外,該系統可通過網頁介面即時整合 AI 辨識結果,並通過 LINE、Messenger、微信和 Telegram 等即時通訊應用程式發送通知及現場實時影像,及時提醒和通知相關人員。系統還支援多種語言,允許用戶接收通知並以其首選語言與介面互動。支援的語言包括:
- 🇹🇼 繁體中文(台灣)
- 🇨🇳 簡體中文(中國大陸)
- 🇫🇷 法文
- 🇬🇧 英文
- 🇹🇭 泰文
- 🇻🇳 越南文
- 🇮🇩 印尼文
多語言支援使該系統在全球範圍內的使用者都能方便使用,提升了不同地區的可用性。
以下是系統實時危險偵測的範例:
在運行應用程式之前,您需要配置系統,指定視頻流的詳細信息和其他參數,這些信息需要在 YAML 配置文件中進行設置。示例配置文件 configuration.yaml
應該看起來像這樣:
# 這是一個視訊配置的列表
- video_url: "rtsp://example1.com/stream" # 視訊串流的 URL
site: "建築工地" # 監控系統的位置
stream_name: "前門" # 監視器的名稱或編號
model_key: "yolo11n" # 視訊所使用的模型鍵
notifications: # LINE 通知的令牌列表及對應的語言
line_token_1: language_1
line_token_2: language_2
detect_with_server: True # 使用伺服器進行物件偵測
expire_date: "2024-12-31T23:59:59" # 到期日期,使用 ISO 8601 格式
detector_items: # 檢測項目
detector_no_safety_vest_or_helmet: True # 偵測是否未配戴安全背心或頭盔
detector_near_machinery_or_vehicle: True # 偵測人是否靠近機械或車輛
detector_in_restricted_area: True # 偵測一個人是否在限制區域內
- video_url: "串流 URL"
site: "工廠1"
stream_name: "相機1"
model_key: "yolo11n"
notifications:
line_token_3: language_3
line_token_4: language_4
detect_with_server: False
expire_date: "無到期日期"
detection_items:
detect_no_safety_vest_or_helmet: True
detect_near_machinery_or_vehicle: False
detect_in_restricted_area: True
數組中的每個對象代表一個視頻流配置,包含以下字段:
-
video_url
:視訊串流的 URL,可能包括:- 監控流
- RTSP
- 副流
- YouTube 視頻或直播
- Discord
-
site
:監控系統的位置(例如:建築工地、工廠)。 -
stream_name
:指派給監視器或串流的名稱(例如:「前門」、「相機1」)。 -
model_key
:機器學習模型的識別鍵(例如:「yolo11n」)。 -
notifications
:LINE 通知的 API 令牌和對應語言的列表。line_token_1
,line_token_2
等:這些是 LINE API 令牌。language_1
,language_2
等:通知的語言(例如:「en」表示英文,「zh-TW」表示繁體中文)。
有關如何獲取 LINE 令牌的資訊,請參閱 Line Notify教學。
-
detect_with_server
:布林值,指示是否使用伺服器 API 進行物件偵測。如果為True
,系統將使用伺服器進行物件偵測。如果為False
,物件偵測將在本地機器上執行。 -
expire_date
:視訊串流配置的到期日期,使用 ISO 8601 格式(例如:「2024-12-31T23:59:59」)。如果沒有到期日期,可以使用類似「無到期日期」的字串。 -
detection_items
:指定監控特定場景的安全偵測項目。每個項目都可以設定為“True”以啟用或設定為“False”以停用。可用的檢測項目有:detect_no_safety_vest_or_helmet
:偵測人員是否未配戴安全背心或頭盔。這對於在必須配備安全裝備以保護人員的場所監控其安全裝備要求的遵守情況至關重要。detect_near_machinery_or_vehicle
:偵測人員是否危險地靠近機器或車輛。這有助於防止在建築工地或工業區經常遇到的因靠近重型設備或移動車輛而引起的事故。detect_in_restricted_area
:偵測人員是否進入限製或控制區域。限制區域對於未經訓練的人員可能是危險的,或者可能包含敏感設備,因此此設定有助於控制對此類區域的存取。
Docker
要運行危險檢測系統,您需要在機器上安裝 Docker 和 Docker Compose。按照以下步驟來啟動系統:
-
將存儲庫克隆到本地機器。
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
-
進入克隆的目錄。
cd Construction-Hazard-Detection
-
使用 Docker Compose 構建並運行服務:
docker-compose up --build
-
使用特定的配置文件運行主應用程序,使用以下命令:
docker-compose run main-application python main.py --config /path/in/container/configuration.yaml
將
/path/in/container/configuration.yaml
替換為容器內配置文件的實際路徑。 -
停止服務,使用以下命令:
docker-compose down
Python
要在終端運行危險檢測系統,您需要在機器上安裝 Python。按照以下步驟來啟動系統:
-
將存儲庫克隆到本地機器。
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
-
進入克隆的目錄。
cd Construction-Hazard-Detection
-
安裝所需的軟體包:
pip install -r requirements.txt
-
安裝並啟動 MySQL 服務:
Linux 使用者:
sudo apt install mysql-server sudo systemctl start mysql.service
對於其他人,您可以在此連結下載並安裝適用於您的作業系統的MySQL。
-
設置用戶帳戶和密碼。使用以下命令啟動用戶管理 API:
gunicorn -w 1 -b 0.0.0.0:8000 "examples.user_management.app:user-managements-app"
建議使用 Postman 應用程式與 API 進行互動。
-
要運行物體檢測 API,使用以下命令:
gunicorn -w 1 -b 0.0.0.0:8001 "examples.YOLO_server_api.app:YOLO-server-api-app"
-
使用特定的配置文件運行主應用程序,使用以下命令:
python3 main.py --config /path/to/your/configuration.yaml
將
/path/to/your/configuration.yaml
替換為您的配置文件的實際路徑。 -
要啟動串流 Web 服務,執行以下命令:
對於 Linux 使用者:
gunicorn -w 1 -k eventlet -b 127.0.0.1:8002 "examples.streaming_web.app:streaming-web-app"
對於 Windows 使用者:
waitress-serve --host=127.0.0.1 --port=8002 "examples.streaming_web.app:streaming-web-app"
- 系統日誌可在 Docker 容器內部訪問,可用於調試目的。
- 如果啟用,檢測到的輸出圖像將保存到指定的輸出路徑。
- 如果檢測到危險,將在指定小時通過 LINE 消息 API 發送通知。
- 確保
Dockerfile
存在於項目的根目錄中,並根據您的應用程序的要求進行了正確配置。 -p 8080:8080
標誌將容器的 8080 端口映射到主機機器的 8080 端口,允許您通過主機的 IP 地址和端口號訪問應用程序。
有關 Docker 使用和命令的更多信息,請參閱 Docker 文檔。
訓練此模型的主要數據集是 Roboflow 的建築工地安全圖像數據集。我們已經用額外的註釋豐富了這個數據集,並在 Roboflow 上公開訪問。增強的數據集可以在這裡找到:Roboflow 上的建築危險檢測。此數據集包括以下標籤:
0: '安全帽'
1: '口罩'
2: '無安全帽'
3: '無口罩'
4: '無安全背心'
5: '人'
6: '安全錐'
7: '安全背心'
8: '機械'
9: '車輛'
Model | size (pixels) |
mAPval 50 |
mAPval 50-95 |
params (M) |
FLOPs (B) |
---|---|---|---|---|---|
YOLO11n | 640 | 54.1 | 31.0 | 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 | 76.8 | 52.5 | 56.9 | 194.9 |
我們的全面數據集確保模型能夠識別建築環境中常見的各種潛在危險。
我們歡迎對此項目的貢獻。請按照以下步驟操作:
- 分叉存儲庫。
- 進行更改。
- 提交一個清晰描述您改進的拉取請求。
- 數據收集和預處理。
- 使用建築工地數據訓練 YOLO 模型。
- 開發後處理技術以提高準確性。
- 實施實時分析和警報系統。
- 在模擬環境中進行測試和驗證。
- 在實際建築工地進行現場測試。
- 根據用戶反饋進行持續維護和更新。
- 新增對 WhatsApp 通知的支援,
- 前後端分離
此項目根據 AGPL-3.0 授權。