欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python詳細(xì)介紹模型封裝部署流程

 更新時(shí)間:2022年08月17日 11:25:18   作者:IntelligentRS  
本文實(shí)例講述了Python模型封裝部署的原理與實(shí)現(xiàn)方法。封裝即是隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問(wèn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、桌面應(yīng)用軟件

桌面應(yīng)用軟件是基于GUI(Graphical User Interface,圖形用戶界面)交互式程序,需要實(shí)現(xiàn)GUI庫(kù)實(shí)現(xiàn)前端交互。

Python常見(jiàn)的GUI庫(kù)

  • TKinter:基于Tk的Python庫(kù),這是Python官方采用的標(biāo)準(zhǔn)庫(kù),優(yōu)點(diǎn)是作為Python標(biāo)準(zhǔn)庫(kù)、穩(wěn)定、發(fā)布程序較小,缺點(diǎn)是控件相對(duì)較少;
  • wxPython:基于wxWidgets的Python庫(kù),優(yōu)點(diǎn)是控件比較豐富、缺點(diǎn)是穩(wěn)定性相對(duì)差點(diǎn)、文檔少、用戶少;
  • pyQT5,Pyside2:基于Qt的Python庫(kù),優(yōu)點(diǎn)是控件比較豐富、跨平臺(tái)體驗(yàn)好、文檔完善、用戶多、缺點(diǎn)是庫(kù)比較大,發(fā)布出來(lái)的程序比較大;
  • Qt Designer:Qt是一個(gè)1991年由Qt Company開(kāi)發(fā)的跨平臺(tái)C++圖形用戶界面應(yīng)用程序開(kāi)發(fā)框架;
  • PyQT5:"Riverbank Computing"公司早期的python GUI開(kāi)發(fā)工具庫(kù),是QT與Python的結(jié)合,但并非Qt公司出品,屬于“義子”;
  • Pyside2:2018年7月,Qt公推出的工具庫(kù),它提供了對(duì)Qt5.12+完整框架的訪問(wèn),簡(jiǎn)單點(diǎn)來(lái)說(shuō)就是在Python下使用Qt,即Qt的“親兒子”;使用上PyQt5與PySide2差別很小,接口調(diào)用幾乎一模一樣。

程序打包工具:Pyinstaller

下圖為Python桌面應(yīng)用軟件開(kāi)發(fā)大體的技術(shù)架構(gòu)。

圖1 軟件技術(shù)架構(gòu)

二、Pyside2&Qt designer

(1)PySide2——控件

圖形界面的工具基礎(chǔ):控件(widget)、信號(hào)(signal)與槽(solt),控件表示前端界面可顯示/操作/交互的元素,如按鈕、輸入控件、展示控件等,供用戶點(diǎn)擊、接受用戶輸入、展示內(nèi)容、存放其它控件。

PySide2的安裝:

pip install PySide2 -i https://pypi.tuna.tsinghua.edu.cn/simple/

下面為一個(gè)PySide2程序的實(shí)現(xiàn)流程:

1.定義一個(gè)應(yīng)用

2.定義主窗口

3.定義需要的控件

4.執(zhí)行應(yīng)用,進(jìn)入事件循環(huán)

# -*- coding: utf-8 -*-
"""
# @file name  : 01_helloworld.py
# @brief      : 使用pyside編寫第一個(gè)軟件
"""
from PySide2.QtWidgets import QApplication, QMainWindow, QTextBrowser, QLabel
if __name__ == "__main__":
    app = QApplication([])  # UI應(yīng)用程序管理應(yīng)用
    # ================================================
    # 1. 定義主窗口
    window = QMainWindow()
    # 2. 定義文本框顯示
    label = QLabel(window)
    label.setText("Hello World!")
    # 3. 窗口顯示
    window.show()
    # ================================================
    app.exec_()  # 進(jìn)入QApplication的事件處理循環(huán)

圖2 PySide2實(shí)現(xiàn)第一個(gè)GUI界面

(2)PySide2——信號(hào)(signal)與槽(slot)

用戶對(duì)圖形界面的控件操作就會(huì)產(chǎn)生信號(hào),程序應(yīng)能接收識(shí)別信號(hào),并進(jìn)行相應(yīng)的處理。特點(diǎn)信號(hào)的處理函數(shù)稱為槽。

按鈕被點(diǎn)擊時(shí),向程序發(fā)出信號(hào),程序自動(dòng)執(zhí)行btn_slot函數(shù)。

# -*- coding: utf-8 -*-
"""
# @file name  : 02_signal&slot.py
# @brief      : 了解信號(hào)與槽
"""
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit
if __name__ == "__main__":
    app = QApplication([])  # UI應(yīng)用程序管理應(yīng)用
    # ================================================
    # first. 定義主窗口
    window = QMainWindow()
    window.resize(500, 400)
    window.move(300, 310)
    # 2. 定義按鈕控件
    def btn_slot():
        print("用戶點(diǎn)擊了按鈕,將執(zhí)行xxx")
    btn = QPushButton("我的按鈕", window)
    btn.clicked.connect(btn_slot)
    # 3. 單行文本框
    def text_slot():
        text = text_edit.text()
        print("檢測(cè)到文本框變動(dòng),當(dāng)前文本框信息為:{}".format(text))
    text_edit = QLineEdit(window)
    text_edit.move(100, 0)
    text_edit.setPlaceholderText('請(qǐng)輸入信息...')
    text_edit.textChanged.connect(text_slot)
    # 窗口顯示
    window.show()
    # ================================================
    app.exec_()  # 進(jìn)入QApplication的事件處理循環(huán)

圖3PySide2實(shí)現(xiàn)第二個(gè)GUI界面

(3)常用控件

1.按鈕:btn = QPushButton(“我的按鈕”,window)

2.單行文本框:text_edit = LineEdit(window)

3.標(biāo)簽顯示:label = QLabel(window)

4.文件選擇:path_file,filetype = QFileDialog.getOpenFileName(window,"選取文件","./","All File(*);;Text Files(*.jpg)")

(4)Qt Designer

Qt Designer可以通過(guò)拖曳的方式完成復(fù)雜的界面設(shè)計(jì),完成控件設(shè)計(jì)。Qt Designer生成的UI界面是一個(gè)后綴為.ui的文件,其實(shí)是一個(gè)XML文件。通過(guò)使用pyuic5命令將.ui文件轉(zhuǎn)換成.py文件,然后將.py文件引入到自定義的Python代碼中。主要分為以下四步:

  • 安裝:隨著pyside2安裝時(shí),自動(dòng)安裝
  • 啟動(dòng):Python安裝目錄下Scripts\pyside2-designer.exe
  • 轉(zhuǎn)換:pyside2-uic xxx.ui > xxx.py
  • 使用:在QMainWindow中初始化xxx.py中的控件,然后定義槽函數(shù)

圖4 Qt Designer設(shè)計(jì)流程

三、模型封裝部署

封裝--面向?qū)ο笕筇匦灾唬嫦驅(qū)ο螅∣bject Oriented Programming)的三大特性如下:

  • 封裝(Encapsulation):隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問(wèn)方式;
  • 繼承(Inheritance):使用已存在的類定義作為基礎(chǔ)建立新類的方法;
  • 多態(tài)(Polymorphism):“多種狀態(tài)”,接口的多種不同的實(shí)現(xiàn)方式即為多態(tài);

類的設(shè)計(jì)三要素:

  • 類名:這類事物的名字;
  • 屬性:這類事物具有什么樣的特征;
  • 方法:這類事物具有什么樣的行為;

圖5封裝模型的過(guò)程

  • 類名:Predictor;
  • 屬性:model,path_ckpt,device,transform;
  • 方法:preprocess,inference,get_model,get_transform;

四、Pyinstaller

Pyinstaller是一個(gè)用來(lái)將Python程序打包成一個(gè)獨(dú)立可執(zhí)行軟件包,支持Windows、Linux和Mac OS,Pyinstaller可以讀取您編寫的Python腳本。

Pyinstaller分析代碼執(zhí)行所需的所有模塊,然后將這些文件的副本和Python解釋器一起放在單個(gè)文件夾中,或者在單個(gè)可執(zhí)行文件中。

Pyinstaller的安裝:

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/

軟件打包執(zhí)行命令:pyinstaller xxx.py,完成后到root/dist/xxx下,找到xxx.exe

pyinstaller main.py --noconsole -F -p D:\course_study\CV_Item\self\img_cls

更新spec文件命令:

pyinstaller -F --onefile main.spec

常用參數(shù):

-F,-onefile產(chǎn)生單個(gè)的可執(zhí)行文件

-p,設(shè)置python導(dǎo)入模塊的路徑(和設(shè)置pythonpath環(huán)境變量的作用相似)

--noconsole軟件啟動(dòng)時(shí)不顯示命令窗

五、總結(jié)

到此這篇關(guān)于Python詳細(xì)介紹模型封裝部署流程的文章就介紹到這了,更多相關(guān)Python模型封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論