王甲福, 常海天*, 劉志遠
(1.長春工業大學 電氣與電子工程學院, 吉林 長春 130012;2.國家電網內蒙古東部電力有限公司興安供電公司, 內蒙古 烏蘭浩特 137400)
隨著電子、光學、計算機、機械等產業的迅速發展,以非接觸、高精度、高速度為特征的光電檢測技術已成為檢測技術發展的主要方向[1]。非接觸測量是在不與被測物體表面接觸的情況下,利用電磁、光電等技術為基礎,獲得物體表面參數信息的一種測量方法。如機器視覺測量、超聲波測量、電渦流法等。
非接觸測量具有高速、不接觸、不劃傷被測物表面和適合于柔軟物體測量等顯而易見的優點[2]:
1)排除接觸測量對柔性物體測量的人為等受力干擾;
2)利用數字圖像處理、計算機識別達到較快的采集速度;
3)安全性較高[3-4]。
目前非接觸測量技術廣泛應用在工業領域,在農業和畜牧業很少有相關的應用和研究,文中為了適應大型養牛場管理,對牛在不同月齡下測量體尺數據的需求,對基于Windows平臺的圖形用戶界面設計實現進行了研究,設計了種畜非接觸測量軟件系統,包括軟件框架設計、功能模塊設計、調試和實現。
牛場在牛出生后,每隔6個月會記錄一次牛的各項體尺數據,即0月齡、6月齡、12月齡、18月齡、24月齡等都會記錄,其中記錄的體尺數據包括:體重、體高、體斜長、胸圍、腹圍等[5]。擁有一定規模的養牛場需要記錄的數據量十分龐大,為了有效管理和記錄各項數據,需要合理地選擇一款數據庫。
當前主流的數據庫有Oracle、Mysql、SQL Server等,在對養牛場測量環境考察中發現[6],需要測量的現場為室外且無網絡覆蓋,因此,本系統選用SQLite數據庫對數據進行存儲和管理。SQLite是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統。
在Qt中使用QSqlDatabase類的addDatabase(“QSQLITE”)方法,創建并關聯數據庫,使用QSqlQuery類來執行Sql語句,對數據庫進行操作。本系統的數據庫表結構如圖1所示。
通過constraint primary key (編號,月齡)設置復合主鍵,保證數據在存儲時同一編號同一月齡只能存儲一組數據。

圖1 數據庫表結構
傳統的牛體體尺數據的測量主要采用人工測量方式,在人對牛進行測量時會使牛產生應激反應,影響其生長和發育。
文中設計的測量系統設置一個讓牛能通過的測量通道,當牛的體態適合測量時,采集牛在站立形態的圖像信息和體重信息。通過這種方式對牛進行非接觸式的測量,減小了牛的應激性反映,同時又極大程度地減少了測量時間。
測量系統總體結構包括四部分,分別為數據采集、數據處理、數據查詢、統計分析。其結構圖如圖2所示。

圖2軟件結構圖
數據采集模塊為后續數據處理提供基礎,其采集到的數據質量和準確性直接影響數據測量的結果。
根據農場的實際需求,本測量系統選用工業級高清攝像頭和畜牧專用稱重儀表來采集牛的平面圖像信息和體重信息。實現效果如圖3所示。

圖3 數據采集功能實現
2.1.1圖像預覽及采集
在采集牛的圖像信息時,需要在軟件界面上實時預覽牛在攝像機里的姿態。
Qt為用戶提供了幾個攝像頭相關類,包括QCamera、QCameraViewfinder、QCameraInfo、QCameraImageCapture,使用QCameraInfo類的availableCameras()方法能夠找到所有連接到計算機上的攝像頭信息,使用所得到的攝像頭信息實例化QCamera類,此時創建出的QCamera對象使用setViewfinder()和start()方法便可實現攝像頭拍攝的信息在窗口中實時預覽。
當牛的體態滿足測量條件時,使用capture()方法將牛的體態圖片截圖并保存到指定路徑,用于后續處理。
2.1.2體重信息的獲取
本測量系統使用畜牧專用的地磅和稱重儀表對要測量的牛的體重信息進行采集,軟件和稱重儀表間使用藍牙方式進行連接,使用RS-232串口協議通信。和儀表進行通信前,需要提前設置好波特率、數據位、奇偶性、停止位等信息。
使用QSerialPort類實現串口通信,首先用openSerialPort()方法關聯串口設備,當設備發送信息給軟件時,會觸發串口類的ReadyRead信號,此時通過接收ReadyRead信號和串口設備傳給軟件的信息,實現對稱重儀表數據的獲取。
數據處理模塊采用圖像處理的方式,利用采集到的圖像數據對牛進行測量,主要測量部位為體高、體斜長、十字部高、胸圍、腹圍。數據處理流程如圖4所示。

