何海燕,鄧國浩,胡鵬飛,李紅飛
(山西農業大學信息科學與工程學院,山西 晉中 030801)
在家禽飼養行業中,種蛋孵化過程耗時、耗能,為節約養殖成本,提高經濟效益,在孵化過程中及時并準確地剔除無精蛋有著重要的意義。無精蛋若能及時被挑選出來,還可以減少營養成分的流失。
近年來,我國的禽蛋業有很大的發展,現在的孵化設備已經有了自動化的控制功能,但是對于無精蛋的剔除工作,還是主要依靠傳統的人工照蛋的方法,在孵化的第7~8 天手持簡易照蛋器進行挑選,這種方法不僅耗費人力物力、效率低下,而且對照蛋環境要求嚴格。同時受精蛋不能太長時間暴露在空氣中,否則會嚴重影響受精蛋的質量,導致孵化率下降,很難做到定量化和標準化。為了提高雞蛋孵化率和保證無精蛋品質,使經濟效益最大化,需要對雞蛋孵化過程中的受精蛋挑選方法進行改良。
國內外許多學者和研究人員都對早期孵化雞蛋進行了積極探索和研究,目前常用紅外光譜技術[1-2]、機器視覺[3-4]、生物電與機器學習結合[5]和神經網絡[6-7]等方法對早期孵化禽蛋進行無損檢測。本研究將深度學習與機器視覺相結合,對雞蛋中的受精蛋進行識別和定位,可為養殖業自動化機械挑選提供技術支持,逐步實現用自動化的檢測辦法來代替人工挑選[8-10]。
本研究利用機器視覺,通過圖像采集裝置獲取雞蛋孵化第3天的圖像,選擇深度學習的YOLO V5 算法自動獲取圖像特征并進行分析訓練,再利用訓練好的模型對雞蛋進行挑選。本設計包括光源控制、圖像采集、數據處理、訓練模型及驗證模型,如圖1所示。

圖1 總體方案設計
首先設計一套圖像采集裝置,利用攝像頭采集圖片,將圖片進行預處理,使用labelimg 對目標進行類別標注,再將其按比例分為訓練集和驗證集,選擇合適的權重,建立受精蛋挑選模型,在樹莓派上進行測試,分析結果。
采用樹莓派4B BCM2711 型CPU,8 GB 內存,操作系統為樹莓派官方系統raspberry pi os,深度學習環境使用pytorch 框架搭建,本研究的訓練與測試均在python3.7版本下完成。
在圖像采集過程中考慮到被測物表面分光反射特性,本研究選擇無輻射、低功耗的冷光LED 燈作為光源,并用樹莓派輸入輸出引腳驅動繼電器來控制光源,利用物聯網平臺可以通過手機控制光源開關,控制電路如圖2所示。

圖2 光源控制電路
圖像采集模塊主要包括攝像頭、采集箱和傳送帶三部分,如圖3所示。

圖3 圖像采集裝置圖
攝像頭的選擇采用樹莓派CSI 攝像頭。CSI 攝像頭相較USB 攝像頭對CPU 占用率小,分辨率高,且在前期實驗過程中,樹莓派對USB攝像頭的支持不如CSI攝像頭完美,偶爾會出現無法使用USB攝像頭的情況,經過對比實驗結果,最終選擇樹莓派CSI攝像頭。
采集箱采用普通紙箱。為了避免鏡面反射對后期提取目標區域和自然光的影響,對采集箱內環境進行了處理,使箱內處于無光且黑暗的條件下。實驗過程中發現箱內存在漏光現象,被拍攝雞蛋表面反光,采集的圖像不清晰,影響實驗結果,為防止這種現象發生,在后續實驗中用黑色布條對漏光縫隙處進行了處理。
實驗開始時,先將暗箱內的光源和樹莓派CSI 攝像頭打開,調整攝像頭參數,再開啟傳送帶,當傳送帶將雞蛋傳送到暗箱后,暗箱上方的攝像頭開始捕捉圖像,并將采集到的圖像傳送到控制器。控制器對圖像進行處理,判斷是否為受精蛋,并將識別結果顯示出來。
利用cv2.VideoCapture()函數捕獲攝像頭圖像,捕獲視頻當前幀并用imutils.resize()設置視頻幀圖像大小,通過時間函數time.sleep()完成定時拍照。核心代碼如下:

