深度学习基于 YOLOv5 的火焰与烟雾实时检测系统(含 UI + 数据集 + 模型)
YOLOv5火焰烟雾检测模型含模型数据集结果UI界面yolov5的火焰和烟雾检测模型数据集包含6940张标注图片涵盖fire和smoke两大类别。【模型特点】轻量级设计运行速度快准确度高检测效果佳一键下载即刻开始你的项目【数据集】标注清晰格式统一6940张高质量图片覆盖各种场景涵盖txt和voc两种类型1 焰眼智巡基于 YOLOv5 的火焰与烟雾实时检测系统含 UI 数据集 模型 项目概述本系统是一款专为消防安全、工业监控、森林防火及智慧城市打造的 AI 视觉预警平台。它基于YOLOv5 目标检测算法构建了“图像识别 视频流分析 参数配置”的三位一体解决方案。系统能够自动识别画面中的火焰 (fire)与烟雾 (smoke)检测精度高达92%单图处理速度0.1 秒并支持摄像头实时监控、本地视频文件分析、置信度/IOU 阈值调节等功能。配套提供6940 张高质量标注数据集含 TXT/VOC 格式、预训练模型权重、PyQt5 图形化界面及完整技术文档实现“一键部署、开箱即用”。无论是作为毕业设计、科研项目还是商业落地原型都具备极高的实用价值与技术含量。 核心功能矩阵1. ️ 图片识别功能灵活上传支持 JPG/PNG/BMP 格式拖拽或点击上传。智能标注自动绘制红色检测框显示类别fire/smoke与置信度。多目标同时检测无遗漏。结果可视化左右分屏对比原图 vs 检测结果图。下方文本框输出详细检测结果路径、坐标、标签、置信度。批量处理可选扩展支持文件夹批量上传图片生成汇总报告。2. 视频检测功能双模式输入摄像头实时监控接入 USB 摄像头或 RTSP 流实现 7×24 小时不间断监测。视频文件检测上传 MP4/AVI/MOV 文件逐帧分析并生成标注视频。动态反馈实时显示当前帧号、总帧数、检测进度。下方日志区滚动输出每帧检测结果时间戳、位置、置信度。控制按钮“开始检测”、“停止检测”、“保存结果”可选导出标注视频。性能优化采用多线程处理确保界面不卡顿FPS 30。3. ⚙️ 参数设置模块IOU 阈值调节默认 0.5可调范围 0.1~0.9控制重叠框合并策略。Confidence 阈值调节默认 0.5可调范围 0.1~0.9过滤低置信度误检。模型切换可选扩展支持加载不同版本的.pt模型如 yolov5s.pt, yolov5m.pt。设备选择CPU / GPU 自动识别与切换需安装 CUDA。4. PyQt5 图形化界面简洁美观采用蓝色主题 图标导航符合现代软件设计规范。Tab 页签布局清晰划分“图片检测”、“视频检测”、“参数设置”三大功能区。响应式设计窗口大小自适应控件布局合理操作流畅。状态提示检测中显示“运行中”完成后提示“检测完毕”错误时弹出警告框。️ 技术架构蓝图️ 前端交互层 (PyQt5)GUI 框架PyQt5(跨桌面应用开发)图像处理OpenCV-Python(读取图片/视频、绘制检测框、显示画面)线程管理QThread(避免阻塞主线程保证界面流畅)信号槽机制实现按钮点击、检测结果更新、日志输出等事件驱动。⚙️ 后端算法层 (YOLOv5)深度学习框架PyTorchUltralytics YOLOv5模型架构Backbone: CSPDarknet53Neck: PANetHead: YOLO HeadLoss: CIoU Loss Focal Loss (提升小目标检测能力)推理引擎加载.pt权重文件进行前向传播。支持 NMS (非极大值抑制) 后处理。可导出 ONNX/TensorRT 加速可选。 数据存储层数据集6940 张标注图片涵盖森林火灾、工厂爆炸、厨房起火、街道浓烟等多种场景。标注格式同时提供YOLO TXT和Pascal VOC XML两种主流格式。类别分布fire: ~4000 实例smoke: ~3000 实例模型权重best.pt在验证集上表现最优的模型。last.pt最后一次训练的模型。配置文件data.yaml定义训练集/验证集路径、类别名称。hyp.yaml超参数配置学习率、动量、权重衰减等。✨ 系统核心优势 技术创新领先轻量化设计选用 YOLOv5s 版本在保证精度的前提下模型体积仅约 14MB适合嵌入式部署。高准确率在自建数据集上 mAP0.5 达到92.3%对小火苗、淡烟雾也有良好检出率。实时性强在 GTX 1060 显卡上视频检测 FPS 45CPU 模式下也能达到 15-20 FPS。多格式兼容支持 TXT/VOC 标注格式方便用户自定义数据集或迁移至其他框架。 实战应用价值早期火灾预警比传统感烟探测器更早发现火情争取黄金救援时间。无人值守监控替代人工盯屏降低人力成本提高响应效率。多场景适配适用于仓库、加油站、化工厂、森林、隧道、高层建筑等高危区域。科研教学利器提供完整代码、数据、模型、UI是计算机视觉课程设计的理想选题。 开发与扩展性模块化结构UI、算法、数据处理分离便于独立修改与升级。插件化架构轻松替换为 YOLOv8、RT-DETR 等新模型或增加温度传感器联动报警。开源友好代码注释详尽结构清晰适合二次开发与学术研究。部署灵活可打包成 exe 文件直接运行也可部署到服务器通过 Web API 调用。 简易代码实现第一步YOLOv5 推理核心 (detect.py)importtorchfrommodels.experimentalimportattempt_loadfromutils.generalimportcheck_img_size,non_max_suppression,scale_coordsimportcv2classFireSmokeDetector:def__init__(self,weightsbest.pt,imgsz640,conf_thres0.5,iou_thres0.5):self.devicecudaiftorch.cuda.is_available()elsecpuself.modelattempt_load(weights,map_locationself.device)self.imgszcheck_img_size(imgsz,sself.model.stride.max())self.conf_thresconf_thres self.iou_thresiou_thres self.namesself.model.module.namesifhasattr(self.model,module)elseself.model.namesdefdetect_image(self,img_path):img0cv2.imread(img_path)imgletterbox(img0,new_shapeself.imgsz)[0]imgimg[:,:,::-1].transpose(2,0,1)# BGR to RGBimgnp.ascontiguousarray(img)imgtorch.from_numpy(img).to(self.device)imgimg.float()/255.0ifimg.ndimension()3:imgimg.unsqueeze(0)predself.model(img,augmentFalse)[0]prednon_max_suppression(pred,self.conf_thres,self.iou_thres,classesNone,agnosticFalse)results[]fordetinpred:iflen(det):det[:,:4]scale_coords(img.shape[2:],det[:,:4],img0.shape).round()for*xyxy,conf,clsinreversed(det):labelf{self.names[int(cls)]}{conf:.2f}results.append({bbox:[int(x)forxinxyxy],label:label,confidence:float(conf)})returnimg0,resultsdefletterbox(img,new_shape(640,640),color(114,114,114)):shapeimg.shape[:2]ratiomin(new_shape[0]/shape[0],new_shape[1]/shape[1])new_unpadint(round(shape[1]*ratio)),int(round(shape[0]*ratio))dw,dhnew_shape[1]-new_unpad[0],new_shape[0]-new_unpad[1]dw,dhdw//2,dh//2imgcv2.resize(img,new_unpad,interpolationcv2.INTER_LINEAR)top,bottomint(round(dh-0.1)),int(round(dh0.1))left,rightint(round(dw-0.1)),int(round(dw0.1))imgcv2.copyMakeBorder(img,top,bottom,left,right,cv2.BORDER_CONSTANT,valuecolor)returnimg第二步PyQt5 主界面 (main_window.py)fromPyQt5.QtWidgetsimportQMainWindow,QPushButton,QLabel,QVBoxLayout,QWidget,QFileDialog,QTextEditfromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQt,QThread,pyqtSignalimportcv2fromdetectimportFireSmokeDetectorclassDetectionThread(QThread):result_signalpyqtSignal(object,list)def__init__(self,detector,image_path):super().__init__()self.detectordetector self.image_pathimage_pathdefrun(self):img,resultsself.detector.detect_image(self.image_path)self.result_signal.emit(img,results)classMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(Target detection system)self.setGeometry(100,100,1000,700)self.detectorFireSmokeDetector()central_widgetQWidget()self.setCentralWidget(central_widget)layoutQVBoxLayout()self.image_labelQLabel()self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setStyleSheet(border: 1px solid gray;)self.upload_btnQPushButton(上传图片)self.upload_btn.clicked.connect(self.upload_image)self.detect_btnQPushButton(开始检测)self.detect_btn.clicked.connect(self.start_detection)self.detect_btn.setEnabled(False)self.result_textQTextEdit()self.result_text.setReadOnly(True)self.result_text.setMaximumHeight(150)layout.addWidget(self.image_label)layout.addWidget(self.upload_btn)layout.addWidget(self.detect_btn)layout.addWidget(self.result_text)central_widget.setLayout(layout)self.current_image_pathNonedefupload_image(self):file_path,_QFileDialog.getOpenFileName(self,选择图片,,Images (*.png *.xpm *.jpg *.bmp))iffile_path:self.current_image_pathfile_path pixmapQPixmap(file_path)scaled_pixmappixmap.scaled(self.image_label.size(),Qt.KeepAspectRatio)self.image_label.setPixmap(scaled_pixmap)self.detect_btn.setEnabled(True)defstart_detection(self):ifnotself.current_image_path:returnself.detect_btn.setEnabled(False)self.threadDetectionThread(self.detector,self.current_image_path)self.thread.result_signal.connect(self.on_detection_finished)self.thread.start()defon_detection_finished(self,img,results):# 显示检测结果图forresinresults:x1,y1,x2,y2res[bbox]labelres[label]cv2.rectangle(img,(x1,y1),(x2,y2),(0,0,255),2)cv2.putText(img,label,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,255),2)rgb_imgcv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,chrgb_img.shape bytes_per_linech*w qimgQImage(rgb_img.data,w,h,bytes_per_line,QImage.Format_RGB888)self.image_label.setPixmap(QPixmap.fromImage(qimg).scaled(self.image_label.size(),Qt.KeepAspectRatio))# 显示文本结果self.result_text.clear()forresinresults:self.result_text.append(f检测位置:{res[bbox]}| 标签:{res[label]}| 置信度:{res[confidence]:.2f})self.detect_btn.setEnabled(True) 数据集统计分析类别分布柱状图instances 12000 ┤ █ │ █ 10000 ┤ █ █ │ █ █ 8000 ┤ █ █ │ █ █ 6000 ┤ █ █ │ █ █ 4000 ┤ █ █ │ █ █ 2000 ┤ █ █ │ █ █ 0 └───────────┴─────┴───── fire smoke边界框分布热力图X-Y 坐标分布火焰与烟雾多出现在画面中下部地面/建筑少数在天空无人机视角。宽高比分布火焰多为方形或不规则形状烟雾多为长条形或扩散状。 交付清单 完整源代码main.py程序入口main_window.pyPyQt5 主界面detect.pyYOLOv5 推理核心utils/工具函数letterbox, nms 等models/YOLOv5 模型定义⚖️ 预训练模型权重best.pt最优模型mAP0.592.3%last.pt最后迭代模型 数据集images/6940 张原始图片train/val/test 分割labels_txt/YOLO 格式标注文件labels_voc/Pascal VOC 格式标注文件data.yaml数据集配置文件 技术文档《环境安装指南》含 requirements.txt《模型训练教程》如何用自己的数据微调《UI 使用说明》《API 接口文档》如需封装为 Web 服务️ 部署工具包build_exe.bat一键打包成 Windows exe 文件Dockerfile容器化部署脚本demo_video.mp4演示视频样例 适用场景展望 工业园区监控实时监测生产车间、储罐区、管道廊架预防重大安全事故。 森林防火预警结合无人机巡检早发现、早扑灭保护生态资源。 智慧楼宇消防集成到现有安防系统实现火情自动报警与联动疏散。 应急救援辅助为消防员提供现场火势分布图指导灭火战术。 高校科研教学作为计算机视觉、人工智能课程的实践项目培养学生工程能力。总结本系统是**“经典算法 实用界面 丰富数据”的完美结合体。它不仅提供了高精度的火焰烟雾检测能力更通过PyQt5 图形界面降低了使用门槛让非专业人士也能轻松上手。配套的6940 张标注数据集和完整训练代码使其成为学习与研究的绝佳素材。无论是用于毕业设计答辩**、创新创业比赛还是企业原型验证都能展现出强大的技术实力与应用潜力。让每一处火情都无处遁形让每一次预警都及时准确