深度学习算法目标检测训练井盖隐患检测数据集并建立基于YOLOv8井盖隐患检测系统识别检测井盖缺失破损 的检测

深度学习算法目标检测基于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 同学呀,根据实际情况调整参数和逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值