王文博
(南京理工大學 泰州科技學院,江蘇 泰州 225300)
機器視覺屬于人工智能領域的前沿技術,它模擬了人的感知功能,通過傳感器以及處理器來代替人眼的觀察和人腦的判斷,廣泛應用于工業、軍事、航空航天、醫療等領域。而傳統意義上的機器視覺系統大多采用集數據采集、分析處理、控制執行功能于一體的設計模式,通過攝像頭獲取目標圖像、視頻信息,經過計算機處理后得到被測物體的形狀、大小、顏色、位置信息等,以控制執行設備的動作。因此該系統需要處理的視頻信號數據量龐大,必須用高性能計算機來提升處理能力,并疊加其他功能部件,導致機器視覺系統的整體體積和重量都比較大,不夠靈活,移動穩定性差,機器功耗較大,電池續航時間也相對偏短,使用場合也受到較大的限制。為此結合當今云計算思路,有必要設計一種終端小型化機器視覺系統。
終端小型化機器視覺系統設計是將一體化的機器視覺系統拆分成三個部分,將原先負責數據分析處理的部分交由遠程計算機完成,把數據采集和控制執行部分交由終端處理,網絡通訊部分作為遠程計算機和終端數據交流的橋梁。
終端小型化機器視覺系統由上位機(遠程計算機)、下位機(小型化終端)以及網絡通訊三個部分組成(見圖1)。

圖1 系統組成
獨立出來的上位機完成數據處理工作,具體分為硬件和軟件兩部分進行設計。
2.1.1 硬件設計
機器視覺系統要對大量的圖片和視頻進行處理。處理時,圖片就是一個多維數組,視覺算法就是對一個龐大的多維數組各元素之間的關系進行處理,視頻可以看作無數圖片的疊加,因此需要消耗更加龐大的內存資源和計算資源;為此只有使用高性能計算機才能擔當此任。
高性能計算機配置上必須滿足下列要求:
(1)具有Ryzen 1700及以上處理器;
(2)16GB及以上的內存;
(3)一塊或者多塊GTX1080及以上顯卡;
(4)良好的散熱系統。
2.2.2 軟件設計
上位機軟件由兩個程序組成,一個實現數據處理,另一個實現上、下位機間的數據交換。兩程序在內部相互協調,并與外部進行通訊。
數據處理程序部分(見圖2)是利用python通過opencv3.0以及Tensorflow object detection api庫開發的。

圖2 數據處理程序
python3.5.2作為高層語言,將OPENCV3.0和Tensorflow object detection api結合,對視頻中常見的物體進行識別,為此在上位機上要預先安裝好opencv-python、CUDA、CUDNN環境。
在python3.5.2下使用VideoCapTrue類對遠程嵌入式終端平臺回傳的視頻進行讀取,將每一幀拆解成圖片,再進行預處理,作為Tensor輸入給Tensorflow object detection api,將返回的圖片顯示到窗口上,不斷的處理每一幀圖像,構成實時識別的視頻,將識別到的物體的各種信息格式化后寫入DAT文件,供人機交互界面讀取并將執行指令并返回下位機。
上、下位機間的數據交換通過一個人機交互界面(見圖3)完成,該程序在上位機上利用Microsoft VisualStudio通過WindowsForm平臺開發的窗體應用程序,程序代碼基于C#語言,實現上位機對下位機的控制。

