英语 | 繁体中文
服务器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”:“语言_1”,“line_token_2”: “language_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} ,“工作开始时间”: 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": "无过期日期”,“检测项目”:{“检测无安全背心或头盔”:真,“检测附近机器或车辆”:假,“检测在限制区域”:真},“工作开始时间”:0,“工作结束时间”:24,“store_in_redis”:真 } ]
数组中的每个对象代表具有以下字段的视频流配置:
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 许可证获得许可。