趙建敏,文博,李琦
(內(nèi)蒙古科技大學(xué)信息工程學(xué)院,內(nèi)蒙古 包頭 014010)
牛的體尺參數(shù)能夠反應(yīng)牛的生長發(fā)育狀況、生產(chǎn)性能及遺傳特性,可以作為衡量牛生長發(fā)育情況的一個主要指標(biāo)。在選種、肉質(zhì)評價以及飼養(yǎng)管理等方面,牛體體尺也是一個重要指標(biāo)[1]。傳統(tǒng)的牛體尺測量主要是通過手杖、皮尺進行直接測量,這種測量方法工作量大,而且直接接觸牛體,會使牛產(chǎn)生應(yīng)激反應(yīng),極大地影響測量精度和測量效率。
近年來基于計算機視覺的家畜體尺測量改變了接觸式的測量方法。主要有利用背景減法、去噪聲算法、背景差分法以及自動閾值分割針對家畜進行體尺測量[2-4]。然而,當(dāng)家畜與背景環(huán)境的顏色相近時,利用此類方法測量很難單純地分割出目標(biāo)家畜,干擾較強。隨后國內(nèi)相關(guān)研究提出利用Kinect相機采集家畜圖像。利用Kinect深度傳感器獲取荷斯坦奶牛的三維點云數(shù)據(jù)以及使用投影法和差分法識別家畜頭部和尾部位置,并利用最小外接矩形法調(diào)整牲畜的水平方向[5-7]。此外在豬體尺機器視覺技術(shù)研究中,國外相關(guān)研究利用VIA系統(tǒng)對豬生長過程進行監(jiān)測,獲取豬體背部體長、體寬、面積參數(shù)和形狀信息[8-10]。Banhazi等[11]基于單攝像機構(gòu)建了豬的體寬、體長及面積檢測系統(tǒng),此研究為動物的測量提供了一種新型的工具,通過攝像頭獲取視頻及圖像數(shù)據(jù),利用一系列的圖像處理手段實現(xiàn)目標(biāo)物尺寸和面積的研究。胡志偉等[12]采用一種基于VGG16與UNET相結(jié)合的全卷積神經(jīng)網(wǎng)絡(luò)模型,實現(xiàn)對圖像語義級別的分割,提取出生豬的輪廓。
在實際圖像采集過程中,由于牛的采食習(xí)性,很難采集到滿足測量要求的理想圖像。為了能夠更加精確地獲取到目標(biāo)物體的輪廓曲線,在Ubuntu系統(tǒng)下,使用Pytorch深度學(xué)習(xí)框架、利用Pyqt5搭建了牛體尺測量系統(tǒng)。該系統(tǒng)使用單只攝像頭采集牛體圖像,利用Mask R-CNN[13-14]模型提取牛體輪廓,結(jié)合部位特征對輪廓進行分區(qū),在局部區(qū)域根據(jù)幾何特征提取體尺測點,最終在牛體輪廓線找到體尺部位、體尺特征點,并且結(jié)合牛體尺測點計算數(shù)據(jù)。
采用型號為Intel E5-2680的CPU以及Nvidia 1080Ti的顯卡搭建服務(wù)器,模型訓(xùn)練采用已公開的COCO、VOC數(shù)據(jù)集,篩選數(shù)據(jù)集中牛這一類的全部圖像并用于訓(xùn)練分割模型,其中COCO數(shù)據(jù)集包含2 055張,VOC數(shù)據(jù)集951張。測試采用實驗室仿真測試和實地測試,實驗室環(huán)境中安裝仿真模型牛進行模擬仿真,實地測試環(huán)境選擇在內(nèi)蒙古蘇尼特左旗合作牧場,隨機挑選大小不同的5只牛,實時進行采集圖像、體尺計算。
體尺測量系統(tǒng)試驗平臺主要由攝像頭、服務(wù)器、測量區(qū)域以及體尺測量顯示界面組成,測量系統(tǒng)主要包含:目標(biāo)分割、特征部位特征點的提取以及體尺計算。數(shù)據(jù)采集層利用攝像頭采集牛站姿圖片;數(shù)據(jù)處理層將采集到的牛圖片送入Mask R-CNN分割模型中輸出具有掩模的圖片并且提取出當(dāng)前牛的輪廓曲線,針對提取出的牛體輪廓曲線進行幾何分析得到體尺測點,進一步根據(jù)體尺測點計算當(dāng)前牛的體尺數(shù)據(jù);功能展現(xiàn)層則將每一部分的效果圖以及體尺信息顯示在利用pyqt5搭建的體尺測量系統(tǒng)界面,并最終將每只牛按照各自的ID編號存儲至數(shù)據(jù)庫建立牛的檔案,設(shè)計出基于Mask R-CNN的牛體尺測量系統(tǒng),系統(tǒng)框架如圖1所示。