圖4數據處理流程圖
拍攝到的圖片由于環境和攝像頭硬件的因素,會產生一定程度的畸變和噪聲,在圖像預處理階段,使用中值濾波和圖像畸變校正的方法去除這一影響[7]。
使用圖像進行測量,圖像坐標和世界坐標的轉換是測量的基礎,常用的坐標轉換方式采用對攝像機進行標定,以實現圖像坐標和攝像機坐標及世界坐標的轉換,但這種方式在處理圖像前需要使用標定板且在使用的過程中攝像機的位置需要保持不變。在現場考察發現,對牛的測量要求測量的設備需具有一定的靈活性[8]。因此,本系統在測量通道上添加輔助標識物,通過識別輔助標識物在圖像中的距離來轉換圖像坐標和世界坐標。
輔助標識物提取有兩種方式,一種通過設定的RGB值,采用圖像處理算法識別并計算出標識物間的距離,從而獲得圖像和實際的比例關系。當環境因素過于復雜時,上述算法會有一定的誤差,此時采用另一種方式通過手動選取標識物來計算距離。
當計算出圖像和實際的比例關系后,使用鼠標點擊和移動來選取并測量相關的體尺數據。在軟件中,重寫Qt的mousePressEvent(QMouseEvent*)、mouseMoveEvent(QMouseEvent*)、mouseReleaseEvent(QMouseEvent*)、paintEvent(QPaintEvent*)等事件函數,當鼠標左鍵按下時,保存初始點坐標值(x1,y1),鼠標移動的過程中用Qpainter類的drawLine()方法在初始點和鼠標經過的點繪制直線,當鼠標左鍵釋放時,記錄終點坐標值(x2,y2)。計算初始點和終點的歐式距離,再根據比例換算出要測量部位的實際長度。
數據處理模塊實現如圖5所示。

圖5數據處理模塊實現
數據測量結束后,需要對測量的數據進行查詢和排序。當數據量足夠大時,對數據按類型、時間的篩選也十分必要。
針對現場對使用習慣和使用環境的需求,本系統設計了數據查詢、數據分析兩個功能模塊,實現了對測量數據的查詢、排序、篩選以及數據的可視化顯示和數據報表導出。
為了完成數據與界面的分離,Qt引入了模型/視圖結構,即模型(Model)、視圖(View)、代理(Delegate)。
本系統中使用QTableView類來呈現數據庫中存儲的數據,setModel()方法實現了數據庫和界面視圖的關聯,當對視圖中的數據進行處理時,后臺會自動處理相應的數據庫文件。
為了更直觀地看出某些牛的生長趨勢,使用QChart類實現對選中數據的柱形圖顯示。
先使用tableView→ setSelectionMode(QAbs tractItemView::MultiSelection)。設置TableView為多選模式,用model()→ index(row,col))獲取選中的數據,將數據傳給QChar類,并通過QChartView類顯示數據為圖表。
首先對軟件各功能模塊的性能和準確性逐一測試,在對數據采集模塊測試時,發現多次點擊彈出數據采集功能模塊的界面后,軟件對計算機內存的占用會比較大,通過對代碼的排查,發現在實現圖像實時預覽時,每點擊一次數據采集功能就會實例化一個QCamera類的對象,當在堆上分配的資源越來越多時,對計算機的內存容量需求也就越大。最后通過使用單例模式,讓QCamera類在整個軟件生命周期中只實例化一個對象,這樣既實現了攝像機圖像實施預覽功能,又降低了軟件對計算機性能的需求。
通過多次實驗和現場測試,數據采集模塊中對牛體重信息的采集準確率在98%以上,數據處理模塊在對牛體尺測量時的準確率高于95%,能夠滿足牛場對數據誤差的需求。
針對傳統的牛體體型檢測需要大量人工參與的問題,設計并實現了一款非接觸測量系統軟件,通過硬件設備采集牛的圖像和體重信息,軟件使用圖像處理的方式實現了對牛的非接觸式測量,以及數據的存儲、查詢、篩選及可視化顯示。在實驗和測試后發現,測量的準確率能夠滿足使用需求,通過本系統測量極大程度減小了測量所用時間及測量時對牛造成的不良影響。
參考文獻:
[1]王龍.機器視覺在奶牛體況評定中的應用[D].上海:東華大學,2013.
[2]羅勝彬,宋春華,韋興平,等.非接觸測量技術發展研究綜述[J].機床與液壓,2013,41(23):150-153.
[3]岳衛宏.計算機視覺技術在齒輪測量中的應用研究[D].武漢:武漢理工大學,2005.
[4]周振勇,張揚,藺宏凱,等.基于主成分逐步回歸法的新疆褐牛體重預測模型研究[J].中國牛業科學,2012,38(1):1-4.
[5]劉偉,譚鶴群,黃丹,等.白鰱質量與截面積沿體長方向分布模型[J].農業工程學報,2012,28(12):288-292.
[6]張天珍.基于.NET 平臺的 GUI 軟件框架設計[J].長春工業大學學報,2015,36(3):305-309.
[7]Grau V, Mewes A U J, Alcaniz M. Improved watershed transform for medical image segmentation using prior information[J]. IEEE Transaction on Medical Imaging,2004,23(4):447-458.
[8]Bao P, Zhang L, Wu X. Canny edge detection enhancement by scale multiplication[J]. IEEE Trans on PAMI,2005,27(9):1485-1490.