工业产品缺陷检测系统(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了解,非常感谢大家的支持🌹
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值