圖1 系統(tǒng)框架
根據(jù)生成的具有掩模信息的圖像最終提取出閉合牛體側(cè)面輪廓線[15-17]。首先對得到的牛體輪廓線進行濾波得到較好的輪廓曲線,利用分區(qū)法提取特征區(qū)域,進一步利用U弦長曲率方法[18]計算特征區(qū)域中曲率最大點得到牛體尺測點,最終根據(jù)像素長度與像素比例之間的比值,計算出牛體體尺數(shù)據(jù)[19-28]。牛體特征點如圖2所。

注:A為臀部特征點,B為髻甲點,E為前足點,D為肩胛前端點,C點為B點的垂點;AB兩點之間橫坐標(biāo)的距離為牛體體長,BC之間的垂直距離為體高,AD長為體斜長
數(shù)據(jù)處理采用Mask R-CNN分割算法。Mask R-CNN是以Faster R-CNN[29]為原型,在此結(jié)構(gòu)上增加了1個分支用于圖像分割,整體可以看作是1個通用實例分割架構(gòu)。Mask R-CNN結(jié)構(gòu)圖如圖3所示。算法模型使用深度殘差網(wǎng)絡(luò)ResNet101替代傳統(tǒng)的AlexNex網(wǎng)絡(luò)作為特征提取模塊,同時將特征金字塔網(wǎng)絡(luò)(feature pyramid networks, FPN)引入算法中,使用ResNet101和FPN結(jié)合的算法進行特征提取,可以在不增加計算量的同時,提升多尺度下小像素的精準(zhǔn)快速檢測能力。將提取到的特征圖(feature map)送入?yún)^(qū)域候選網(wǎng)絡(luò)(region proposal network, RPN)提取可能存在的目標(biāo)區(qū)域(region of interest, ROI)。通過對目標(biāo)區(qū)域進行ROI Align池化操作,將特征圖與輸入圖像像素進行對齊,在經(jīng)過分類、像素分割完成對目標(biāo)區(qū)域的分割。Mask R-CNN 最后的輸出有3個分支,其中2個分支經(jīng)過全連接層進行分類和邊框回歸,另1個Mask分支經(jīng)過全卷積網(wǎng)絡(luò)進行上采樣得到分割圖。

圖3 Mask R-CNN結(jié)構(gòu)示意
1.4.1 輪廓曲線的提取
牛的輪廓提取采用讀取Mask R-CNN模型處理原始圖像后生成的掩碼圖像的掩碼信息,從而提取出牛的輪廓。掩碼的生成是由分割模型對目標(biāo)物體進行分割,然后構(gòu)建顏色填充器將目標(biāo)物體填充顏色。利用攝像頭對現(xiàn)場牛彩色圖像的采集,將彩色圖像送入Mask R-CNN模型生成具有掩碼信息的圖像,隨后讀取圖像的掩碼信息并以坐標(biāo)的形式存入txt文件中,最后重新讀取txt文件并利用plt.show()函數(shù)將掩碼坐標(biāo)重新繪制。相比于經(jīng)典的邊緣檢測方法,用提取掩碼的坐標(biāo)信息繪制輪廓曲線更為簡單快捷,提高了提取精度,極大地縮短了輪廓提取的時間并且更適用于復(fù)雜背景。原始圖像、掩碼圖像以及輪廓圖像如圖4所示。

