深度学习目标检测-钢材缺陷检测系统上位机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
报错集锦:
- 报错: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. - 报错:pyinstaller打包提示PermissionError: [Errno 13] Permission denied…\ucrtbase.dll
解决方法:pyinstaller打包提示PermissionError: [Errno 13] Permission denied…\ucrtbase.dll.
或者,直接从C:\Windows\System32里面找到ucrtbase.dll,copy到项目文件夹就行。
当然,此上位机换成什么检测都可以,只要有训练好的权重文件
需要工程代码私信我即可。