LyKayden/Development-of-an-Intelligent-Safety-Boundary-Monitoring-System-for-Hot-Work-Operations-Using-YOLOv8
GitHub: LyKayden/Development-of-an-Intelligent-Safety-Boundary-Monitoring-System-for-Hot-Work-Operations-Using-YOLOv8
Stars: 0 | Forks: 0
# 🔥 动火作业智能监控系统
**本科毕业设计项目 - 动火作业现场智能安全监控**
基于 YOLOv8 目标检测 + 单目视觉测距 + GB 30871-2022 气瓶安全边界规范
## ⚠️ 许可证声明 / License
- **源代码**:采用 [MIT许可证](https://opensource.org/licenses/MIT) 开源,允许自由使用、修改和分发。
- **模型权重**:`models/`目录下的`best.pt`训练模型权重源自 [Ultralytics YOLOv8](https://github.com/ultralytics/ultralytics),遵循 [AGPL-3.0许可证](https://www.gnu.org/licenses/agpl-3.0.html)。
- **训练数据集**:本项目所用训练数据集为作者自主手工标注、分类划分的自定义数据集,版权归作者所有,未随项目代码一同发布。
## 系统要求
### 必需软件(用户需自行安装)
| 软件 | 版本 | 下载地址 | 用途 |
| :---: | :---: | :---: | :---: |
| **Miniconda** | Python 3.11+ | [下载链接](https://docs.conda.io/en/latest/miniconda.html) | Python 环境管理 |
| **Windows** | 10/11 | - | 操作系统 |
### 推荐硬件
| 配置 | 要求 | 说明 |
| :---: | :---: | :---: |
|**CPU**|Intel i5 或同级|4 核及以上|
|**内存**|8GB 以上|推荐 16GB|
|**显卡**|NVIDIA GTX 1060 以上|支持 CUDA 加速(MX450 及以上)|
|**摄像头**|720P(16:9,1280×720,30fps)|USB 或网络摄像头|
### 性能参考
|设备|帧率|处理时间|
|:---:|:---:|:---:|
|**NVIDIA MX450**|25-30 FPS|33-40ms/帧|
|**CPU (i5-11320H)**|10-15 FPS|67-100ms/帧|
## 🚀 快速开始
### 步骤 1:安装基础环境(首次使用)
**安装 Miniconda**
- 下载:https://docs.conda.io/en/latest/miniconda.html
- 安装时勾选 "Add to PATH"
- 安装完成后重启电脑
### 步骤 1.5:配置 GPU 加速环境(PyTorch)
**1. 确认 GPU 与 PyTorch 版本匹配**
- 访问 PyTorch 历史版本库:https://pytorch.org/get-started/previous-versions/
- 根据你的显卡驱动支持的 CUDA 版本(如 CUDA 11.8/12.1/12.4),复制对应的 `pip install torch torchvision torchaudio` 命令。
**2. 配置国内 pip 镜像源(加速下载)**
- 国内网络直接访问官方源极不稳定,强烈建议配置清华大学镜像。
- 参考指南:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
- 在终端执行以下命令(推荐永久配置):
python -m pip install --upgrade pip
pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
**3. 安装 PyTorch 与高速下载技巧**
- 在终端运行第 1 步复制的 PyTorch 安装命令。
- ⚡ **大文件加速技巧**:PyTorch 的 `.whl` 文件通常较大(>500MB)。如果终端 `pip` 下载速度极慢,请:
1. 观察终端输出的完整 `.whl` 下载链接(以 `https://download.pytorch.org/...` 开头)。
2. 复制该链接,粘贴到 **迅雷 (Thunder)** 或 IDM 下载器中进行 P2P 加速下载。
3. 下载完成后,在终端执行:`pip install <你的本地下载路径/文件名.whl>` 完成离线安装。
**4. 验证安装**
python -c "import torch; print('CUDA Available:', torch.cuda.is_available()); print('CUDA Version:', torch.version.cuda)"
若输出 `CUDA Available: True` 及对应版本号,则 GPU 环境配置成功。
### 步骤 2:安装项目依赖
# 双击 install.bat
# 或手动执行:
cd HotworkMonitor
install.bat
# 等待安装完成(约 5-10 分钟,取决于网速)
### 步骤 3:启动系统
# 双击 start.bat
# 或手动执行:
start.bat
# 浏览器会自动打开 http://localhost:5000
### 步骤 4:使用系统
1. 等待视频流加载完成
2. 输入平台高度差(地面作业填 0)
3. 点击视频画面锚定动火点位置
4. 点击 "开始监控" 按钮
5. 系统自动调用 `models/best.pt` 目标检测 7 类数据集类别,如果检测结果为气瓶则计算安全距离
## 🛡️ 气瓶安全边界规则(GB 30871-2022)
### 距离规则(实时检测,每帧处理)
|规则|要求|告警类型|音频|
|:---:|:---:|:---:|:---:|
|氧气瓶与乙炔瓶间距|≥ 5 米|🔴 严重告警|✅ 播放|
|氧气瓶与动火点间距|≥ 10 米|🔴 严重告警|✅ 播放|
|乙炔瓶与动火点间距|≥ 10 米|🔴 严重告警|✅ 播放|
### 存在规则(间隔检测,降低告警疲劳)
|规则|要求|检测间隔|告警类型|音频|
|:---:|:---:|:---:|:---:|:---:|
|警戒线设置|必须存在|5 秒(125 帧)|🟡 警告告警|❌ 静音|
|监护人到位|必须存在|6 秒(150 帧)|🟡 警告告警|❌ 静音|
|灭火器配备|必须存在|6 秒(150 帧)|🟡 警告告警|❌ 静音|
|工人违规行为|实时检测|3 秒(75 帧)|🔴 严重告警|✅ 播放|
### 🎨 颜色标识(严格对应后端代码映射)
|Class ID|目标|绘制检测框颜色 (BGR)|显示颜色|说明|
|:---:|:---:|:---:|:---:|:---:|
|`0`|安全工人 (`worker_safe`)|`(0, 255, 0)`|🟢 绿色|正常状态|
|`1`|监护人 (`supervisor`)|`(128, 0, 128)`|🟣 紫色|GB 30871-2022:监护人须现场履职|
|`2`|氧气瓶 (`oxygen_cylinder`)|`(255, 0, 0)`|🔵 蓝色|符合氧气瓶标识规范|
|`3`|灭火器 (`fire_extinguisher`)|`(0, 165, 255)`|🟠 橙色|醒目提示|
|`4`|违规工人 (`worker_violation`)|`(0, 0, 255)`|🔴 红色|违规行为|
|`5`|乙炔瓶 (`acetylene_cylinder`)|`(42, 42, 165)`|🟤 棕色|符合乙炔瓶标识规范|
|`6`|警戒线 (`safety_line`)|`(0, 255, 255)`|🟡 黄色|醒目提示|
## 📁 项目结构
HotworkMonitor/
├── install.bat # 一键安装脚本
├── start.bat # 一键启动脚本(生产模式)
├── stop.bat # 一键停止脚本
├── README.md # 使用说明
│
├── backend/ # 后端代码(Python + Flask)
│ ├── app.py # Flask 主程序
│ ├── engine.py # 测距引擎(核心算法)
│ ├── config.py # 配置文件
│ ├── calibrate_f0.py # 相机标定脚本
│ └── requirements.txt # Python 依赖
│
├── frontend/ # 前端代码(Vue3 + Vite)
│ ├── src/ # 源代码(开发时用)
│ │ ├── App.vue # 主界面
│ │ └── ...
│ ├── public/
│ │ └── audio/
│ │ ── alarm.mp3 # 告警音效
│ ├── package.json # Node.js 依赖
│ └── dist/ # 打包后生成(生产时用)
│ ├── index.html
│ ├── assets/
│ └── audio/
│
└── models/ # AI 模型
└── best.pt # YOLOv8 训练模型(PyTorch 格式)
## 🏗️ 系统架构
{: width="800px" height="480px" }
### 🔐 前端操作验证(纯客户端实现)
- **拦截机制**:在 Vue 组件层拦截所有关键操作(启动/停止监控、设置动火点、清除点位、重置统计),触发 `requireAuth` 弹窗。
- **验证逻辑**:用户输入密码后,前端本地比对(默认 `123456`,可在 `App.vue` 的 `verifyAuth()` 中修改)。验证通过后才执行对应的 `axios` 请求;失败则拦截并提示错误。
- **安全边界**:仅保护**控制指令**下发,不加密视频流与 WebSocket 通信。适用于物理隔离的内网环境,防止非授权人员误触或恶意控制。
- **扩展建议**:若需对接企业统一认证或暴露至公网,可在 Flask 后端补充 `@login_required` 中间件或 JWT 鉴权逻辑。
### 关键技术
|技术|说明|
|:---:|:---:|
|**YOLOv8**|目标检测模型(7 类目标)|
|**单目测距**|基于相机标定的三维坐标重建|
|**GPU 加速**|CUDA 加速推理(MX450 可达 30 FPS)|
|**双帧缓冲**|捕获/处理分离,避免卡顿|
|**WebSocket**|实时告警推送|
|**前端绘制**|动火点标记 60+ FPS 显示无频闪视觉感受,区别后端抽帧绘制处理|
## ⚙️ 配置说明
**backend/config.py**
# 相机内参(需标定)
CAMERA_F0 = 684 # 等效焦距(不同分辨率下需要重新标定)
CAMERA_CX = 640 # 图像中心 X
CAMERA_CY = 360 # 图像中心 Y
# 安全距离阈值(毫米)
GAS_TO_GAS_THRESHOLD = 5000 # 5 米
GAS_TO_FIRE_THRESHOLD = 10000 # 10 米
# 间隔检测配置(帧数,基于 25 FPS)
SAFETY_LINE_CHECK_INTERVAL = 125 # 5 秒
SUPERVISOR_CHECK_INTERVAL = 150 # 6 秒
FIRE_EXTINGUISHER_CHECK_INTERVAL = 150 # 6 秒
WORKER_VIOLATION_CHECK_INTERVAL = 75 # 3 秒
# 告警推送间隔(秒)
ALARM_INTERVAL = 5.0 # 相同告警最小推送间隔
# 检测阈值
CONFIDENCE_THRESHOLD = 0.25 # 置信度阈值
NMS_IOU_THRESHOLD = 0.45 # NMS 阈值
# 推理分辨率
INFER_SIZE = 320 # 降低分辨率提升速度
# ========== 视频参数 ==========
VIDEO_WIDTH = 1280 # 与标定时的分辨率选择一致
VIDEO_HEIGHT = 720 # 与标定时的分辨率选择一致
VIDEO_FPS = 30
## 🔧 常见问题
**Q: install.bat 运行失败?**
**Q: start.bat 提示找不到 conda?**
**Q: 视频流不显示?**
**Q: 检测效果不好?**
**Q: 告警太频繁?**
**Q: 没有告警声音?**
**Q: GPU 没有启用?**
**Q: 帧率太低?**
## 性能优化建议
- **光照条件**
- ✅ 充足均匀光照可大幅提升检测率
- ⚠️ 暗光环境下置信度降低(约 0.5),处于临界检出状态
- ❌ 强光/过曝环境下目标特征被破坏,可能直接漏检
- **摄像头位置**
- ✅ 正对作业区域
- ✅ 高度 2-3 米为宜
- ❌ 避免逆光拍摄
- **系统配置**
- ✅ 使用 GPU 加速(MX450 及以上)
- ✅ 推理分辨率 320x320
- ✅ 关闭其他占用 GPU 的程序
## 📞 技术支持
如有问题,请联系开发者或查看项目文档。
## 📝 更新日志
|版本|日期|更新内容|
|:---:|:---:|:---:|
|**v2.0**|2026-05|GPU 加速、音频告警、间隔检测优化、网络访问优化|
|**v1.0**|2026-04|初始版本,CPU 推理|
## 📄 许可证
The source code is licensed under MIT. The trained model weights in the `models/` directory are derived from Ultralytics YOLOv8 and are subject to the AGPL-3.0 license.
**本科毕业设计项目,仅供学习使用。**