Bootstrap

深度学习目标检测-钢材缺陷检测系统上位机ui和web界面

深度学习目标检测-钢材缺陷检测系统上位机ui和web界面

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

上位机ui界面效果

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

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

实现步骤:

(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到项目文件夹就行。

当然,此上位机换成什么检测都可以,只要有训练好的权重文件

web界面效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

需要工程代码,定制界面,或者优化界面的可私信我即可。

;