
基于深度学习的森林火焰烟雾检测系统(UI界面,Python代码,数据集、yolov8,附3000+已标注数据集)
使用深度学习中的YOLOv8算法实现对森林火焰烟雾的检测,并利用PyQt5设计了简约的系统UI界面。在界面中,您可以选择自己的视频文件、图片文件进行检测,还可以连接摄像头进行实时检测。此外,您还可以更换自己训练的yolov8模型,进行自己数据的检测。
好的,让我们详细讨论如何构建一个基于YOLOv8的森林火焰烟雾检测系统,并使用PyQt5设计一个简洁的UI界面。这个系统将支持视频文件、图片文件的检测以及实时摄像头检测。
项目概述
- 数据集准备:使用已标注的数据集进行模型训练。
- YOLOv8模型训练:使用YOLOv8进行森林火焰烟雾检测模型的训练。
- UI界面设计:使用PyQt5设计一个简洁的UI界面。
- 实时摄像头检测:使用OpenCV进行实时摄像头检测。
- 模型替换:支持用户更换自己训练的YOLOv8模型。
数据集准备
假设你已经有了一个包含3000+已标注数据集,数据集结构如下:
forest_fire_dataset/
│
├── images/
│ ├── train/
│ ├── val/
│ └── test/
│
├── labels/
│ ├── train/
│ ├── val/
│ └── test/
│
└── data.yaml
数据集标注
确保你的数据集已经标注,并且标注文件是JSON格式的。每个标注文件包含以下格式:
{
"shapes": [
{
"label": "Fire",
"points": [[x1, y1], [x2, y2], ...],
"group_id": null,
"shape_type": "polygon",
"flags": {}
},
{
"label": "Smoke",
"points": [[x1, y1], [x2, y2], ...],
"group_id": null,
"shape_type": "polygon",
"flags": {}
}
],
"imagePath": "path_to_image.jpg",
"imageData": null
}
数据配置文件 (data.yaml)
创建一个data.yaml文件,用于配置数据集:
train: ./forest_fire_dataset/images/train
val: ./forest_fire_dataset/images/val
test: ./forest_fire_dataset/images/test
nc: 2 # 类别数量(2类)
names: ['Fire', 'Smoke'] # 类别名称
YOLOv8模型训练
使用以下命令训练模型:
python train.py --data ./forest_fire_dataset/data.yaml --img 640 --batch 16 --epochs 100 --name yolov8_forest_fire --weights yolov8n.pt
UI界面设计
使用PyQt5设计一个简洁的UI界面。
import sys
import cv2
import numpy as np
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import QTimer
from ultralytics import YOLO
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Forest Fire Detection")
self.setGeometry(100, 100, 800, 600)
self.central_widget = QWidget(self)
self.setCentralWidget(self.central_widget)
self.layout = QVBoxLayout(self.central_widget)
self.image_label = QLabel(self)
self.layout.addWidget(self.image_label)
self.detect_button = QPushButton("Detect from Camera", self)
self.detect_button.clicked.connect(self.start_camera)
self.layout.addWidget(self.detect_button)
self.file_button = QPushButton("Load Image/Video", self)
self.file_button.clicked.connect(self.load_file)
self.layout.addWidget(self.file_button)
self.yolov8_model = YOLO('runs/train/yolov8_forest_fire/weights/best.pt')
self.cap = None
self.timer = QTimer(self)
self.timer.timeout.connect(self.update_frame)
def start_camera(self):
self.cap = cv2.VideoCapture(0)
self.timer.start(30)
def load_file(self):
file_dialog = QFileDialog()
file_path, _ = file_dialog.getOpenFileName(self, "Open File", "", "Images (*.png *.jpg *.jpeg);;Videos (*.mp4 *.avi)")
if file_path:
self.cap = cv2.VideoCapture(file_path)
self.timer.start(30)
def update_frame(self):
ret, frame = self.cap.read()
if ret:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = self.yolov8_model(frame)
for result in results:
boxes = result.boxes
for box in boxes:
x1, y1, x2, y2 = box.xyxy[0].tolist()
cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
label = box.cls[0].item()
cv2.putText(frame, self.yolov8_model.names[int(label)], (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
qimage = QImage(frame.data, frame.shape[1], frame.shape[0], QImage.Format_RGB888)
pixmap = QPixmap.fromImage(qimage)
self.image_label.setPixmap(pixmap)
def closeEvent(self, event):
if self.cap:
self.cap.release()
self.timer.stop()
event.accept()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
说明
- UI界面:使用PyQt5设计了一个简单的界面,包含一个图像标签和两个按钮(检测摄像头、加载文件)。
- YOLOv8森林火焰烟雾检测:使用YOLOv8进行森林火焰烟雾检测,并在检测到的目标区域上绘制矩形框。
- 实时摄像头检测:使用OpenCV进行实时摄像头检测,并在UI界面上显示检测结果。
- 模型替换:你可以通过修改
self.yolov8_model = YOLO('path_to_your_model.pt')来更换自己训练的YOLOv8模型。
总结
通过上述步骤,你可以构建一个基于YOLOv8的森林火焰烟雾检测系统,包括UI界面设计、实时摄像头检测、模型训练以及整体代码实现。
9万+



被折叠的 条评论
为什么被折叠?



