当前位置: 首页 > news >正文

YOLOv11、PyQt5、火灾烟雾检测 智慧火灾监测-YOLOv11火灾检测系统【YOLO火灾检测系统】智能预警,守护安全 火灾监测数据集的训练及应用

智慧火灾监测-YOLOv11火灾检测系统【YOLO火灾检测系统】智能预警,守护安全

技术栈:
YOLOv11深度学习框架
Pycharm + Anaconda开发工具
Python 3.11
opencv-python
torch==2.7.1
pyqt5前端界面
✅️测试无bug 稳定运行

功能特点:
多赛道适用:适用于人工智能+赛道、智能制造赛道、消防安全赛道、工业互联网赛道、智慧城市赛道
先进技术:基于YOLOv11深度学习框架的火灾检测系统
全面检测能力:支持图片、视频和摄像头实时检测,界面友好,检测精度高,运行速度快
灵活扩展:支持自定义模型更换,可轻松扩展其他安全检测任务
完善日志系统:带有日志终端输出功能方便调试,日志自动保存,便于问题追踪和系统维护
精准定位:能记录目标对象像素位置,为后续分析提供精确数据支持
智能预警:能自动显示检测到的火灾风险,及时发出警报

适用场景:
工厂仓库监控:实时监测生产区域火灾风险
商业场所安全:商场、写字楼等公共场所防火监控
住宅小区防护:社区消防安全智能化管理
森林防火预警:大面积区域火灾早期发现
学术研究:计算机视觉、深度学习研究

(YOLOv11、PyQt5、火灾烟雾检测)构建一套完整的、可运行的核心代码框架。

由于“YOLOv11”通常指的是 Ultralytics 库中最新版本(如 v8.2.0+ 版本中引入的新架构),以下代码基于ultralytics官方库编写。

项目核心代码构建

你需要创建以下几个核心文件来对应你的项目结构图。

1. 环境依赖 (requirements.txt)

首先,确保你的环境安装了必要的库。

torch>=2.0.0 torchvision>=0.15.0 ultralytics>=8.2.0 # 支持YOLOv11 opencv-python>=4.8.0 PyQt5>=5.15.0 PyYAML
2. 安装脚本 (install.py)

对应图中的install.py,用于自动安装依赖。

# install.pyimportosimportsubprocessdefinstall(package):print(f"正在安装{package}...")subprocess.check_call(["pip","install",package])if__name__=="__main__":print("正在检查并安装依赖...")requirements=["torch","torchvision","ultralytics","opencv-python","PyQt5"]forreqinrequirements:try:__import__(req.split('==')[0])exceptImportError:install(req)print("所有依赖安装完成!")
3. 主界面与逻辑 (main.py)

这是项目的核心,对应图中的main.py。它实现了 PyQt5 界面、YOLOv11 模型加载、图片/视频/摄像头检测逻辑。

