当前位置: 首页 > 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.cnnetsun.cn/news/1904933.html

相关文章:

  • Vivado ILA实战:5分钟搞定FPGA信号抓取与波形分析(附常见问题排查)
  • 5大核心模块:重新定义英雄联盟游戏辅助体验
  • APK Installer:Windows平台安卓应用安装的完整解决方案
  • Kazumi番剧播放器:从零开始的完整使用指南
  • PPTist:基于Vue3+TypeScript的在线演示文稿创作平台终极指南
  • 华为路由器OSPF多区域配置详解:从零到实战一步到位
  • Video-subtitle-remover:AI驱动的视频硬字幕去除终极指南
  • Windows 10下Veins+SUMO+OMNeT++环境搭建全攻略(避坑指南)
  • 深度解析APK文件:Java开发者必备的apk-parser完全实战指南
  • Sunshine游戏串流终极指南:从架构解析到性能调优的完整技术方案
  • 如何零成本批量提取B站视频音频?BilibiliDown完整指南
  • V20变频器MODBUS通讯参数详解:如何通过S7-1200 PLC实现精准调速控制
  • 训练完就崩?部署即抖动?——多模态模型鲁棒性失效的8个隐性陷阱与实时修复方案
  • HTML转Figma终极指南:双向转换工具如何重塑设计开发工作流
  • 多通道数据整形器(MCDF)验证中的常见陷阱与调试技巧
  • 如何突破Cursor AI的使用限制?3步解锁Pro功能的完整指南
  • 如何用TEK Launcher实现ARK生存进化一站式游戏管理
  • 快速掌握Java反编译:JD-GUI完整使用指南
  • 从入门到精通:CST中WCS坐标系与Pick功能的完整指南(含参数化建模实例)
  • ComfyUI IPAdapter Plus终极指南:3步实现多模态图像生成与风格转换
  • Milvus vs ElasticSearch实战对比:从零搭建到性能测试全记录(附避坑指南)
  • SQL 注入核心三大方式深度解析,保姆级教程,看完直接上手挖洞
  • 从层次结构到模块划分:探索IC设计中的高效SOC实现路径
  • 华为交换机 VLAN间路由(三层交换) 配置详解
  • RVC变声器终极指南:如何用10分钟语音数据训练你的AI声音克隆模型
  • 氨基化四氧化三铁磁性纳米颗粒,NH₂-Fe₃O₄,成分与性质
  • N‑羟基琥珀酰亚胺化四氧化三铁纳米颗粒,NHS@Fe₃O₄,叠氮化四氧化三铁纳米颗粒,N3-Fe₃O₄,化学结构特点
  • 用Gazebo+ROS Melodic搭建你的第一个无人机自主导航仿真环境(FastPlanner规划+VINS定位)
  • CANoe实战指南:DBC文件导入与报文信号动态配置详解
  • 【第 001 讲】计算机导论与 Python 宏观全景:系统架构 | 语言演进 | 执行机制 | 生态版图 | 解释器 | 版本环境