深度学习算法目标检测基于YOLOv8井盖隐患检测系统识别检测井盖缺失破损 的检测
以下文字仅供参考。
井盖隐患检测数据集9000张 yolo格式
circle uncovered broke 三类
1
1
深度学习基于YOLOv8井盖隐患检测系统,步骤:安装依赖、准备数据集、配置YOLOv8模型、训练和评估模型、GUI应用程序来展示检测结果。以下是详细的指南和代码示例。
1. 安装依赖
首先确保你的环境中已经安装了必要的库:
pip install torch torchvision torchaudio opencv-python ultralytics PyQt5
2. 数据集准备
假设你已经有了一个标注好的数据集,包括图像及其对应的YOLO格式标签文件(.txt
)。组织你的数据集如下:
manhole_cover_defects/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── labels/
├── train/
├── val/
└── test/
创建data.yaml
文件定义数据集路径和类别信息。假设我们有三种类型的井盖隐患:circle uncovered broke 三类
train: ./manhole_cover_defects/images/train/
val: ./manhole_cover_defects/images/val/
nc: 3 # 类别数量
names: ['circle uncovered broke ']
3. 配置YOLOv8
加载YOLOv8模型并准备好用于训练的数据集:
from ultralytics import YOLO
# 加载预训练的YOLOv8n模型
model = YOLO('yolov8n.yaml') # 或者 'yolov8n.pt' 如果你想从预训练权重开始
4. 训练模型
使用定义好的data.yaml
文件开始训练:
# 开始训练
results = model.train(data='path/to/data.yaml', epochs=100, imgsz=640, batch=16)
5. 评估模型
训练完成后,在验证集上评估模型性能:
# 在验证集上评估模型性能
metrics = model.val()
print(f"Validation mAP: {metrics.box.map}")
6. 构建GUI应用程序
接下来,我们将构建一个简单的PyQt5 GUI应用程序来展示YOLOv8的检测结果。
import sys
from PySide2.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget, QPushButton, QFileDialog
from PySide2.QtGui import QPixmap, QImage
import cv2
import numpy as np
from ultralytics import YOLO
class AppDemo(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('Manhole Cover Defect Detection')
self.setGeometry(100, 100, 800, 600)
self.image_label = QLabel(self)
self.button = QPushButton("Load Image", self)
self.button.clicked.connect(self.load_image)
vbox = QVBoxLayout()
vbox.addWidget(self.image_label)
vbox.addWidget(self.button)
self.setLayout(vbox)
self.model = YOLO('path/to/your/best.pt') # 使用训练好的模型
def load_image(self):
fname, _ = QFileDialog.getOpenFileName(self, 'Open file', '', "Image files (*.jpg *.png)")
if fname:
self.show_image(fname)
def show_image(self, image_path):
results = self.model.predict(source=image_path)
img = cv2.imread(image_path)
for r in results:
for box in r.boxes.xyxy:
x1, y1, x2, y2 = map(int, box)
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) # 绘制边界框
label = r.names[int(r.boxes.cls[0])] # 获取类别名称
cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) # 显示类别标签
height, width, channel = img.shape
bytes_per_line = 3 * width
q_img = QImage(img.data, width, height, bytes_per_line, QImage.Format_RGB888).rgbSwapped()
pixmap = QPixmap.fromImage(q_img)
self.image_label.setPixmap(pixmap)
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = AppDemo()
demo.show()
sys.exit(app.exec_())
7. 实时检测摄像头输入
如果你想直接调用摄像头进行实时检测,可以修改上述UI中的start_detection
方法:
def start_detection(self):
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
results = self.model.predict(source=frame)
for r in results:
for box in r.boxes.xyxy:
x1, y1, x2, y2 = map(int, box)
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
label = r.names[int(r.boxes.cls[0])]
cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
height, width, channel = frame.shape
bytes_per_line = 3 * width
q_img = QImage(frame.data, width, height, bytes_per_line, QImage.Format_RGB888).rgbSwapped()
pixmap = QPixmap.fromImage(q_img)
self.image_label.setPixmap(pixmap)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
8. 运行程序
将上述代码保存为ui.py
,然后通过命令行运行它:
python ui.py
总结
构建基于YOLOv8的井盖隐患检测系统的全面指南,包括数据集准备、模型训练、评估以及构建GUI应用程序。tongxue 同学呀,根据实际情况调整参数和逻辑。