圖4 目標(biāo)牛體輪廓圖像
1.4.2 特征區(qū)域的提取
對于得到的曲線采用分區(qū)法,將牛的輪廓曲線圖分為3個區(qū)域,由牛體輪廓圖像觀察可看到,采集到的牛前、后蹄點處于所得的圖像中最下方位置,且前、后蹄點輪廓線分辨明顯,易于提取。對前、后足點提取時采用像素逐點掃描的方法。
在尋找前、后足點過程中,為了能夠盡可能準(zhǔn)確地搜索到前后足點,給定限定條件,即:在測量牛體尺數(shù)據(jù)時,必須保持牛平行站立于鏡頭,并且牛的頭部在尾部的左側(cè)。因此,在搜索到第1個足點后,此時整個圖像會自動被分為A、B、C 3個區(qū)域,其中A區(qū)域的寬度為牛前足點的橫坐標(biāo)到牛的輪廓最小橫坐標(biāo)的距離,B區(qū)域的寬度為前足點的橫坐標(biāo)到牛的輪廓最大橫坐標(biāo)1/2的距離,而C區(qū)域的寬度為牛的輪廓整體長度的一半到牛的輪廓最大橫坐標(biāo)的距離。其中,尾部區(qū)域位于C區(qū)域,利用牛的輪廓橫坐標(biāo)最大點、縱坐標(biāo)最小的點擴大或減小一定比例作為尾部特征區(qū)域的寬度和高度。即利用輪廓曲線橫坐標(biāo)的最大值的0.85至1.1倍的距離作為尾部特征區(qū)域的寬度,利用輪廓曲線縱坐標(biāo)最小值的0.95至1.1倍的距離作為尾部特征區(qū)域的高度。髻甲點區(qū)域位于B區(qū)域內(nèi),利用A、B區(qū)域分界線的橫坐標(biāo)和輪廓曲線縱坐標(biāo)最小值采用相同的方法,橫坐標(biāo)的0.95至1.1倍的距離作為髻甲點區(qū)域的寬度,縱坐標(biāo)最小值的0.95至1.1倍的距離作為特征區(qū)域的高度。對于肩端區(qū)域,根據(jù)牛不同的站姿,可能存在A區(qū)域內(nèi),也可能存在B區(qū)域內(nèi)。利用輪廓曲線縱坐標(biāo)的平均值做一條水平基線,這條水平基線與牛的輪廓曲線相交的橫坐標(biāo)最小點的0.95至1.05倍作為肩端區(qū)域?qū)挾龋慌c此同時利用A區(qū)域中縱坐標(biāo)的平均值的0.95至1.05倍作為肩端區(qū)域的高。采用這種方法,可以解決不同大小的牛按照各自身高體長提取自身的特征區(qū)域。
1.4.3 體尺測點的提取
體尺測點的測量采用U弦長曲率法計算曲率最大點提取出體尺測點。計算U弦長曲率時,應(yīng)用與支持領(lǐng)域前后臂矢量夾角相關(guān)的一個余弦值作為離散曲率,具體計算公式如下式:
(式1),

對于尾部區(qū)域、髻甲點區(qū)域、肩端區(qū)域,采集各個特征區(qū)域內(nèi)的所有離散點,利用U弦長曲率法計算特征區(qū)域內(nèi)的曲率最大點,曲率最大點即為體尺測點。體尺測點的提取結(jié)果如圖5所示。

圖5 體尺測點提取效果
體尺測量原理示意圖如圖6所示,測量步驟如下:
①劃分測量區(qū)域,實際測量之前固定攝像頭位置,選取牛圈出口通道作為測量區(qū)域,將測量區(qū)域按照60 cm間隔分區(qū),并按區(qū)域進行標(biāo)定,獲取每個區(qū)域的圖像像素和實際長度的轉(zhuǎn)換參數(shù);
②牛通過出口進入測量區(qū)域后,對圖像進行目標(biāo)分割、提取輪廓曲線;
③對輪廓曲線進行體尺測點的提取得到髻甲點、牛尻點、肩端點;
④利用步驟③得到的特征點計算體尺數(shù)據(jù)的像素長度,其中計算體長選取髻甲點和牛尻點;體高利用髻甲點進行計算;體斜長選取肩端點和牛尻點進行計算;
⑤判定牛站立區(qū)域,其中牛站立區(qū)域的判定方法是通過輪廓曲線中牛左前蹄處的像素坐標(biāo)與步驟①劃分的測量區(qū)域分界線的像素坐標(biāo)進行比較,即可判定牛當(dāng)前所處區(qū)域;
⑥根據(jù)步驟⑤判定出牛站立區(qū)域,進而圖像中相應(yīng)區(qū)域的計算參數(shù)隨即固定,后續(xù)步驟采用標(biāo)定好的參數(shù);
⑦根據(jù)公式計算。

圖6 體尺測量示意
本文在距離攝像頭150 cm處依次間隔60 cm劃分4個測量區(qū)域,分界線和測量區(qū)域的編號按離攝像頭的距離從近到遠依次排列。分界線采用20 cm×20 cm的棋盤格進行標(biāo)定,得到該分界線上的像素比例Pn(n=1,2,3,4,5),分區(qū)i(i=1,2,3,4)中不同位置呈現(xiàn)的像素比例Pp在本區(qū)內(nèi)進行線性計算,具體計算公式如下式:
(式2),
式中,Yv代表牛所在位置距離第一條分界線的像素長度,Yn、Yn+1分別代表牛所在區(qū)域的左右分界線距離第一條分界線的像素長度。進而計算牛體長、體高以及體斜長的像素長度,隨后進一步計算牛的真實體尺數(shù)據(jù)。牛實際體高、體長、體斜長采用下述公式計算:
(式3),
式中,(X1,Y1)、(X2,Y2)是體尺測點的坐標(biāo),Pp為牛站立位置的像素比例,其中計算體高時選取髻甲點,利用髻甲點到輪廓曲線最低點的垂直距離作為體高的像素長度;測量體長時,選取髻甲點和牛尻點橫坐標(biāo)的距離作為體長的像素長度;計算體斜長時,體斜長的像素長度為牛尻點與肩端點的直線距離。進而根據(jù)實際長度等于像素距離與像素比例的比值計算出實際的牛體尺數(shù)據(jù)。
牛體尺測量試驗主要分為兩部分:一部分試驗選擇以仿真模型牛作為試驗樣本,在模擬試驗環(huán)境中測量模型牛站在不同測量區(qū)域時的體尺信息;另一部分試驗環(huán)境選擇在內(nèi)蒙古蘇尼特左旗養(yǎng)殖場中,隨機選取5只大小不同的牛作為試驗樣本,在飼養(yǎng)員的干預(yù)下使牛站姿盡可能平行鏡頭時采集當(dāng)前圖片,用于后續(xù)體尺測量。
在試驗測量中,以皮尺分別測取仿真牛以及真實牛的體高、體長、體斜長3項數(shù)據(jù)各10次,以每項數(shù)據(jù)的平均值作為試驗樣本的真實值。然后利用體尺測量系統(tǒng)將采集到的牛圖片分別送入分割模型進行輪廓提取,特征部位、特征點的提取,進一步對每一張圖片進行體尺數(shù)據(jù)計算,然后對同一只牛計算到的體尺數(shù)據(jù)進行平均,以此作為本系統(tǒng)測得的牛體尺數(shù)據(jù),如圖7所示為試驗測量效果圖。

圖7 試驗測量效果示意
圖7左側(cè)為在模擬環(huán)境中測量模型牛站在不同測量區(qū)域內(nèi)的體尺信息,以人工方法測量結(jié)果為真值,比較系統(tǒng)測量結(jié)果與人工測量結(jié)果,給出本系統(tǒng)針對模型牛的測量相對誤差,見表1。同理,圖7右側(cè)為在實際養(yǎng)殖場中進行牛體尺測量,將系統(tǒng)測量結(jié)果與人工測量結(jié)果進行比較,給出系統(tǒng)測量誤差,見表2。

表1 模型牛測量結(jié)果

表2 實際牛測量結(jié)果
由試驗結(jié)果可以發(fā)現(xiàn),本系統(tǒng)針對模型牛在不同區(qū)域內(nèi)測量的體長數(shù)據(jù)與人工測量的數(shù)據(jù)信息平均相對誤差不超過3.56%,體高測量數(shù)據(jù)與真實數(shù)據(jù)信息平均相對誤差不超過2.48%,體斜長平均相對誤差不超過3.81%。進行實地測量時,經(jīng)驗證對牛體體高的實測值平均相對誤差較小,其平均相對誤差為4.94%;其次為體長,平均相對誤差為6.84%;而對牛體體斜長檢測誤差較大,平均相對誤差為8.36%。利用本系統(tǒng)測量時不與牛接觸,避免了因接觸牛而造成的其他問題,在提取牛輪廓時,與傳統(tǒng)方法相比較本系統(tǒng)輪廓提取更加精確,簡化了輪廓提取的步驟,適用性更強。試驗結(jié)果表明此方法滿足此次系統(tǒng)設(shè)計的需求。
測量系統(tǒng)利用pyqt5搭建顯示界面,通過使用槽函數(shù)給每一個按鈕添加相應(yīng)的功能使得測量系統(tǒng)每一部分得到的效果都可以展示。系統(tǒng)界面如圖8所示。其中ID編號為牛的身份編號,當(dāng)對活體牛進行體尺測量后,點擊保存按鈕,即會將不同的牛按照各自的ID編號將體尺信息存儲到后臺數(shù)據(jù)庫中,建立電子檔案,便于查看。

圖8 系統(tǒng)主界面
系統(tǒng)采用多線程方法設(shè)計應(yīng)用程序,線程1進行攝像頭的采集,調(diào)用攝像頭的RTSP協(xié)議讀取視頻流,當(dāng)牛進入測量區(qū)域觀察后采集10張牛站姿的圖片,用于后續(xù)試驗計算體尺數(shù)據(jù)信息,當(dāng)牛未進入測量區(qū)域時則不采集圖像,因為測量區(qū)域相對處于鏡頭中心位置,在此位置,圖像畸變較小,采集的圖片明顯優(yōu)于其他位置采集的圖像,后續(xù)的測量誤差會較小。在軟件界面的顯示窗口中,顯示采集圖像的其中1張即可。線程2負(fù)責(zé)將采集到的所有圖像送入分割模型提取輪廓曲線,并將處理過后的圖像顯示在界面的相應(yīng)窗口,接下來根據(jù)數(shù)字分析找到體尺測點進行體尺計算,輸出10張圖像計算后的體尺信息的平均值。最終,將當(dāng)前測量的牛體尺信息以及處理后的圖像按照各自的ID編號存入數(shù)據(jù)庫中,便于建立牛的體尺檔案。
本文針對傳統(tǒng)測量牛體尺數(shù)據(jù)、傳統(tǒng)提取輪廓耗時耗力等問題,提出了一種基于Mask R-CNN的牛體尺測量系統(tǒng)。試驗結(jié)果表明,相比較于用背景減法、去噪聲算法、背景差分法以及自動閾值分割針對家畜進行體尺測量,采用Mask R-CNN分割模型可以在復(fù)雜的背景中有效地提取出牛的輪廓曲線,抗干擾性強同時也提高了輪廓曲線的提取精度,并且對于Mask R-CNN目標(biāo)分割模型經(jīng)過訓(xùn)練后,可以使分割模型根據(jù)人們的需求對于不同的物體進行目標(biāo)識別、目標(biāo)分割,也可達到對于特定物體的輪廓提取。在體尺數(shù)據(jù)實際測量中,針對模型牛與實際牛不同的試驗樣本,模型牛的特征部位以及體尺測點明顯凸出,并且相對位置固定,不會存在其他外界條件的干擾所以測量精度相對較高。而活體牛,由于毛發(fā)以及牛的生態(tài)習(xí)性、身體姿態(tài)相對不固定,所以在尋找特征區(qū)域以及體尺測點的過程中誤差較大。
本系統(tǒng)在進行牛的體尺測量時,要求牛進入測量區(qū)域站姿較好時開始采集圖像,并且通過試驗測量體長測量誤差在6.84%之內(nèi),體高測量誤差在4.94%之內(nèi),體斜長測量誤差在8.36%之內(nèi)。相較于利用Kinect相機采集家畜理想姿態(tài)圖像后進行體尺計算,本系統(tǒng)采集家畜圖像后直接對家畜的輪廓曲線進行體尺計算。本系統(tǒng)對機器視覺技術(shù)在家畜體尺測量方面具有積極的意義,為我國牛養(yǎng)殖業(yè)的精準(zhǔn)化、精細(xì)化、智能化提供技術(shù)支撐。但在自然狀態(tài)下,牛的站姿變化對體長、體斜長測量有較大影響。在牛站姿不平行于鏡頭時會存在站姿偏角,提取體尺測點存在測量誤差。針對本系統(tǒng)測量誤差以及存在站姿偏角問題,接下來應(yīng)解決站姿糾偏以及進一步提高體尺測點的提取精度。