郭建军,杨 霖,张恩威,刘双印,李俊勇,姚赵忠,谢彩健
(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],也属于不符合生产及销售范畴。下一步研究将结合机器视觉、图形分析等手段,对于上述复杂特征实现检测的功能,并结合更高效的分拣机构,实现全面自动化筛选。