圖3 人機交互界面
人機交互界面可以根據需求設置相應的手動控制按鈕,以方便對下位機設備的直接控制,也可以自動讀取視覺處理軟件生成的DAT文件,獲取邏輯信息,并自動對下位機需要執行的任務進行調度控制。軟件通訊(見圖4)時首先通過調用系統API開啟套接字監聽服務,然后根據客戶端的IP以及端口號進行連接,每檢測到一個新的連接建立一個新的線程繼續監聽,原有線程與客戶端保持連接。數據交換時使用Encoding.UTF8.GetBytes()方法對其進行編碼,下位機下線時關閉本地套接字節約上位機資源。
分離出來的下位機主要完成數據采集和控制執行功能,實現視頻的上傳和對GPIO的控制。這是實現機器視覺終端小型化的重點內容。
2.2.1 硬件設計
下位機在整個系統中屬于輸入/輸出端,此部分只需要完成數據的上傳(較大數據吞吐量)、邏輯數據的接收和GPIO口的控制,不需要完成數據的邏輯分析,因此本系統選用AR9331作為下位機。此芯片擁有的400 Mhz CPU,64MB DDR2 RAM和8MB ROM內存,可以很好地運行OPENWRT系統及其上的TCP通訊、GPIO控制軟件;150 Mbps的WIFI最高傳輸速度也可以很好地完成數據的傳輸和邏輯信息的接收,具有小體積、低功耗的特點。

圖4 通訊過程
2.2.2 軟件設計
在AR9331芯片上燒寫OPENWRT系統,使用UVC(USB Video Class)免驅動攝像頭與之連接,安裝mjpeg streamer工具并在SHELL下執行如下命令:mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 640X480 -f 30" -o "output_http.so -p 8082 -w /www/camwww"。完成了攝像頭的設置,上位機就可以通過下位機的IP地址和端口號接收到回傳的視頻了。使用C++編寫帶有GPIO控制的TCP客戶端軟件并使用GCC編譯,編譯完成后運行即建立完成上下位機之間的TCP連接,通過上位機IP地址和程序設置的端口號,下位機可以接收上位機返回的數據,并對此做出響應,通過GPIO控制外圍設備。為了方便使用,可以設置mjpeg streamer工具以及TCP客戶端開機啟動,至此下位機軟件編寫完成。
網絡通訊是上下位機之間數據交換的橋梁,其性能的穩定、可靠是此系統能否正常工作的關鍵。
2.3.1 硬件設計
整個系統由分體式硬件組成,上、下位機之間通過WIFI進行數據交換,下位機發送實時數據到上位機,上位機發送實時分析出的邏輯數據到下位機,所以對網絡的穩定性、傳輸速率具有較高的要求。由于本系統需要實現遠距離的遠程通訊,所以要求上位機以及下位機同時至少具有雙向10 Mbps以上帶寬、100 ms以下延遲、0%丟包率的公網IP環境。
2.3.2 軟件設計
由于上、下位機的分體式結構設計,因此上、下位機的數據交流要通過TCP協議來實現(見圖5), 網絡部分的設置就顯得尤為重要。上位機部分需要使用運營商提供的固定IP地址,并且確保80端口的暢通。下位機部分同樣需要使用運營商提供的固定IP地址,并且確保8081、8082兩個端口的暢通,以實現視頻數據到上位機的傳輸、上位機邏輯數據到下位機的傳輸。若上、下位機端不能同時處于一個局域網內部,就需要在路由器上設置端口映射,將內網的上位機(下位機)以相同的端口號映射到外網以備下位機(上位機)訪問。
為了測試該視覺系統終端小型化的功能,選取了一臺家庭服務機器人進行改造。改造后的機器人采用此終端小型化設計,將原來高性能計算機與機器人進行分離改造(見圖6),其體積和重量大大減小,機器人移動的靈活性得到增強,電池的續航時間顯著增加。經過測試,此終端小型化機器視覺系統工作正常,完全可實現原來所有的功能。
基于linux系統的機器視覺系統的終端小型化設計,所有軟件均由開源軟件庫實現,并且預留了很多對外接口,可以方便地實現后期的軟件升級。硬件部分采用通用芯片組設計,下位機可以運行于大多數ARM架構芯片上,上位機也可以運行于絕大多數X86架構計算機上,具有良好的可移植性。現實中可以通過將此系統和現有產品進行整合,推廣到搜索救援、智能交通和智能玩具等領域,具有廣闊的發展空間和應用前景。

圖5 軟件通訊過程

圖6 家庭服務機器人