2.3.1 圖像分割
將獲取的一組雞蛋圖像分割成單張雞蛋,利用image.size 得到圖像的長度和寬度,原來圖像的長寬分別除以雞蛋的列數column 和行數row 得到新圖像的長寬,再利用兩層循環,生成column*row 張基于原圖位置的圖片,并按從左到右、從上到下的順序將圖像存放在一個列表中。
核心代碼如下:


2.3.2 制作數據集
在深度學習模型測試中,做好數據的清洗和標注能夠提高輸入數據的質量和預測的準確率。將存放在JPEGImages 文件夾的雞蛋圖片,使用labelimg數據標注工具在每張圖片上標注目標類別,得到標注格式為.xml 的數據。將.xml 文件內目標框坐標(xmin,ymin,xmax,ymax)歸一化處理后轉換成為.txt 格式標簽,得到目標類別、標注框的中心坐標(X,Y)以及相對應的高(H)和寬(W)等信息。
歸一化中心坐標:
標注框的高和寬:
W=(xmax-xmin)/width,H=(ymax-ymin)/height
核心代碼如下:

將數據集按7∶3 的比例劃分訓練集和驗證集,把訓練、驗證和測試圖片的絕對路徑寫到對應的.txt文件中,完成數據集的準備。
本研究采用基于深度神經網絡的對象識別和定位的YOLO V5 算法自動獲取圖像特征并進行分析訓練。其算法框架可分為輸入端、基準網絡、Neck 和Head 輸出端四個模塊。輸入端將輸入圖像縮放到網絡輸入大小,并進行一系列歸一化操作,用基準網絡提取一些通用的特征表示,通過Neck 網絡進一步提升和優化特征的多樣性及魯棒性,最后用Head輸出端來完成目標檢測結果的輸出。網絡結構如圖4 所示。

圖4 YOLO V5 網絡結構
通過圖像作為輸入,將其分割成i×i 個單元格,用單元格預測圖像中目標的邊界框、置信度和類別概率,確定圖像中目標位置及其類別,實現對受精蛋的自動挑選和定位。
在樹莓派上構建深度學習環境,指定標注數據、類別、數據集存儲路徑、預訓練模型、anchors、輸入尺寸。用ImageNet 數據集對卷積網絡的前20 個卷積層、池化層和全連接層進行預訓練,數據訓練好之后生成兩個權重文件,用得到的網絡參數初始化模型前20 個卷積層的網絡參數,用VOC 數據集進行目標識別的訓練和預測。
為了驗證模型的可靠性和準確性,替換已經訓練好的模型參數,導出pytorch 訓練好的模型,打開攝像頭,獲取當前圖像,調整圖像大小,將圖像傳遞給訓練好的模型,輸出檢測結果。驗證結果如圖5所示。

圖5 驗證結果
利用模型對180 枚雞蛋進行驗證,其中受精蛋誤判數3 枚,無精蛋誤判數2 枚,共錯判5 枚,準確率為97.2%。結果如表1所示。

表1 雞蛋挑選檢測結果
1)本研究利用圖像處理方法處理并制作數據集,通過深度神經網絡訓練雞蛋圖像,自動提取受精蛋特征,減少了人為參與,通過驗證模型,能夠實現對受精蛋和無精蛋的區分和定位,通過檢測模型發現準確率達95%以上。對檢測結果進行分析發現,光源的強度和采集箱的環境可能會對檢測結果造成影響,可進一步改變實驗環境,以達到更好的效果。本研究只是解決了種蛋識別自動化問題,還沒有實現硬件挑選自動化。
2)根據存在的問題,今后還可以從以下幾個方面繼續研究:在利用圖像采集模塊采集雞蛋圖像時,考慮在暗度更高、環境更加穩定的條件下進行試驗,避免因環境因素所造成的圖像噪聲對后續研究過程的影響;由于獲取的數據不多,可能導致模型質量不好;做數據集之前改進圖像增強的方法,提高圖像處理效果,使目標特征更明顯,提高預測準確率;增加硬件挑選自動化模塊。