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

news/2024/7/10 23:12:11 标签: YOLO, qt, 开发语言

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

  • 前言🎈
  • 最终实现效果图💡
    • 打开图片
    • 检测效果展示
  • 界面介绍🤞
  • 部分代码展示🌹
  • 总结🏆

前言🎈

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

最终实现效果图💡

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

打开图片

在这里插入图片描述

检测效果展示

在这里插入图片描述
此处使用的权重文件为YOLOv5s微调训练之后得到的!

界面介绍🤞

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

  • 打开: 选择图片,在代码中已经限制了只能选择图片,比如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,只需一杯奶茶钱(6.6)😁,源代码全部给你哦🤞
  • 挣点辛苦钱,非常感谢大家的支持🌹

http://www.niftyadmin.cn/n/5393511.html

相关文章

qt5.15 升级 qt 6.5 部分问题 解决修复

报错 QT5_USE_MODULES 升级 QT6_ADD_RESOURCES qt_add_resources Compiles binary resources into source code. CMake Commands in Qt6 Core | Qt Core 6.6.2

vsftpd下载链接

3.0.2下载链接 https://download.csdn.net/download/quantum7/88878900 可以下载各个版本: GitHub - dagwieers/vsftpd: Unofficial vsftpd source tree (since there doesnt seem to be an official public versioning system ?) 2.3.4 GitHub - ChenChangXi…

从零开始学Spring Boot系列-Hello World

欢迎来到从零开始学Spring Boot的旅程!我们将从一个非常基础但重要的示例开始:创建一个简单的Spring Boot应用程序,并输出“Hello World”。 1. 环境准备 首先,确保你的开发环境已经安装了以下工具: Java Development …

vue : 无法加载文件 C:\Program Files\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。

解决方法: 打开PowerShell,在命令框输入set-ExecutionPolicy RemoteSigned 在PowerShell中输入会出现如下图,输入y即可。

C语言--贪吃蛇

目录 1. 实现目标2. 需掌握的技术3. Win32 API介绍控制台程序控制台屏幕上的坐标COORDGetStdHandleGetConsoleCursorinfoCONSOLE_CURSOR_INFOSetConsoleCursorInfoSetConsoleCursorPositionGetAsyncKeyState 4. 贪吃蛇游戏设计与分析地图<locale.h>本地化类项setlocale函…

Three.js-02Vue框架入手

1.创建项目 说明&#xff1a;默认有vue基础&#xff0c;node版本18以上。 vue create threejs 2.选择vue3 4.安装 npm i three 5. 修改页面 <template> <div></div> </template><script setup> import * as THREE from three;const width win…

会分期完成2.3亿元C轮融资,它们都使用了拼音域名

易名科技()1月10日报道&#xff0c;致力于帮助租户缓解资金压力的汇分公司近日宣布完成2.3亿元C轮融资&#xff0c;由联络互动领投。 值得注意的是&#xff0c;它们都使用拼音域名。 他们分别是。 图&#xff1a;接触互动 汇分是汇房房旗下的租房分期平台。 打破了传统的押一付…

Floor报错原理详解+sql唯一约束性

目录 floor报错原理 唯一性约束 主键约束&#xff1a; 创建约束的形式 删除约束 删除唯一性约束&#xff08;UNIQUE Constraint&#xff09; 在SQL Server中&#xff1a; 在MySQL中&#xff1a; 在PostgreSQL中&#xff1a; 删除主键约束&#xff1a; floor报错原理 …