郭建軍,楊 霖,張恩威,劉雙印,李俊勇,姚趙忠,謝彩健
(1.仲愷農業工程學院信息科學與技術學院,廣東 廣州 510225;2.廣州東文環境技術有限公司,廣東 廣州 510620;3.廣州順生生物科技有限公司,廣東 廣州 511316)
雞蛋是人類最好的營養來源之一[1],與人們的日常生活密不可分,既在食用領域中發揮作用,又在如疫苗研發之類的醫藥領域中扮演重要的角色。隨著經濟的增長和人民生活水平的提高,人們對雞蛋的需求量越來越大,對雞蛋品質的要求也越來越高。我國是世界上最大的雞蛋生產國和消費國,近年的雞蛋產量為2 600 萬t 左右[2]。居民受傳統飲食習慣的影響,日常生活中主要以鮮雞蛋為主[3],雞蛋在包裝、運輸、加工過程中,由于各種因素影響,容易受到磕碰而造成不可逆的損壞,具體表現為不同程度的裂紋,影響存儲和運輸。此外,微生物如沙門氏菌可通過雞蛋表面裂紋進入雞蛋內部導致雞蛋變質或品質下降,破損蛋還會對其他雞蛋造成感染,對企業的經濟效益和消費者的健康產生不利影響[4-5]。因而分揀完好蛋與裂紋蛋的環節至關重要。我國在雞蛋分揀方面,大多仍采用傳統的人工作業[6],此工作模式耗時耗力且勞動力成本高,并且工人分揀的效率會隨著時間的增長而降低[7],難以達到企業的預期。自動分揀技術可以高效、穩定地監測并剔除劣質雞蛋,同時進行分類傳輸,有效節約時間、空間和勞動力成本。因此研究雞蛋自動分揀技術具有重要的理論意義和廣泛的實用價值,實施后可以提高蛋類企業生產自動化水平,從而提升企業市場競爭力和經濟效益[8]。
本研究應用機器視覺技術反饋雞蛋裂紋信息,結合編程控制機器自動分揀設計的雞蛋分揀系統,能夠代替傳統人工分揀,實現低成本、高精度、自動化的生產。
基于機器視覺的裂紋雞蛋分揀系統主要由機器視覺檢測模塊、分揀模塊及用戶端通訊模塊3 部分組成。具體操作過程為:搭建好傳送帶、分揀裝置及攝像設備,攝像設備對雞蛋拍照,對照片利用機器視覺方法進行特征提取,再用分類識別算法進行對比并得出該蛋是否完好,最后通過機器進行分揀,同時將分揀數據呈現到用戶端上。以下為各模塊對應的功能及硬件選型。
機器視覺檢測模塊主要由相機、照明設備、采集暗箱和計算機組成。該模塊的功能是完成雞蛋外殼的圖像信息采集,利用機器視覺的技術實現對裂紋特征的提取,運用分類識別算法判斷出該雞蛋是完好蛋或是裂紋蛋。常用于圖像識別的相機主要有CCD 和CMOS,二者性能指標對比評價如表1 所示。在圖像效果上,CMOS 色彩效果較高,對圖形的捕獲及處理速度更快;拍攝出的照片更加清晰。在圖像特征上,CCD 對于圖像的抗擾亂能力更強、還原度更高并且適合在夜間工作。由于本項目分揀過程是在暗環境中拍攝,且對圖像要求較高,故采用CCD 相機。
表1 CCD 和CMOS性能指標對比評價
利用機器視覺技術對雞蛋進行檢測時,合適的光源和良好的照明方式更能清晰地展現雞蛋外殼的裂紋信息。表2 對市面上各種如白熾燈、LED、熒光燈的照明設備進行了對比。通過對比可以得出,LED的綜合照明能力較高。雖然初期成本較高,但由于性能好且使用壽命較長,長期的成本對比更優。因此,本檢測系統采用LED 燈進行視覺檢測照明。
表2 常用照明設備性能指標對比評價
在確定了系統所用的CCD 相機及LED 照明設備后,在傳送帶上搭建1 個簡易的暗箱,配備1 臺普通的計算機,即可完成機器視覺檢測設備的搭建。
分揀模塊是本系統最終需要實現的功能模塊。其根據視覺檢測模塊對被檢測雞蛋的破損與否進行分類,目的是將完整蛋運送至下一環節,將裂紋蛋或破損蛋淘汰[9]。對于分揀模塊的硬件選型,生產上常見的分揀設備主要有機械手設備、撥片、氣動吸盤等。表3 中,從成本、靈敏程度、所需配套設施數量、安裝難度以及自身缺點幾個主要技術指標進行對比評價可知:氣動吸盤的缺陷較多;機械手分揀效率高,但是成本高,撥片反之。本系統設計要求低成本,且撥片的分揀能力可滿足生產需要,故選擇撥片作為本系統的分揀模塊設備。
表3 分揀設備主要技術指標對比評價
本系統的用戶端通信模塊主要由STM32 單片機、ESP8266WIFI 模塊構成。機器視覺檢測模塊在計算機端將雞蛋是否破損的檢測結果傳輸給STM32 單片機端;單片機根據檢測結果,供高電平給直流無刷伺服電機,電機驅動撥片進行相應分揀;在獲得檢測結果的同時,單片機端利用WIFI 模塊,通過MQTT 協議,將檢測結果傳送至用戶端。
本環節實現圖像信息采集及圖像預處理,該過程為遞進關系,通過合適的方式進行采集后,再對圖像進行預處理,可實現精準的裂紋雞蛋檢測。
對于雞蛋圖像信息的采集,本文采用前文所述的硬件設備,將傳送帶的一段裝入機器視覺檢測設備。先在輥軸的下方安裝一排LED 燈照明設備,光源可使得雞蛋圖像采集更加清晰;利用輥軸帶動雞蛋旋轉。雞蛋轉過每個120°的位置正上方安裝相機,共安裝3 個相機,使得雞蛋360°全方位能被相機拍到。圖1 為采集圖像的設備安裝及布局情況,將雞蛋分為A、B、C 3 個120°曲面,圖2 為相機采集雞蛋不同面的圖像。
圖1 采集圖像的設備安裝及布局情況
圖2 相機采集雞蛋A、B、C 面的過程
圖像預處理的目的是提取出雞蛋外殼的裂紋特征,以便后期對該雞蛋進行識別分類。
采集完雞蛋照片后,相機將圖像傳送給計算機,進行圖像的預處理。由于完好雞蛋與破損雞蛋的區別是裂紋的存在與否,故預處理的目的是保留并增強裂紋區域圖像特征。選用處理方案需實現去除背景、噪聲干擾等;保留雞蛋外殼裂紋信息?;诖?,本文列出雞蛋圖像預處理流程如圖3 所示,針對預處理過程擬采用的處理方法如表4 所示。
圖3 雞蛋圖像預處理的流程
表4 雞蛋預處理流程及擬采用處理方法
2.2.1 灰度化
相機采集的雞蛋圖像為彩色圖像,其本質是一個降維過程,這個過程中信息的丟失無法避免,因此必須對雞蛋圖像進行灰度化處理[10],這樣可以提高黑白(二值化)圖像的清晰度,更能凸現目標特征,結合Pyhton 腳本和YOLOv5 目標檢測算法,調用Opencv 庫中的cv2.cvtColor 函數,可以將采集的原始圖像進行灰度化,效果如圖4 所示。
圖4 拍攝的雞蛋原圖像及灰度化效果
2.2.2 背景去除
灰度化處理后,再對雞蛋圖像進行背景去除,以避免非雞蛋本體對于裂紋特征提取的干擾。本文采用閾值分割方法,即提取統計經過灰度化以后的灰度值,將統計到的數值繪制成直方圖[11]。該直方圖的波峰主要有2 個,1 個為雞蛋的主體圖像,1 個為背景的圖像;由于透光照明方式,雞蛋本身的灰度值會大于背景的灰度值。將2 個波峰之間的波谷設置為閾值,可以將雞蛋圖像與背景圖像分離,再將灰度值峰值小的部分區域舍去,保留峰值大的區域,即可實現背景去除。具體流程如圖5 所示。
圖5 灰度化及背景去除流程
雞蛋圖像灰度直方圖如圖6 所示,該圖像的波形橫坐標為灰度值,縱坐標為相同灰度值對應的像素點數量。由該直方圖可知,該圖像主要有2 個波峰,根據前文所述,灰度值小的為背景,大的為雞蛋本體,設定波谷的灰度值為閾值,保留灰度值50~150 的部分,將灰度值50 以下的波峰灰度值設置為0,從而可以得到背景去除效果,如圖7、圖8所示。
圖7 完好蛋灰度化效果圖及背景去除效果
圖8 裂紋蛋灰度化效果圖及背景去除效果
2.2.3 濾波降噪
完成雞蛋圖像的灰度化和背景去除后,仍需對雞蛋圖像進行濾波降噪,其目的是去除圖像中的噪音區域。較常用的濾波算法有雙邊濾波、高斯濾波及中值濾波,本研究采用這3 種濾波算法并結合OpenCV,分別對完整雞蛋和裂紋雞蛋的圖像進行濾波處理,再對比其效果,得出較適合雞蛋圖像濾波降噪的濾波算法。
雙邊濾波是非線性的濾波方法,結合圖像的空間鄰近度和像素值相似度的一種折中處理,同時考慮空域信息和灰度相似性,達到保邊去噪的目的。其能夠做到在平滑去噪的同時還可以很好的保存邊緣。結合OpenCV,采用cv2.bilateralFilter 函數,可以實現對雞蛋圖像的雙邊濾波,效果如圖9 所示。
圖9 雙邊濾波后的完整蛋及裂紋蛋效果
高斯濾波是對整幅圖像進行加權平均的過程,每一個像素點的值都由其本身和鄰域內的其他像素值經過加權平均后所得[12],其具體操作是:用1 個模板(或稱卷積、掩模)掃描圖像中的每一個像素,用模板確定的鄰域內像素的加權平均灰度值去替代模板中心像素點的值。結合OpenCV,采用cv2.GaussianBlur 函數,可以實現對雞蛋圖像的高斯濾波,效果如圖10 所示。
圖10 高斯濾波后的完整蛋及裂紋蛋效果
中值濾波法是在1 個周期內連續采集多個數據,將數據按大小排列,取中間值為有效值。該法能夠有效去除偶然的脈沖干擾,對溫度、液位的變化具有良好的濾波效果,但不適用于流量、速度等信號變化較快的場景[13]。結合OpenCV,采用cv2.medianBlur 函數,可以實現對雞蛋圖像的中位濾波,效果如圖11 所示。
圖11 中值濾波后的完整蛋及裂紋蛋效果
通過對比可知,中值濾波算法相較于其他2 種,還原度更高,對于過高或過低的噪點消除更靈敏,且圖像更加清晰。在本系統設計過程中,圖像預處理側重于如何突出裂紋特征,而中值濾波正好符合該需求。故本系統采用中值濾波算法進行濾波降噪,再進行后續操作。
2.2.4 特征提取
在前面的步驟執行后,便可對雞蛋圖像進行裂紋特征提取。圖像的邊緣檢測用于提取圖像特征,在圖像分割、圖像識別、人臉識別等技術中提供了基礎處理[14]。
常用的邊緣檢測算法有Sobel 算子、Canny 算子、Roberts 算子以及Laplacian 算子。Sobel 算子是1 組用于邊緣檢測的簡單、高效方向算子,在處理灰度漸變或噪聲較多等方面效果好;且其更注重邊緣檢測效率,邊緣檢測效果更好[15]。Canny 算子是1 個多級邊緣檢測算子,其在一定程度上保證圖像邊緣特征,顯著減少圖像數據規模[16]。Roberts 算子是1 種簡單而高效的算子,它采用2×2 模板,利用圖像中對角線方向相鄰像素差值近似梯度幅值來檢測目標邊緣[17]。拉普拉斯算法又稱拉普拉斯梯度函數[18],對圖像進行拉普拉斯變換可以增強圖像邊緣,利于提取目標的邊緣,對圖像進行分割、目標區域識別、區域形狀提取等。使用拉普拉斯檢測特征,可以強調語義內容特征,誤差傳播后,可以更好地維持原圖的語義內容[19]。這4 種邊緣檢測算法的對比及評價如表5 所示。
表5 4種邊緣檢測算法的對比及評價
結合OpenCV,采用cv2.Canny、cv2.Sobel、cv2.Laplacian、cv2.Roberts 這4 個函數可分別對雞蛋圖像(包括完整蛋和裂紋蛋)進行相應的邊緣檢測算法?;谶@4 種算法的完整及裂紋蛋圖像分別如圖12、圖13、圖14、圖15 所示。通過對比可知,采用Canny 算子的邊緣檢測方法相對于其他算子更加能夠反映雞蛋的裂紋特征;Sobel 算子雖也能較好地反映,但其更強調雞蛋外殼輪廓,在后續過程的形態學運算中會起到適得其反的效果。
圖12 采用Canny 算子的完整蛋及裂紋蛋圖像
圖13 采用Sobel 算子的完整蛋及裂紋蛋圖像
圖14 采用Laplacian 算子的完整蛋及裂紋蛋圖像
圖15 采用Roberts 算子的完整蛋及裂紋蛋圖像
綜上所述,本系統設計的邊緣檢測選定Canny算子作為后續形態學運算方法的基礎。
2.2.5 裂紋特征增強
裂紋特征增強的主流方法是數學形態學運算方法,該方法是一種以嚴格數學理論為基礎的用于非線性圖像處理和分析的理論[20]。它在形狀識別、邊緣檢測、紋理分析、圖像恢復和增強等領域得到了廣泛應用[21]。數學形態學最基本的運算[22]主要包括膨脹運算和腐蝕運算[23]。以上過程將采用Canny 算子的邊緣檢測得出裂紋蛋圖像作為本過程的基礎,結合數學形態學中的膨脹和腐蝕2 種運算方法對雞蛋進行“減運算”,即將雞蛋圖像通過一系列操作除去無關裂紋的部分如蛋殼輪廓、亮斑等,并凸顯出雞蛋裂紋的特征,得出的雞蛋圖像裂紋處相比于蛋殼輪廓及亮斑更明顯。具體流程如圖16所示。
圖16 雞蛋圖像數學形態學處理流程
腐蝕操作時取每一個位置的矩形鄰域內值的最小值作為該位置的輸出灰度值。這里的鄰域可以是矩形結構、橢圓形結構、十字交叉形結構等。其目的是將雞蛋整體“淡化”,消去外殼輪廓及亮斑,同時也會一定程度上淡化裂紋。利用OpenCV 中的cv2.erode 函數可以實現對圖像進行腐蝕運算。
膨脹相當于腐蝕反向操作,圖像中較亮的物體尺寸會變大,較暗的物體尺寸會減小。在腐蝕的基礎上,圖像只剩裂紋部分。利用膨脹可以使裂紋特征相對背景有一定程度擴張,從而使裂紋更加明顯。利用OpenCV 中的cv2.dilate 函數可以實現對圖像進行膨脹運算。
具體代碼如下:
經過試驗,可以得到最終的雞蛋裂紋特征圖像。程序實現腐蝕膨脹,經處理的裂紋特征圖像最終效果如圖17 所示。裂紋特征圖像經YOLOv5[24](一種單階段目標檢測算法)預先載入的裂紋圖像訓練集進行判斷,可得出該雞蛋為裂紋蛋或完整蛋的不同結果,并反饋至單片機。
圖17 經處理的雞蛋裂紋特征
雞蛋分揀實現是回收破損的雞蛋,留下完整蛋繼續傳輸,進行下一生產環節,如包裝、加工等。雞蛋經視覺處理及分類后,所得完整或裂紋的結果會反饋給單片機;單片機控制撥片對雞蛋進行分揀:若為完整蛋,則單片機保持舵機不翻轉;若為裂紋蛋,則使其翻轉45°,同時單片機將雞蛋檢測時間、檢測總數、破損數量、破損率等數據,用JSON 格式傳輸給小程序,用戶可在小程序實時收到該數據集,總體實現流程如圖18 所示,分揀流程模型如圖19 所示。
圖18 雞蛋分揀總體實現流程
圖19 雞蛋分揀流程模型
依據小程序,用戶可更好地掌握雞蛋的裂紋情況,及時對雞蛋進行調整。視覺模塊通過無線通信模式,將雞蛋檢測數據反饋至小程序,呈現效果如圖20 所示。
圖20 雞蛋分揀情況小程序界面
基于機器視覺的裂紋雞蛋分揀系統通過圖像采集、處理,實現分類及分揀裂紋雞蛋的功能,應用了單片機系統對撥片進行控制,單片機屬嵌入式系統,集軟硬件一體、價格低,能夠在復雜環境中工作,相比傳統的PLC 系統成本低、工作適應能力強、效率高[25],更適合于裂紋雞蛋分揀。該系統目前仍存在一定問題,如視覺攝像設備對于圖像的采集精度較有限,對特征圖像的分類模型仍需加強訓練等,期待在未來進行改進。
此外,該系統針對雞蛋表面是否存在裂紋實現識別揀出,可部分解決雞蛋生產的自動分揀任務。在實際的雞蛋生產鏈中,存在著雞蛋胚體死胚[26]、污染胚等胚體缺陷問題[27],也屬于不符合生產及銷售范疇。下一步研究將結合機器視覺、圖形分析等手段,對于上述復雜特征實現檢測的功能,并結合更高效的分揀機構,實現全面自動化篩選。