• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Python在電氣設備智能檢測系統原型實現中的應用

      2021-12-17 00:26:39劉傳忠
      電腦知識與技術 2021年33期

      劉傳忠

      摘要:基于人機協同的電氣設備智能檢測系統,是一個相對比較復雜的系統,為了能夠快速驗證在系統研發(fā)中關鍵技術的可行性,采用語法優(yōu)雅功能強大的Python編程語言進行了原型驗證。探討了Python語言在后端接口實現、數據庫中的數據存取、系統與設備即時通信,后臺定時服務和與算法文件進行信息交互等方面的應用。實踐證明采用Python開發(fā)語言,能夠快速地開發(fā)原型系統,滿足研發(fā)的需要。

      關鍵詞:Python;后端接口;設備通信;算法文件交互;原型驗證

      中圖分類號:TP312? ? ? 文獻標識碼:A

      文章編號:1009-3044(2021)33-0017-03

      開放科學(資源服務)標識碼(OSID):

      Application of Python in Prototype Implementation of Intelligent Detection System for Electrical Equipment

      LIU Chuan-zhong1,2,3

      (1.Shanghai Electrical Apparatus Research Institute (Group) Co.,Ltd., Shanghai 200063, China; 2.Shanghai Key Laboratory of Smart Grid Demand Response, Shanghai 200063, China; 3.Research and Development (Experiment) Center of Electrical Equipment for National Energy Smart Grid User Side, Shanghai 200063, China)

      Abstract: The intelligent detection system of electrical equipment based on man-machine cooperation is a relatively complex system. In order to quickly verify the feasibility of key technologies in system development, the prototype verification is carried out by using Python which has elegant syntax and powerful function. This paper discusses the application of Python in the implementation of back-end interface, data access in database, instant communication between system and equipment, background scheduler service and information interaction with algorithm files. Practice has proved that using Python can quickly develop the prototype system and meet the needs of research and development.

      Key words: Python; back-end interface; instant communication; interaction with algorithm files; prototype verification

      1 背景

      隨著IT信息、物聯網、云計算等技術的快速發(fā)展和中國制造2025制造強國戰(zhàn)略的全面推進,用戶端電氣設備的應用與日俱增,相應的產品質量和使用安全問題也不容忽視。目前用戶端電氣設備生產制造環(huán)節(jié)的檢驗手段和工具的智能化在我國仍處于相對初級階段,不能完全滿足產業(yè)快速發(fā)展的需要。將機器學習、機器視覺、云計算、物聯網等技術應用于用戶端電器設備檢測系統,解決產品檢測環(huán)節(jié)生產效率較低、質量無法嚴格保證的問題勢在必行。為了快速構建智能電氣設備檢測系統,驗證相關技術的可行性,本課題選用有語法優(yōu)雅、功能強大的Python作為主要編程語言進行原型開發(fā)驗證。

      2 原型系統

      如圖1所示,電氣設備智能檢測原型系統由視覺檢測器、算法訓練服務器和Web服務器(包含數據庫)三部分組成。

      視覺檢測器由攝像頭、觸摸屏和人機控制界面組成,一般部署于產品檢測生產線,當待檢測的產品通過檢測器攝像頭所對應的工位時,檢測器利用在訓練服務器上訓練好的算法對攝像頭按一定的規(guī)則所拍攝的產品圖片進行智能判定。

      訓練服務器采用Ubuntu 20.04系統,由訓練集、算法庫、模型庫、后臺服務和接口服務組成,主要用來對算法進行訓練。訓練服務器搭建Samba服務器[1],允許視覺檢測器進行磁盤映射,進行算法文件的獲取或照片檢測結果的上傳等。訓練集的圖片及標注信息由視覺檢測器定時上傳得到。算法庫由專門的算法工程師開發(fā)調試后部署,可在本地直接啟動,也可以在Web頁面上操作通過接口服務進行啟動。模型庫存放算法訓練成功后的模型文件,同時相關信息會被更新到MySQL數據庫中。后臺服務會定時獲取訓練服務器的CPU和內存使用情況,并將相關信息更新到MySQL數據庫中。接口服務提供啟動算法訓練的Web API接口,供Web服務器上的前端頁面進行調用。

      在原型系統中,Web服務器采用Windows 10專業(yè)版,由MySQL數據庫、MQTT代理服務器、后臺服務、Web API接口服務和前端頁面組成,主要用來提供人機交互界面對視覺檢測器、訓練集、算法、模型等信息進行管理。MySQL數據庫采用社區(qū)版8.0.19,主要用來存儲用戶角色權限信息、檢測器信息、算法信息、模型訓練信息和系統參數等。MQTT代理服務器我們采用開源消息代理軟件Mosquitto 2.0.0以服務的方式在后臺運行,開啟了密碼驗證和日志功能,可在mosquitto.conf配置文件中進行修改配置,它支持可發(fā)布/可訂閱的消息推送模式,視覺檢測器和后臺服務均可以作為客戶端發(fā)布/訂閱相關的主題進行實時信息交互。后臺服務程序常駐內存,通過訂閱相關的主題,實現對視覺檢測器狀態(tài)匯報數據的實時偵聽并及時將狀態(tài)信息保存到數據庫供前端界面讀取顯示。人機交互功能通過前后端分離的方式進行開發(fā),前端頁面采用阿里開源的基于React的前端開發(fā)腳手架Ant Design Pro[2],后端接口采用基于微型的 Python web開發(fā)框架Flask。

      3 Python應用

      3.1 Python簡介

      Python 是一種易于學習使用又功能強大的開源免費跨平臺的編程語言,它提供了高效的高級數據結構,還支持簡單有效的面向對象編程。優(yōu)雅的語法,動態(tài)類型,交互式的開發(fā)環(huán)境,以及解釋型語言的本質,使得它成為多數平臺上寫腳本和快速開發(fā)應用的理想語言[3],目前Python已被廣泛應用自動化測試與運維、網絡爬蟲、數據分析與可視化等領域。

      Python具有自動內存管理,支持多種基本數據類型和數據結構,支持面向對象編程和異常捕捉,它提供了強大的標準庫且支持擴展,有很多第三方的模塊(modules)/包(packages)可以使用,如在科學計算中常用到的[4]數值計算擴展包NumPy(Numeric Python),數據符號計算庫SymPy(Symbolic mathematics with Python),面向對象的繪圖庫Matplotlib,以及本課題中用到的微型的Web 框架-Flask,消息隊列遙測傳輸(MQTT)的Python客戶端paho-mqtt,任務調度工具APScheduler等。

      簡單來說Python安裝后,運行和開發(fā)基本可以分為三種方式:交互式解釋器、命令行腳本和集成開發(fā)環(huán)境。為了方便和靈活,本課題采用Anaconda安裝Python開發(fā)環(huán)境,以VSCode作為集成開發(fā)環(huán)境[5]。

      3.2 后端接口與數據存取

      在本課題中,Web API后臺接口部分我們采用開源的輕量級Web應用程序框架-Flask,它實現的核心簡單且具有良好的擴展性,既可以開發(fā)MVC網絡程序,也可以提供具有Restful風格的Web API。雖然該框架沒有提供對ORM(Object Ralational Mapping,對象關系映射)的支持把對象模型表示的對象映射到基于SQL的關系模型數據庫結構中去,但我們可以采用Flask擴展Flask-SQLAlchemy實現對Mysql數據庫的增刪改查操作[6]。

      在使用框架的過程中,可以使用route()裝飾器來把函數綁定到URL,通過把 URL的一部分標記為就可以在URL中添加變量,使用route()裝飾器的methods參數來處理不同的HTTP方法。如下面的代碼

      @app.route('/api/v1.0/products/', methods=['GET'])

      def getProductEntityById(pid):

      表示函數getProductEntityById支持HTTP的GET方法,可以使用的參數為int型,變量名稱為pid,當客戶端請求http://192.168.11.124:6688/api/v1.0/2時會調用函數getProductEntityById(2),在此處假定接口服務器所在的IP地址為192.168.11.124,Flask應用運行時使用的端口為6688。

      3.3 即時通信

      在本課題中,為了使視覺檢測器和后臺服務保持實時通信,采用了構建于TCP/IP協議之上基于發(fā)布/訂閱(publish/subscribe)模式的“輕量級”通訊協議-MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議)協議[7]。在通訊過程中,MQTT協議中有三種身份:發(fā)布者(Publish)、代理(Broker)(服務器)、訂閱者(Subscribe)。其中,消息的發(fā)布者和訂閱者都是客戶端,消息代理是服務器,消息發(fā)布者可以同時是訂閱者。

      視覺檢測器和訓練服務器軟件均作為Client,經過MQTT Broker代理服務器通過主題(Topic)發(fā)布或訂閱的方式進行發(fā)送數據或接收數據。在本項目中我們設計了由Web后臺服務發(fā)起視覺檢測器訂閱和由視覺檢測器發(fā)起Web后臺服務訂閱的兩類共6個主題,分別是檢測器狀態(tài)查詢(TrainMachine2Detector/DetectorStatus/Inq)、配置檢測器參數(TrainMachine2Detector/DetectorPara/Set)、讀取檢測器參數(TrainMachine2Detector/DetectorPara/Get)和注冊通知(Detector2TrainMachine/RegDetectorinfor/Notify)、檢測器狀態(tài)上報(Detector2TrainMachine/DetectorStatus/Resp)、檢測器參數上傳(Detector2TrainMachine/DetectorPara/Resp)。報文傳輸的主要內容定義在有效載荷(payload)中,如讀取檢測器參數時需要知道是要查詢哪個視覺檢測器,我們定義的其有效載荷采用JSON格式,其示例為:{"ClientID": "DEV-HA202012-0001"}。

      在本課題中我們使用paho-mqtt編寫設計MQTT客戶端,它是Eclipse基金會開源項目paho的Python MQTT客戶端庫,實現了物聯網MQTT協議的 5.0和3.1。該包提供了全功能的客戶端(Client)模塊和簡化版的消息(publishing)模塊,方便我們連接MQTT代理服務器,實現對主題的發(fā)布和訂閱[8]。下面的代碼展示了我們通過用戶名和密碼登錄MQTT代理服務器,并為連接、收到消息、訂閱、連接斷開等事件指定了回掉函數,我們可以在回掉函數中針對相關信息進行處理,如收到訂閱的主題后將相關內容進行解析并存儲數據庫中。

      try:

      client = mqtt.Client(ClientID)

      client.username_pw_set(ClientUser, ClientPwd)

      client.on_connect = on_connect

      client.on_message = on_message

      client.on_subscribe = on_subscribe

      client.on_disconnect = on_disconnect

      client.connect(MqttBroker, Mqttport, 60)

      client.loop_forever()

      except Exception as e:

      print(e)

      3.4 定時服務

      在本課題中,需要在后臺定時查詢訓練服務器的CPU和內存使用情況、磁盤剩余空間等,我們采用了Python第三方庫APScheduler來實現該功能。APscheduler全稱Advanced Python Scheduler,作用為在指定的時間規(guī)則執(zhí)行指定的作業(yè)。指定時間規(guī)則的方式可以是間隔多久執(zhí)行,可以是指定延遲一定日期時間的單次執(zhí)行,也可以類似Linux系統中Cron風格方式執(zhí)行任務[9]。如下的代碼展示了我們封裝了一個啟動后臺任務的函數,該后臺任務為一個。

      def StartBackgroundService():

      print("StartBackgroundService")

      scheduler = BlockingScheduler()

      scheduler.add_job(JobShowHardDiskInf, trigger='interval', minutes=1, id='JobShowHardDiskInfId1')

      scheduler.start()

      print("StartBackgroundService OK")

      阻塞式的獨占式后臺任務,每隔1分鐘觸發(fā)1次,執(zhí)行的任務為JobShowHardDiskInf(該函數執(zhí)行查詢磁盤信息并將相關信息更新到數據庫對應的表中,限于篇幅,此處未予展示)。

      3.5 算法交互

      在本課題中,由于算法文件是由算法工程師編寫的,跟Web展示交互實施團隊分屬不同的項目,人機交互模塊與算法文件之間的信息交互是一個需要解決的問題。由于算法文件也是由Python實現的,人機交互模塊通過python的subprocess 模塊的Popen() 方法來調用算法文件,如subprocess.Popen(mycmd, shell=True),其中mycmd由函數getStartTrainingCmdStr根據相關信息拼接字符串而成,參數拼接函數的實現如下:

      def getStartTrainingCmdStr(mtid,product,algfile,epochs,batchsize):

      strCmd = "python "

      strCmd += algfile

      strCmd += " --mtprogressid '"

      strCmd += mtid

      strCmd += "' --productmodel '"

      strCmd += product

      strCmd +="' --epochs "

      strCmd += str(epochs)

      strCmd += " --batch-size "

      strCmd += str(batchsize)

      print(strCmd)

      return strCmd

      對于訓練模型ID為“MTDemo20210808”,產品型號名稱為“DemoProductModel”,算法文件為“train.py”,epochs為400,batchsize為4的啟動訓練的參數串mycmd為“python train.py --meprogressid ‘MTDemo20210808 --productmodel ‘DemoProductModel --epochs 400 --batch-size 4”。在算法文件中,通過argparse可以對命令行傳入的參數進行解析,如下面的代碼:

      if __name__ == '__main__':

      parser = argparse.ArgumentParser()

      parser.add_argument('--productmodel', type=str, default='motor1', help='id')

      可以從輸入的參數中提取到剛才傳入的產品模型信息為“DemoProductModel”,從而實現了算法調用方向算法文件傳入的相關信息。至于算法文件向人機交互模塊輸出相關信息,則可以將相關的信息按需插入或更新數據庫中的相關記錄即可,此處不再贅述。

      4 結束語

      本課題采用前端界面Ant Design Pro腳手架,后端采用Python的Flask框架及MQTT客戶端paho-mqtt,任務調度工具APScheduler等第三方軟件包及Python自帶的subprocess模塊等,實現了后端接口與數據存儲、視覺檢測器與Web人機交互界面實時通信,后臺定時服務和算法交互等技術驗證,實現了對視覺檢測器的注冊信息、狀態(tài)信息和配置信息的管理;對訓練集、算法模型的啟動與信息管理等功能。圖2所示為視覺檢測器的注冊信息管理頁面,該頁面前端定時刷新讀取數據庫的相關信息,當有新的視覺檢測器注冊進來的時候,在該頁面列表中能夠自動添加新注冊的視覺檢測器的相關信息。

      實踐證明,開源且功能強大的Python能夠實現電氣設備智能檢測系統原型的搭建與相關技術驗證。本課題的研究為從事相關工作的同行提供一定的參考價值。

      參考文獻:

      [1] 趙大偉,陳剛.Linux環(huán)境下Samba服務器的企業(yè)級應用[J].電腦知識與技術,2017,13(32):50-52.

      [2] 呂晨.基于機器學習的流量分類平臺的研究與實現[D].西安:西安電子科技大學,2020.

      [3]Python軟件基金會.Python教程[EB/OL].[2020-12-20].https://docs.python.org/zh-cn/3/tutorial/index.html.

      [4] 姚建盛,李淑梅.Python在科學計算中的應用[J].數字技術與應用,2016(11):76.

      [5] 李天輝.基于python的數據分析可視化研究與實現[J].電子測試,2020(20):78-79.

      [6] 吳桐.基于Flask框架的物資管理系統的設計與實現[D].南京:南京大學,2016.

      [7] 林滸,張家銘,楊海波.基于MQTT協議的即時消息業(yè)務設計與實現[J].計算機系統應用,2017,26(3):219-224.

      [8] Python軟件基金會.項目描述[EB/OL]. [2020-12-20].https://pypi.org/project/paho-mqtt/#description.

      [9] 李丹.自動化測試在線管理系統的設計與實現[D].成都:西南交通大學,2017.

      【通聯編輯:謝媛媛】

      鲜城| 顺义区| 石棉县| 乾安县| 龙江县| 博罗县| 光山县| 西宁市| 洮南市| 黄平县| 柞水县| 龙游县| 华坪县| 南昌县| 扎囊县| 宝山区| 泰安市| 军事| 永兴县| 玉树县| 威远县| 古蔺县| 攀枝花市| 莱州市| 杨浦区| 富民县| 松溪县| 乌拉特前旗| 台安县| 台北县| 三门峡市| SHOW| 松溪县| 龙海市| 平度市| 隆尧县| 黄龙县| 涿鹿县| 合江县| 乡宁县| 凌海市|