Python詳細介紹模型封裝部署流程

一、桌面應用軟件

桌面應用軟件是基於GUI(Graphical User Interface,圖形用戶界面)交互式程序,需要實現GUI庫實現前端交互。

Python常見的GUI庫

  • TKinter:基於Tk的Python庫,這是Python官方采用的標準庫,優點是作為Python標準庫、穩定、發佈程序較小,缺點是控件相對較少;
  • wxPython:基於wxWidgets的Python庫,優點是控件比較豐富、缺點是穩定性相對差點、文檔少、用戶少;
  • pyQT5,Pyside2:基於Qt的Python庫,優點是控件比較豐富、跨平臺體驗好、文檔完善、用戶多、缺點是庫比較大,發佈出來的程序比較大;
  • Qt Designer:Qt是一個1991年由Qt Company開發的跨平臺C++圖形用戶界面應用程序開發框架;
  • PyQT5:"Riverbank Computing"公司早期的python GUI開發工具庫,是QT與Python的結合,但並非Qt公司出品,屬於“義子”;
  • Pyside2:2018年7月,Qt公推出的工具庫,它提供瞭對Qt5.12+完整框架的訪問,簡單點來說就是在Python下使用Qt,即Qt的“親兒子”;使用上PyQt5與PySide2差別很小,接口調用幾乎一模一樣。

程序打包工具:Pyinstaller

下圖為Python桌面應用軟件開發大體的技術架構。

圖1 軟件技術架構

二、Pyside2&Qt designer

(1)PySide2——控件

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

PySide2的安裝:

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

下面為一個PySide2程序的實現流程:

1.定義一個應用

2.定義主窗口

3.定義需要的控件

4.執行應用,進入事件循環

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

圖2 PySide2實現第一個GUI界面

(2)PySide2——信號(signal)與槽(slot)

用戶對圖形界面的控件操作就會產生信號,程序應能接收識別信號,並進行相應的處理。特點信號的處理函數稱為槽。

按鈕被點擊時,向程序發出信號,程序自動執行btn_slot函數。

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

圖3PySide2實現第二個GUI界面

(3)常用控件

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

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

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

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

(4)Qt Designer

Qt Designer可以通過拖曳的方式完成復雜的界面設計,完成控件設計。Qt Designer生成的UI界面是一個後綴為.ui的文件,其實是一個XML文件。通過使用pyuic5命令將.ui文件轉換成.py文件,然後將.py文件引入到自定義的Python代碼中。主要分為以下四步:

  • 安裝:隨著pyside2安裝時,自動安裝
  • 啟動:Python安裝目錄下Scripts\pyside2-designer.exe
  • 轉換:pyside2-uic xxx.ui > xxx.py
  • 使用:在QMainWindow中初始化xxx.py中的控件,然後定義槽函數

圖4 Qt Designer設計流程

三、模型封裝部署

封裝–面向對象三大特性之一,面向對象(Object Oriented Programming)的三大特性如下:

  • 封裝(Encapsulation):隱藏對象的屬性和實現細節,僅對外提供公共訪問方式;
  • 繼承(Inheritance):使用已存在的類定義作為基礎建立新類的方法;
  • 多態(Polymorphism):“多種狀態”,接口的多種不同的實現方式即為多態;

類的設計三要素:

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

圖5封裝模型的過程

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

四、Pyinstaller

Pyinstaller是一個用來將Python程序打包成一個獨立可執行軟件包,支持Windows、Linux和Mac OS,Pyinstaller可以讀取您編寫的Python腳本。

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

Pyinstaller的安裝:

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

軟件打包執行命令: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

常用參數:

-F,-onefile產生單個的可執行文件

-p,設置python導入模塊的路徑(和設置pythonpath環境變量的作用相似)

–noconsole軟件啟動時不顯示命令窗

五、總結

到此這篇關於Python詳細介紹模型封裝部署流程的文章就介紹到這瞭,更多相關Python模型封裝內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: