工业产品缺陷检测系统(YOLOv5s+PyQT5)

前言🎈

在之前写过一个web端的检测页面,然后最近写了一个工业产品缺陷检测系统,这次的是电脑可以打开的软件形式的,该项目由YOLOv5sPyQT5完成。简单记录一下,页面没有很绚丽,但是实现了基本的检测功能,简单易懂

最终实现效果图💡

还是先看效果图吧,简简单单展示一下

打开图片

在这里插入图片描述

检测效果展示

在这里插入图片描述
此处使用的权重文件为YOLOv5s微调训练200轮之后得到的!图片为东北大学公开的带钢表面缺陷数据集

界面介绍🤞

设计了四个按钮,分别是 打开检测模型选择检测退出系统

  • 打开: 选择图片,在代码中已经限制了只能选择图片,比如jpg、png等格式的图片
  • 检测模型选择: 此处设计了一个下拉框,可以选择自己想使用的检测模型,比如自己改进的模型或原始模型等等。
  • 检测: 该按钮即在选择好模型时,点击即可开始检测。
  • 退出系统: 不必解释哈哈懂得都懂

其中, 标题、图标都可以根据自己的需要进行修改。左侧的为原始图片,右侧为检测后的图片。
中下方有一个文本框,显示文件路径、检测结果、文件保存路径信息。

部分代码展示🌹

UI代码

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)  # 初始化UI

        # 连接按钮的槽函数
        self.pushButtonExit_2.clicked.connect(self.detect)
        self.pushButtonExit.clicked.connect(self.exit_system)
        self.ChooseFile.clicked.connect(self.choose_file)

        #设置图片自适应大小
        self.image_label = QLabel(self)
        self.label_o_image.setScaledContents(True)
        self.label_new_image.setScaledContents(True)
        self.label_o_image.setStyleSheet("border: 1px solid black")
        self.label_new_image.setStyleSheet("border: 1px solid black")

        #设置textBrower中字体大小
        self.textBrowser.setStyleSheet("font-size: 14px")


        #设置背景透明
        #self.setWindowOpacity(0.95)

模型代码