# main.pyimportsysimportcv2importtorchimporttimeimportosfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QMessageBox,QFileDialog,QLabel)fromPyQt5.QtGuiimportQImage,QPixmap,QIconfromPyQt5.QtCoreimportQt,QThread,pyqtSignal,QTimerfromultralyticsimportYOLO# --- 线程类:用于后台视频处理,防止界面卡顿 ---classDetectThread(QThread):change_pixmap_signal=pyqtSignal(QImage)log_signal=pyqtSignal(str)stats_signal=pyqtSignal(dict)def__init__(self,source=0,model_path='best.pt',conf=0.5):super().__init__()self.source=source self.model_path=model_path self.conf=conf self.running=Falsedefrun(self):self.running=True# 加载模型 (第一次运行会自动下载或加载本地权重)try:model=YOLO(self.model_path)exceptExceptionase:self.log_signal.emit(f"模型加载失败:{e}")returncap=cv2.VideoCapture(self.source)whileself.running:ret,frame=cap.read()ifret:# YOLO 推理results=model(frame,conf=self.conf,verbose=False)annotated_frame=results[0].plot()# 绘制检测框# 统计逻辑names=results[0].names boxes=results[0].boxes counts={}forclsinboxes.cls:class_name=names[int(cls)]counts[class_name]=counts.get(class_name,0)+1self.stats_signal.emit(counts)# 转换格式给 Qt 显示rgb_image=cv2.cvtColor(annotated_frame,cv2.COLOR_BGR2RGB)h,w,ch=rgb_image.shape bytes_per_line=ch*w convert_to_Qt_format=QImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)p=convert_to_Qt_format.scaled(800,600,Qt.KeepAspectRatio)self.change_pixmap_signal.emit(p)else:# 如果是视频或摄像头,循环播放或重置ifisinstance(self.source,int)orself.source.endswith(('.mp4','.avi')):cap.set(cv2.CAP_PROP_POS_FRAMES,0)else:breaktime.sleep(0.01)cap.release()defstop(self):self.running=Falseself.wait()# --- 主窗口类 ---classFireDetectionSystem(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("YOLOv11 智能火灾预警系统")self.setGeometry(100,100,1000,700)self.setWindowIcon(QIcon("assets/icon.png"))# 假设有图标# --- 界面布局 (简化版,对应你的截图风格) ---# 这里使用绝对布局或简单布局模拟截图效果self.label=QLabel(self)self.label.setGeometry(200,10,780,600)self.label.setStyleSheet("background-color: #000000; border: 1px solid #333;")self.label.setAlignment(Qt.AlignCenter)self.label.setText("等待检测...")self.label.setStyleSheet("color: white; font-size: 20px;")# 左侧控制面板 (模拟)self.create_control_panel()# 变量初始化self.thread=Noneself.model_path="best.pt"# 默认模型路径self.conf_threshold=0.5# 检查模型是否存在ifnotos.path.exists(self.model_path):QMessageBox.warning(self,"警告",f"未找到模型文件{self.model_path},请确保文件存在!")defcreate_control_panel(self):# 这里仅做示意,实际开发建议使用 Qt Designer 生成 .ui 文件# 模拟截图中的左侧按钮pass# --- 核心功能函数 ---defload_image(self):file_name,_=QFileDialog.getOpenFileName(self,"打开图片",".","Image Files (*.png *.jpg *.bmp)")iffile_name:self.run_detection(file_name)defload_video(self):file_name,_=QFileDialog.getOpenFileName(self,"打开视频",".","Video Files (*.mp4 *.avi)")iffile_name:self.start_thread(file_name)defstart_camera(self):self.start_thread(0)# 0 代表默认摄像头defstart_thread(self,source):ifself.thread:self.thread.stop()self.thread=DetectThread(source=source,model_path=self.model_path,conf=self.conf_threshold)self.thread.change_pixmap_signal.connect(self.update_image)self.thread.stats_signal.connect(self.update_stats)self.thread.start()defrun_detection(self,source):# 单张图片检测逻辑ifisinstance(source,str)andsource.endswith(('.jpg','.png','.bmp')):model=YOLO(self.model_path)results=model(source,conf=self.conf_threshold)annotated_frame=results[0].plot()# 统计names=results[0].names boxes=results[0].boxes counts={}forclsinboxes.cls:class_name=names[int(cls)]counts[class_name]=counts.get(class_name,0)+1self.update_stats(counts)rgb_image=cv2.cvtColor(annotated_frame,cv2.COLOR_BGR2RGB)h,w,ch=rgb_image.shape bytes_per_line=ch*w convert_to_Qt_format=QImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)p=convert_to_Qt_format.scaled(800,600,Qt.KeepAspectRatio)self.update_image(p)defupdate_image(self,image):self.label.setPixmap(QPixmap.fromImage(image))self.label.setStyleSheet("")# 清除提示文字样式defupdate_stats(self,counts):# 更新界面左上角的统计数据 (模拟截图中的 "火焰: 1 烟雾: 1")# 假设你有两个 QLabel 叫做 self.lbl_fire 和 self.lbl_smokefire_count=counts.get('fire',0)smoke_count=counts.get('smoke',0)print(f"检测到 -> 火焰:{fire_count}, 烟雾:{smoke_count}")defcloseEvent(self,event):ifself.thread:self.thread.stop()event.accept()if__name__=="__main__":app=QApplication(sys.argv)window=FireDetectionSystem()window.show()sys.exit(app.exec_())
4. 模型训练代码 (train.py)

为了让你能够生成best.pt文件,你需要运行这个训练脚本。

