英語 | 繁體中文
伺服器API | 串流媒體網路 | 數據增強| 評價| 火車
「施工危險檢測」是一種人工智慧驅動的工具,旨在提高建築工地的安全性。透過利用 YOLO 模型進行物件偵測,它可以識別潛在的危險,例如:
工人不戴頭盔
沒有穿安全背心的工人
機械或車輛附近的工人
限制區域內的工作人員,限制區域將透過安全錐座標的計算和聚類自動產生。
後處理演算法進一步提高檢測精度。該系統專為即時部署而構建,針對已識別的危險提供即時分析和警報。
此外,該系統還透過網路介面即時整合人工智慧識別結果。它可以透過LINE、Messenger、WeChat、Telegram等訊息應用程式發送通知和即時現場圖像,以進行及時警報和提醒。該系統還支援多種語言,使用戶能夠以自己喜歡的語言接收通知並與介面互動。支援的語言包括:
繁體中文(台灣)
簡體中文(中國大陸)
法語
英語
泰國
越南語
印尼
這種多語言支援使該系統可供全球受眾使用,從而提高了不同地區的可用性。
危險檢測範例
用法
附加資訊
資料集資訊
貢獻
發展路線圖
執照
以下是系統即時危險偵測的範例:
沒有安全帽或安全背心的工人
機械或車輛附近的工人
限制區域內的工人
在執行應用程式之前,您需要透過在 JSON 設定檔中指定視訊串流的詳細資訊和其他參數來設定係統。範例設定檔config/configuration.json
應如下所示:
[ {"video_url": "https://cctv1.kctmc.nat.gov.tw/6e559e58/","site": "高雄","stream_name": "測試","model_key": "yolo11n","通知": { "line_token_1": "language_1", "line_token_2": "language_2"},"detect_with_server": true,"expire_date": "2024-12-31T23:59:59","date": "2024-12-31T23:59:59","detection_item": :true,「detect_near_machinery_or_vehicle」:true,「detect_in_restricted_area」:true},「work_start_hour」:7,「work_end_hour」:18,「store_in_redis」:true }, {"video_url": "串流媒體URL","site": "Factory_1","stream_name": "camera_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},"work_start_hour" : 0、「work_end_hour」:24、「store_in_redis」:true } ]
數組中的每個物件代表具有以下欄位的視訊串流配置:
video_url
:直播視訊串流的 URL。這可以包括:
監控串流
RTSP 串流
次流
YouTube 影片或直播
不和諧流
site
:監控系統的位置(例如建築工地、工廠)。
stream_name
:指派給攝影機或串流的名稱(例如「前門」、「攝影機 1」)。
model_key
:要使用的機器學習模型的密鑰標識符(例如“yolo11n”)。
notifications
:LINE 訊息傳遞 API 令牌和用於發送通知的相應語言的清單。
支援的通知語言包括:
有關如何獲取 LINE 令牌的信息,請參閱 line_notify_guide_cn。
zh-TW
: 繁體中文
zh-CN
:簡體中文
en
: 英語
fr
: 法語
vi
: 越南語
id
:印尼語
th
: 泰語
line_token_1
、 line_token_2
等:這些是 LINE API 令牌。
language_1
、 language_2
等:通知的語言(例如,「en」表示英語,「zh-TW」表示繁體中文)。
detect_with_server
:布林值,指示是否使用伺服器 API 執行物件偵測。如果為True
,系統將使用伺服器進行物件偵測。如果為False
,物件偵測將在電腦本地運行。
expire_date
:ISO 8601 格式的視訊串流配置的到期日期(例如「2024-12-31T23:59:59」)。如果沒有到期日期,則可以使用「No Expire Date」之類的字串。
detection_items
:指定監控特定場景的安全偵測項目。每個項目都可以設定為True
來啟用或設定為False
來停用。可用的檢測項目有:
detect_no_safety_vest_or_helmet
:偵測人員是否未配戴安全背心或安全帽。這對於在必須配備安全裝備以保護人員的場所監控其安全裝備要求的遵守情況至關重要。
detect_near_machinery_or_vehicle
:偵測人員是否危險地接近機器或車輛。這有助於防止在建築工地或工業區經常遇到的因靠近重型設備或移動車輛而引起的事故。
detect_in_restricted_area
:偵測人員是否進入限製或控制區域。限制區域對於未經訓練的人員可能是危險的,或者可能包含敏感設備,因此此設定有助於控制對此類區域的存取。
work_start_hour
:指定係統應開始監視視訊串流的小時(採用 24 小時格式)。這允許將監控限制在活躍的工作時間,從而減少定義時間範圍之外的不必要的處理(例如, 7
表示上午 7:00)。
work_end_hour
:指定係統應停止監視視訊串流的小時(採用 24 小時格式)。監控將在此時間後停止以最佳化資源使用(例如, 18
為下午 6:00)。
work_start_hour
和work_end_hour
一起定義一天中的監控時段。對於 24 小時監控,請將work_start_hour
設為0
,將work_end_hour
設為24
。
store_in_redis
:一個布林值,決定是否將處理後的訊框和關聯的偵測資料儲存在Redis。如果為True
,系統會將資料儲存到 Redis 資料庫以供進一步使用,例如即時監控或與其他服務整合。如果為False
,則 Redis 中不會儲存任何資料。
應用程式需要特定的環境變數才能正確配置。這些變數應在位於專案根目錄下的.env
檔案中定義。以下是.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
:MySQL 資料庫的連接 URL。由server_api
模組使用。
API_USERNAME
:用於透過 API 進行身份驗證的使用者名稱。 main.py
使用。
API_PASSWORD
:用於 API 驗證的密碼。 main.py
使用。
API_URL
:YOLO 伺服器 API 的 URL。 main.py
使用。
REDIS_HOST
:Redis 伺服器的主機名稱。 main.py
使用。
REDIS_PORT
:Redis 伺服器的連接埠號碼。 main.py
使用。
REDIS_PASSWORD
:連接 Redis 伺服器的密碼。 main.py
使用。
LINE_CHANNEL_ACCESS_TOKEN
:LINE Messaging API 的存取令牌。由src/notifiers/line_notifier_message_api.py
使用。
CLOUDINARY_CLOUD_NAME
:用於媒體管理的 Cloudinary 雲端名稱。由src/notifiers/line_notifier_message_api.py
使用。
CLOUDINARY_API_KEY
:用於存取 Cloudinary 服務的 API 金鑰。由src/notifiers/line_notifier_message_api.py
使用。
CLOUDINARY_API_SECRET
:用於存取 Cloudinary 服務的 API 金鑰。由src/notifiers/line_notifier_message_api.py
使用。
注意:將佔位符值替換為實際憑證和配置詳細信息,以確保功能正常。
現在,您可以在 Docker 或 Python 環境中啟動危險偵測系統:
要執行危險偵測系統,您需要在電腦上安裝 Docker 和 Docker Compose。請依照以下步驟啟動並執行系統:
將儲存庫克隆到本機。
git clone https://github.com/yihong1120/Construction-Hazard-Detection.git
導航到克隆的目錄。
cd Construction-Hazard-Detection
使用 Docker Compose 建置並運行服務:
docker-compose 構建
要運行該應用程序,請使用以下命令:
docker-compose up
可以在http://localhost查看檢測結果
若要停止服務,請使用以下命令:
docker-compose 下來
若要使用 Python 運行危險偵測系統,請依照下列步驟操作:
使用以下命令從 GitHub 克隆儲存庫:
git克隆 https://github.com/yihong1120/Construction-Hazard-Detection.git
將目錄變更為新克隆的儲存庫:
cd 施工-危險-檢測
執行以下命令安裝必要的 Python 套件:
pip install -r 要求.txt
開啟終端機並執行以下命令安裝並啟動MySQL伺服器:
須藤apt更新 sudo apt install mysql 伺服器 sudo systemctl 啟動 mysql.service
從 MySQL 下載頁面下載並安裝適合您的作業系統的 MySQL 版本。
安裝MySQL後,使用以下命令初始化construction_hazard_detection
資料庫並建立users
表:
mysql -u root -p < 腳本/init.sql
系統將提示您輸入 MySQL root 密碼。確保scripts/init.sql
檔案包含必要的 SQL 指令來設定資料庫和表格(如前所述)。
僅當使用Streaming Web功能時才需要 Redis。請依照以下步驟設定 Redis。
安裝Redis
打開終端機並執行以下命令:
須藤apt更新 sudo apt install redis 伺服器
配置 Redis(可選)
如果需要自訂設置,請編輯 Redis 設定檔:
sudo vim /etc/redis/redis.conf
為了增強安全性,請透過新增或修改以下行來啟用密碼保護:
requirepass YourStrongPassword
將YourStrongPassword
替換為安全密碼。
啟動並啟用Redis服務
啟動Redis服務:
sudo systemctl啟動redis.service
啟用 Redis 在啟動時自動啟動:
sudo systemctl 啟用 redis.service
有關特定於您的作業系統的說明,請參閱官方 Redis 安裝指南。
使用以下命令啟動物件檢測 API:
uvicorn Examples.YOLO_server.backend.app:sio_app --host 0.0.0.0 --port 8001
使用以下命令運行主應用程式並指定設定檔:
python3 main.py --config config/configuration.json
將config/configuration.json
替換為設定檔的實際路徑。
在Linux系統上執行以下命令啟動後端服務:
uvicorn Examples.streaming_web.backend.app:sio_app --主機 127.0.0.1 --連接埠 8002
若要在Windows系統上啟動後端服務,請使用下列命令:
女服務生服務 --host=127.0.0.1 --port=8002 "examples.streaming_web.backend.app:streaming-web-app"
有關部署說明,請參閱examples/YOLO_server_api/frontend/nginx.conf
檔案。將靜態 Web 檔案放置在以下目錄中:
examples/YOLO_server_api/frontend/dist
系統日誌在 Docker 容器中可用,並且可以出於調試目的進行存取。
帶有偵測的輸出影像(如果啟用)將儲存到指定的輸出路徑。
如果偵測到危險,將在指定時間內透過 LINE 訊息 API 發送通知。
確保Dockerfile
存在於專案的根目錄中,並且根據應用程式的要求進行了正確配置。
有關 Docker 用法和命令的更多信息,請參閱 Docker 文件。
訓練此模型的主要資料集是 Roboflow 的建築工地安全影像資料集。我們透過附加註釋豐富了該資料集,並使其可以在 Roboflow 上公開存取。增強的資料集可以在這裡找到:Roboflow 上的施工危險檢測。此資料集包含以下標籤:
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'
模型 | 尺寸 (像素) | 平均AP值 50 | 平均AP值 50-95 | 參數 (男) | 失敗次數 (二) |
---|---|---|---|---|---|
YOLO11n | 640 | 58.0 | 34.2 | 2.6 | 6.5 |
YOLO11s | 640 | 70.1 | 44.8 | 9.4 | 21.6 |
YOLO11米 | 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 |
我們全面的資料集確保該模型能夠充分識別建築環境中常見的各種潛在危險。
新增對 WhatsApp 通知的支援。
修正examples/YOLO server_api/frontend手機版UI介面
我們歡迎對此項目做出貢獻。請依照以下步驟操作:
分叉儲存庫。
做出你的改變。
提交拉取請求,並清楚描述您的改進。
該專案根據 AGPL-3.0 許可證獲得許可。