def parse_opt():
    parser = argparse.ArgumentParser()
    '''
    weights:训练的权重
    source:测试数据,可以是图片/视频路径,也可以是'0'(电脑自带摄像头),也可以是rtsp等视频流
    img-size:网络输入图片大小
    conf-thres:置信度阈值
    iou-thres:做nms的iou阈值device:设置设备
    view-img:是否展元的图片/视频,默认False
    save-txt:是否将预音上标以txt文件形式保存,默认False
    save-conf:是否将预测的框坐标以txt文件形式保存,默认False
    save-dir:网络预测之后的图片/视频的保存路径
    classes:设置只保留某一部分类别,形如0或者0 2 3
    agnostic-nms:进行nms是否也去除不同类别之间的框,默认False
    augment:推理的时候进行多尺度,翻转等操作(TTA)推理
    update: 如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息,默认为False
'''
    filepath = "D:\QT-yolov5\yolov5s\data\images\patches_277.jpg"
    parser.add_argument('--weights', nargs='+', type=str, default='D:\\QT-yolov5\\yolov5s\\best.pt',
                        help='model path or triton URL')
    parser.add_argument('--source', type=str, default=filepath, help='file/dir/URL/glob/screen/0(webcam)')
    parser.add_argument('--data', type=str, default='D:\QT-yolov5\yolov5s\data\neu.yaml',
                        help='(optional) dataset.yaml path')
    parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640],
                        help='inference size h,w')
    parser.add_argument('--conf-thres', type=float, default=0.25, help='confidence threshold')
    parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold')
    parser.add_argument('--max-det', type=int, default=1000, help='maximum detections per image')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--view-img', action='store_true', help='show results')
    parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
    parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')
    parser.add_argument('--save-crop', action='store_true', help='save cropped prediction boxes')
    parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
    parser.add_argument('--classes', nargs='+', type=int,
                        help='filter by class: --classes 0, or --classes 0 2 3')
    parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')
    parser.add_argument('--augment', action='store_true', help='augmented inference')
    parser.add_argument('--visualize', action='store_true', help='visualize features')
    parser.add_argument('--name', default='exp', help='save results to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    opt = parser.parse_args()
    opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1  # expand
    print_args(vars(opt))
    return opt


def main2(opt):
    check_requirements(exclude=('tensorboard', 'thop'))
    r_speed,r_path, det =run(**vars(opt))
    return r_speed, r_path, det


if __name__ == "__main__":
    opt = parse_opt()
    main2(opt)

总结🏆

感觉整体还是可以的,虽然写的工业产品缺陷检测系统,但是大家可以根据自己的需要修改权重文件对其他东西进行检测。 代码也比较容易理解,在此基础上增加其他功能也是较为简单的。

  • 如果对该系统感兴趣,可以加qq:1208175466,只需28.8❤,源代码给你,帮你调试成功✔
  • yolo其他系列也可以帮忙部署基于pyqt5界面,可以加q了解,非常感谢大家的支持🌹
### YOLOv5 缺陷检测实战教程 #### 1. 环境配置与安装 为了使用 YOLOv5 进行缺陷检测,首先需要完成环境配置。可以参考官方文档或相关资料来设置开发环境[^1]。通常情况下,YOLOv5 的运行依赖于 Python 和 PyTorch 库的支持。 以下是基本的环境搭建步骤(以 Linux 或 macOS 平台为例): ```bash git clone https://github.com/ultralytics/yolov5.git cd yolov5 pip install -r requirements.txt ``` 上述命令会克隆 YOLOv5 的源码仓库并安装所需的依赖库。 --- #### 2. 数据准备 在实际应用中,数据的质量直接影响模型的效果。对于缺陷检测任务,需准备好标注好的图像数据集,并按照 YOLO 格式的标准组织数据结构[^3]。 典型的数据集目录结构如下所示: ``` dataset/ ├── train/ │ ├── images/ │ └── labels/ ├── valid/ │ ├── images/ │ └── labels/ └── data.yaml ``` 其中 `data.yaml` 文件用于定义类别名称以及训练和验证数据的位置。例如: ```yaml train: ../dataset/train/images val: ../dataset/valid/images nc: 2 # 类别数量 names: ['defect_1', 'defect_2'] # 类别名列表 ``` --- #### 3. 训练自定义模型 当数据集准备完成后,可以通过修改参数文件或直接调用脚本来启动训练过程。以下是一个简单的训练命令示例: ```bash python train.py --img 640 --batch 16 --epochs 50 --data dataset/data.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt ``` 此命令表示使用预训练权重 `yolov5s.pt` 对尺寸为 640×640 的图片进行训练,批次大小设为 16,总轮数为 50 轮。 --- #### 4. 模型推理与结果可视化 经过充分训练后,可利用保存的最佳权重文件执行推断操作。下面是一段代码片段演示如何加载模型并对单张图片实施预测[^2]: ```python import torch from PIL import Image from utils.general import non_max_suppression, scale_coords from utils.plots import Annotator # 加载模型 model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt') # 推理一张图片 image_path = "test.jpg" results = model(image_path) # 可视化结果 annotator = Annotator(Image.open(image_path)) for *xyxy, conf, cls in results.xyxy[0]: annotator.box_label(xyxy, f"{conf:.2f}", color=(0, 255, 0)) annotator.result().show() ``` 以上程序读取了一幅测试图并通过已训练的网络获取边界框坐标、置信度分数及其对应的分类标签。 --- #### 5. 布局 UI 界面 (可选) 如果希望构建更友好的用户体验,则可以在桌面端或者 Web 上集成图形界面。比如借助 PyQt 设计 GUI 来封装整个流程——从上传待检样本直至呈现最终分析成果。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值