钢材缺陷检测系统-ui界面

news2025/7/12 14:58:53

钢材缺陷检测系统-ui界面

之前写过这个博客: 工业缺陷检测项目实战(二)——基于深度学习框架yolov5的钢铁表面缺陷检测
里面介绍了使用yolov5进行训练的步骤。今天我们一起学习利用qt将缺陷检测封装为一个系统。

效果

首先看看效果:
我们运行,先可以看到登录界面:
在这里插入图片描述
在这里插入图片描述

如果密码和账号输入错误,会提示警告,输入正确之后,我们会进入缺陷检测界面,我们必须先打开图片,才能进行识别和保持识别结果:
在这里插入图片描述
我们打开一张等待检测的图像,接着点击开始
在这里插入图片描述
接着可以看到显示了检测结果,正确
在这里插入图片描述
点击保存检测图像
在这里插入图片描述

实现步骤:

(1) 需要安装:

sip
PyQt5
PyQt5-tools

(2) 添加设计器:
file——>settings——>Tools——>ExternalTools
在这里插入图片描述
先添加第一个:
在这里插入图片描述
4个步骤分别填:

1.名称,随便
2.填designer.exe路径,我的路径是:
D:\anaconda3\envs\keras\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
3.$FileName$
4.项目文件夹的路径

再添加第二个:
在这里插入图片描述
从上往下分别为:

1.名称,随便
2.填python解释器路径,我的路径是:
D:\anaconda3\envs\keras\python.exe
3. -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
4.$FileDir$

添加完后,我们才可以运行Qt界面,以及界面编辑设计器:

选择ui文件,右键选择QtDesigner,出现设计器
在这里插入图片描述
在这里插入图片描述
选择PyUIC是编译ui文件,每次修改都必须先单独编译ui文件,除非是直接在py文件修改组件代码。

(3) 编写事件内容:
设计完组件后,我们需要添加点击事件函数:

 self.pushButton.clicked.connect(self.openfile)
 self.pushButton_2.clicked.connect(self.defect)
 self.pushButton_3.clicked.connect(self.save_img)

接着,编写函数内容,比如,打开文件:

 def openfile(self):
        # 定义文件读取函数,解决中文路径读取错误的问题
        def cv_imread(file_path):
            cv_img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), -1)
            return cv_img

        self.fname, ok = QFileDialog.getOpenFileName(None, "打开图片", "", "*;;*.png;;All Files(*)")
        if not ok:
            return
        self.lineEdit.setText(self.fname)
        # 显示图片
        img = cv_imread(self.fname)  # opencv读取图片
        # res = cv2.resize(img, (411, 361), interpolation=cv2.INTER_CUBIC)  # 用cv2.resize设置图片大小
        self.img_o = img
        _image = QtGui.QImage(self.img_o[:], self.img_o.shape[1], self.img_o.shape[0], self.img_o.shape[1] * 3,
                              QtGui.QImage.Format_RGB888)  # pyqt5转换成自己能放的图片格式
        jpg_out = QtGui.QPixmap(_image)  # 转换成QPixmap
        self.label_4.setPixmap(jpg_out)  # 设置图片显示

这里利用opecv进行图像的打开。其他类似。
保存文件:

   def save_img(self):
       if self.defect_res == False:
           QMessageBox.warning(self, '警告', '图片为空', QMessageBox.Yes)
           return
       img = self.label_5.pixmap().toImage()
       fpath, ftype = QFileDialog.getSaveFileName(None, "保存图片", "d:/", " *.jpg;; *.png;;All Files(*)")
       img.save(fpath)

(4) 检测算法:
检测时我们只需要训练好的best.pt文件,接着使用defect.py这个检测脚本,当然,直接使用行不通,我们得对原函数进行改造,变成一个可以输入图片,权重pt文件,和保存检测结果的路径图片:

def defect_main(weights, soucre, save_path):
    check_requirements(exclude=('tensorboard', 'thop'))
    run(weights, soucre, save_path)

这样方便直接调用函数。

(5) 打包为exe:

pip install pyinstaller
pyinstaller -F main.py 

报错集锦:

  1. 报错:This application failed to start because no Qt platform plugin could be initialized.
    解决方法:Qt开发,报错:This application failed to start because no Qt platform plugin could be initialized.
  2. 报错:pyinstaller打包提示PermissionError: [Errno 13] Permission denied…\ucrtbase.dll
    解决方法:pyinstaller打包提示PermissionError: [Errno 13] Permission denied…\ucrtbase.dll.
    或者,直接从C:\Windows\System32里面找到ucrtbase.dll,copy到项目文件夹就行。

需要工程代码私信我即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/38441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

26岁月薪从7k到17K,这一切都要从那年失业讲起...

女生,目前在成都做了快4年的测试 先来说说我自己是怎么入行的以及我学到的一些经验分享,希望能帮助到更多的朋友们 我大学学的并不是计算机相关专业,学的市场营销,毕业后大部分同学都去做销售或者商务BD了,奈何自己性…

Redis复习笔记

文章目录Redis一、redis入门1.1、NoSQL的引言1.2、为什么是NoSQL1.3、NoSQL的四大分类1.3.1 键值(Key-Value)存储数据库1.3.2 列存储数据库1.3.3 文档型数据库1.3.4 图形(Graph)数据库1.4 NoSQL应用场景1.5 什么是Redis1.6 Redis特点1.7 Redis 安装二、redis数据库相关指令2.1 …

vue-swiper组件化:解决异步请求数据时swiper过早初始化问题:

最初始的swiper组件封装&#xff1a; <body><div id"box"><swiper></swiper></div><script>Vue.component("swiper", {template: <div class"swiper"><div class"swiper-wrapper">…