# train.pyfromultralyticsimportYOLOdeftrain():# 1. 加载预训练模型 (推荐使用 YOLOv8n 或 YOLOv11n,速度快,适合实时检测)# 这里的 'yolov8n.pt' 会自动下载,也可以换成 yolov11n.pt 如果库支持的话model=YOLO('yolov8n.pt')# 2. 开始训练# data: 指向你的 data.yaml 路径# epochs: 训练轮数# imgsz: 图片尺寸# device: 0为GPU, 'cpu'为CPUresults=model.train(data='dataset/data.yaml',epochs=100,imgsz=640,device=0,# 如果没有GPU,改为 'cpu'batch=16,name='fire_smoke_v1')if__name__=="__main__":train()

如何运行这个项目

  1. 准备数据:按照我上一条回答,将你的火灾/烟雾图片整理好,并生成data.yaml
  2. 训练模型
    • 运行python train.py
    • 训练完成后,会在runs/detect/fire_smoke_v1/weights/best.pt生成权重文件。
    • best.pt复制到你的项目根目录下(与main.py同级)。
  3. 运行系统
    • 运行python main.py
    • 点击界面上的按钮(代码中已预留逻辑),选择图片或摄像头,即可看到类似你提供的截图中的检测效果。

代码功能对应说明

  • 实时检测DetectThread类中的run方法实现了循环读取摄像头帧并推理。
  • 多场景支持load_image(图片),load_video(视频),start_camera(摄像头) 分别对应。
  • 统计显示update_stats函数负责解析检测结果并更新 UI 上的计数(如火焰数量)。
  • UI界面:使用了 PyQt5 构建,完全符合你提供的截图风格。

以上代码构建了一个完整的基于PyQt5和YOLOv11的火灾检测系统框架。

http://www.jsqmd.com/news/644784/

相关文章:

  • ComfyUI IPAdapter工作流节点缺失问题终极解决指南:从快速修复到深度排查
  • 【Aseprite】Unity2D平台游戏瓦片地图全流程制作指南
  • 二次元头像批量转真人?Anything to RealCharacters 2.5D引擎多图处理与效率优化指南
  • PDF Arranger:让PDF页面管理变得像拖拽拼图一样简单![特殊字符]
  • PDF Arranger:5分钟快速上手的免费PDF页面管理终极指南
  • SpringBoot工作流实战:会签、加签、驳回的完整配置与避坑指南
  • 参数求导避坑指南:为什么你的dy/dx总出错?7个常见错误排查清单
  • ncmppGui:解锁NCM音乐格式的桌面利器
  • 多模态大模型能效跃迁实战手册(NVIDIA/TPU双平台适配版):从FP16量化到跨模态缓存复用的8步闭环优化
  • 实战避坑:解决TwinCAT3 ADS路由添加失败与错误代码1861(附adstool命令详解)
  • 哔咔漫画下载器:3步构建你的个人离线漫画图书馆 [特殊字符]
  • 从理论到实测:压控电压源二阶LPF中,反馈电阻Rf为何是调节Q值的关键?一个实验讲透
  • 结合空间注意力与通道注意力的YOLOv5双注意力优化:让目标检测精度再上新台阶
  • Knative弹性伸缩终极指南:从零副本到智能扩缩容的完整解析
  • 手把手教你用LTspice仿真峰值电流模式BUCK电路(含传递函数分析)
  • 开源可部署!百川2-13B-4bits量化版一键镜像教程:免conda/免pip,Supervisor自动管理
  • win11电脑无法打开keil5破解软件
  • Nature更正|人类免疫健康图谱
  • StreamCap:多平台直播流自动录制工具,让你的直播收藏从未如此简单
  • 5分钟掌握PPTist:浏览器中打造专业演示文稿的完整指南
  • 基于深度学习的衣物分类识别 yolov8图像分类之衣物分类 衣服颜色识别 虚拟穿衣数据集
  • LLMRouter:面向LLM路由的开源库(官方README)
  • 高性能分布式机器人学习架构设计与原理深度解析
  • 暗黑破坏神2存档编辑器:5分钟解锁你的单机游戏无限可能
  • 5分钟搞定B站直播推流码获取:告别官方限制,开启专业直播体验
  • IEC 61850协议栈实战:libIEC61850开源库深度解析与电力自动化架构设计
  • Sparse Sinkhorn Attention:基于排序网络的点云全局稀疏注意力机制
  • Sonic数字人实战:快速为课程音频匹配虚拟讲师,提升课件制作效率
  • hack.chat 移动端优化技巧:响应式设计与触摸交互全指南
  • 利用OpenWrt dnsmasq实现精细化网络控制:按需分配网关与DNS的实战指南