龙空技术网

136.人工智能——PySide6:可视化窗口实现图像分类预测

UNET 1229

前言:

现在朋友们对“img怎么设置图片的自适应”大致比较重视,兄弟们都需要剖析一些“img怎么设置图片的自适应”的相关内容。那么小编同时在网络上汇集了一些有关“img怎么设置图片的自适应””的相关知识,希望朋友们能喜欢,小伙伴们快快来学习一下吧!

可以不用再担心PyQt的版权问题,因为PySide来了,完全可以代替PyQt,PySide6的安装和测试可以参看:132.Python——PySide6:安装和VSCode中配置及使用。

本文主要继续使用测试一下PySide6,看看PySide6与PyQt5的在实际应用中有什么不同。

在前一文中,有讲过如何使用分类模型实现图像分类预测,可以参看:116.人工智能——基于Paddle的部署模型推理。

本文主要就是把图像分类模型预测,用PySide6做个可视化客户端,来体验一下PySide6。

先看一下运行效果

一、界面设计

主窗口界面上下两部分,上部分使用一个ListView和Label,用来列出图像文件和显示预测结果,下部分使用一个文本框,用来显示文本信息。子窗口仅一个Label,用来显示原图像。

主窗口和子窗口

二、业务代码

import sysfrom PySide6 import QtCore, QtGui, QtWidgetsfrom Ui_clsinfer import Ui_MainWindowfrom Ui_child import Ui_ChildrenWindowimport paddle_cls_infer as pdclsimport osclass MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):    def __init__(self):        super().__init__()        self.setupUi(self)                #子窗口用来显示原图像        self.child=ChildrenWindow()                #设置图片控件的单击事件        self.lstimg.clicked.connect(self.on_lstimg_clicked)                self.imgname=""        lstimgpath=["选择文件夹"] #图片列表        curdir=os.path.abspath(os.path.dirname(__file__))        #列出当前目录下的所有图片        for root,dir,files in os.walk(curdir):            for file in files:                if file.endswith(".jpg") or file.endswith(".png"):                    lstimgpath.append(os.path.join(root,file))                #设置lstimg,lblimg的宽度和高度        self.lblimg.setAlignment(QtCore.Qt.AlignCenter) #设置lblimg的对齐方式        self.lstimg.setFixedSize(self.width()//3,self.height()-self.txtmsg.height())        self.lblimg.setFixedSize(self.width()-self.lstimg.width(),self.height()-self.txtmsg.height())        #设置txtmsg字体大小        self.txtmsg.setFontPointSize(14)                #设置图片列表        self.lstimg.setModel(QtCore.QStringListModel(lstimgpath))                #图片列表单击事件    def on_lstimg_clicked(self,index):        #获取选中的图片路径        self.imgname=self.lstimg.model().stringList()[index.row()]        if self.imgname=="选择文件夹":            dirname=QtWidgets.QFileDialog.getExistingDirectory(self,"选择文件夹",".")            lstimgpath=["选择文件夹"] #图片列表            for root,dir,files in os.walk(dirname):                for file in files:                    if file.endswith(".jpg") or file.endswith(".png"):                        lstimgpath.append(os.path.join(root,file))                                    #获取选中的图片路径,放入图片列表            self.lstimg.setModel(QtCore.QStringListModel(lstimgpath))        else:            #获取图像的宽高            img=QtGui.QImage(self.imgname)            h,w,c=img.height(),img.width(),img.format()                        #设置图像大小自适应控件大小            self.lblimg.setPixmap(QtGui.QPixmap.fromImage(img).scaled(self.lblimg.width(),self.lblimg.height(),QtCore.Qt.KeepAspectRatio))            #设置图像填充控件大小            #self.lblimg.setScaledContents(True)            #显示图像路径            self.statusBar().showMessage(self.imgname)            self.txtmsg.setText(self.imgname)                        #预测图像,返回预测结果            classid,classname,img0=pdcls.predict(self.imgname)            self.txtmsg.setText("预测结果:"+classname)                        #bgr图像转QImage,显示图像            qimg=QtGui.QImage(img0.data,w,h,w*3,QtGui.QImage.Format_BGR888)            self.lblimg.setPixmap(QtGui.QPixmap.fromImage(qimg).scaled(self.lblimg.width(),self.lblimg.height(),QtCore.Qt.KeepAspectRatio))                        #显示子窗口,显示原图像            self.child.setWindowTitle("原图像")            self.child.show()             self.child.lblimg.setPixmap(QtGui.QPixmap.fromImage(img).scaled(self.child.lblimg.width(),self.child.lblimg.height(),QtCore.Qt.KeepAspectRatio))            #子窗口用来显示原图像            class ChildrenWindow(QtWidgets.QMainWindow,Ui_ChildrenWindow):    def __init__(self):        super().__init__()        self.setupUi(self)        self.lblimg.setAlignment(QtCore.Qt.AlignCenter)        self.lblimg.setFixedSize(self.width(),self.height()-self.statusBar().height())                if __name__ == '__main__':    app=QtWidgets.QApplication(sys.argv)    mywin=MainWindow()    mywin.setWindowTitle('Class Inference')    mywin.show()    sys.exit(app.exec())   
三、运行结果

从体验来看,PySide6完全兼容原来的PyQt5(一直在使用版本),所以用PySide6来取代PyQt5或PyQt6,完全是没有问题。

标签: #img怎么设置图片的自适应