PC_磁盘HDD_SSD/存储介质(材料工艺)

文章目录外存磁盘存储器组成磁盘驱动器磁盘控制器盘片platter存储区域磁盘结构磁道track道距位密度扇区sector&#x1f388;/块Block&#x1f386;磁头(Head)圆柱面cylinder磁记录原理磁盘性能指标记录密度磁盘的容量非格式化容量格式化容量数据传输率磁盘转速旋转周期T例平均存…

自学网络安全?一般人我还是劝你算了吧

前言 本人纯屌丝一枚&#xff0c;在学网络安全之前对电脑的认知也就只限于上个网&#xff0c;玩个办公软件。这里不能跑题&#xff0c;我为啥说自学网络安全&#xff0c;一般人我还是劝你算了吧。因为我就是那个一般人。 基础真的很简单&#xff0c;是个人稍微认点真都能懂&a…

SpringBoot 常用配置

SpringBoot的配置文件格式 SpringBoot的配置文件支持properties和yml&#xff0c;甚至他还支持json。 更推荐使用yml文件格式&#xff1a; yml文件&#xff0c;会根据换行和缩进帮助咱们管理配置文件所在位置 yml文件&#xff0c;相比properties更轻量级一些 yml文件的劣势&am…

SpringBoot——自定义start场景启动器

需求分析&#xff1a;为什么要学习场景启动器&#xff1f; SpringBoot要引用外部组件&#xff0c;只需要拿到其场景启动器的依赖&#xff0c;再编写一些配置文件即可。 eg:SpringBoot中要使用redis就需要引入redis的场景启动器依赖 <dependency><groupId>org.spri…

Kafka - 05 Kafka生产者| 消息发送方式 | 序列化器 | 分区器 | 拦截器 |生产者配置参数

文章目录1. Java客户端数据生产流程解析2. 消息发送方式3. 序列化器4. 分区器5. 拦截器6. 发送原理剖析7. Kafka生产者参数配置1. Java客户端数据生产流程解析 首先要构造一个 ProducerRecord 对象&#xff0c;该对象可以声明主题Topic、分区Partition、键 Key以及值 Value&…

刷爆力扣之检查数组对是否可以被 k 整除

刷爆力扣之检查数组对是否可以被 k 整除 HELLO&#xff0c;各位看官大大好啊&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天开始阿呆将会记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标…

CPU调度

目录 1.进程调度 1.1 工作负载简化假设 1.2 调度指标&#xff1a;周转时间 1.3 先进先出&#xff08;FIFO&#xff09; 1.4 最短任务优先&#xff08;SJF&#xff09; 1.5 最短完成时间优先&#xff08;STCF&#xff09; 1.6 新度量指标&#xff1a;响应时间 1.7 轮转 …

【网页设计】基于HTML+CSS+JavaScript制作美食网站舌尖上的美食

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

基于因果化评论的可解释推荐方法

ChineseCSCW2022&#xff08;太原&#xff09;会议&#xff0c;汇报来自复旦大学张光平同学&#xff0c;本篇文章为会议记录&#xff0c;如有侵权&#xff0c;请联系我删除‼️ 目录 1.引言 2.背景 3.模型结构 4.方法论 5.预测和训练 6.实验 1.引言 2.背景 共线关系…

[附源码]SSM计算机毕业设计社区医院管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

记录报错_linux: su root 报错: su: Authentication failure

记录报错_linux: su root 报错&#xff1a; su: Authentication failure初su: Authentication failure关于 su 用法 &#xff1a;常用下图为使用其他用户进行命令 ls 操作下图为变更用户操作&#xff1a;初 希望能写一些简单的教程和案例分享给需要的人 su: Authentication f…

智慧会议解决方案-最新全套文件

智慧会议解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧会议全套最新解决方案合集一、建设背景 从白板到PPT投影演示&#xff0c;现代会议已变得越发生动。随着移动设备和智能终端的出现&#xff0c; 会议实现了由“书纸”向“屏幕”跃迁&#xf…

大学生阅读小说网页设计模板代码 小说书籍网页作业成品 学校书籍网页制作模板 学生简单书籍阅读网站设计成品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

文献解读——基于深度学习的病毒宿主预测

文章目录背景介绍作者介绍文章概述流程数据准备输入数据处理深度神经网络结果背景介绍 人畜共患病病毒对人类和动物的健康产生巨大了威胁&#xff0c;例如近期爆发的寨卡病毒、埃博拉病毒以及冠状病毒。病毒起源的宿主信息对于有效控制和消灭传播是至关重要的&#xff0c;这是…

Linux——【ftp环境搭建】

前言 FTP&#xff08;File Transfer Protocol&#xff09;是文件传输协议&#xff0c;主要是用来进行文件的传输&#xff0c;尤其是大型文件的传输使用 FTP 更是方便。比如在RedHat Enterprise Linux操作系统中&#xff0c;用户可以在RHEL服务器上建立一个FTP服务器&#xff0…

v-model的修饰符

1.lazy修饰符 输入框失去光标跳动&#xff0c;即失焦状态&#xff0c;或者敲击回车时&#xff0c;输入框的值才动态绑定&#xff0c;以此减少过度频繁的绑定 <div id"app"> <!-- 1.lazy--><input type"text" v-model.lazy"message&q…

Node.js 入门教程 12 使用 Node.js 输出到命令行

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程12 使用 Node.js 输出到命令行12.1 使用控制台模块的基础输出12.2 清空控制台12.3 元素计数12.4 打印堆栈踪迹12.5 计算耗时…