朱志伟 张淋 毛翔舶 侯群 周俊
摘 要:智能物料搬运机器人在化工、医药、物流等行业中得到了广泛的应用。智能物料搬运机器人可提供定位、移动避障、路径规划、物料识别、二维码识别、信息接收等重要功能。其中视觉识别是机器人运转中非常重要的一个环节。文章基于OpenMV模块对物料颜色识别和二维码识别进行深入的研究,对识别技术方法进行相应的改进和优化。在相应场景中拍照选取合适颜色阈值,对二维码图像进行预处理后完成译码,提高机器人识别的速度和准确率。
关键词:视觉识别;OpenMV;物料搬运;图像处理
中图分类号:TP391.4;TP242 文献标识码:A 文章编号:2096-4706(2023)19-0099-04
Research on Fast Visual Recognition Technology for Material Handling Robot
ZHU Zhiwei, ZHANG Lin, MAO Xiangbo, HOU Qun, ZHOU Jun
(School of Artificial Intelligence, Jianghan University, Wuhan 430056, China)
Abstract: Intelligent material handling robots have been widely used in industries such as chemical industry, pharmaceutical industry, and logistics industry. Intelligent material handling robots can provide important functions such as positioning, mobile obstacle avoidance, path planning, material identification, QR code identification, and information reception. Visual recognition is a very important part of robot operation. This paper conducts in-depth research on material color identification and QR code identification based on the OpenMV module, and correspondingly improves and optimizes the recognition technology and methods. Select the appropriate color threshold for taking photos in the corresponding scene, preprocess the QR code image, and complete decoding to improve the speed and accuracy of robot recognition.
Keywords: visual recognition; OpenMV; material handling; image processing
0 引 言
近年来,大学生工程训练竞赛非常热门,其中便包含智能物流搬运赛项。该赛项目的为设计物料搬运机器人,其通过扫描二维码或Wi-Fi网络通信等方式领取搬运任务,在指定的工业场景内行走与避障,并按任务要求将物料搬运至指定地点并精准摆放。物料搬运机器人在生活中是十分常见的项目,运用于各行各业。看似小巧简单,却可以提高效率,节省人力成本,适应对于人来说的恶劣环境。可见,物料机器人的研究是具有重大意义的。其中,物料搬运机器人在工作场景中获取相关信息,抓取运送物料都需要依赖于摄像头的视觉识别技术。
本文主要基于大学生工程训练竞赛项目,使用低成本、适用性更高的OpenMV模块,对于机器人工作过程中的物料识别和二维码识别进行深入研究。在物料的颜色识别中利用阈值色块比对来识别目标物料。利用OpenMV模塊内置函数库对二维码灰度化、中值滤波、二值化、开运算处理后进行识别译码,提高视觉识别的准确率。物料搬运机器人系统组成如图1所示。
1 颜色识别
颜色识别部分主要是在物料机器人接受任务后,移动至物料区进行物料分辨抓取。该部分使用到OpenMV模块。OpenMV是一款可编程摄像头模块,内置了丰富的数字图像处理算法库函数,使用单片机处理器与其接口可以非常容易调用内部库函数。
在比赛中,用到的物料有红、绿、蓝三种颜色并且它们的形状大小相同。因此在物料识别的过程中主要考虑区分颜色进行识别物料。在颜色的识别过程中,通过阈值进行二值化处理之后,形成简洁的二值图像来分辨确认识别颜色。
第一步要进行的是颜色阈值的选取,需要利用到OpenMV IDE中的阈值编辑器。使用OpenMV摄像头对物料进行拍照,上传至阈值编辑器中,得出相对应颜色阈值结构color =(MinL,MaxL,MinA,MaxA,MinB,MaxB),元组里面的数值分别是LAB的最大值和最小值。首先采集红色物料的阈值范围,拖动编辑器中LAB值的滑动选择按钮,使红色物料在右侧的二进制图像显示成白色,得出红色物料的LAB阈值为(44,75,8,77,-44,21)。使用同样的方法得出绿色物料的LAB阈值为(50,60,-48,-30,15,38)、蓝色物料的LAB阈值为(61,95,-23,-10,-30,-10)。然后利用OpenMV内置函数库中的image.find_blods()函数对色块进行查找,比对色块和相应阈值范围来确认物料颜色。识别到绿色物料的情况如图2所示。部分实验代码如下:
red_thredshold = (44, 75, 8, 77, -44, 21)
blue_thredshold = (61, 95, -23, -10, -30, -10)
green_thredshold =(50, 60, -48, -30, 15, 38)
img = sensor.snapshot()
color_blobs=img.find_blobs([red_thredshold,blue_thredshold,green_thredshold], x_stride=25, y_stride=50, area_threshold=1000)
#x_stride为查找色块x方向上最小宽度像素。
#y_stride为查找色块y方向上最小宽度像素。
#area_threshold为面积阈值,如果被框中面积小于此值,将会被过滤。
2 二维码识别
在比赛环节中,物料搬运机器人通过扫描给定的二维码来获取搬运任务的信息。二维码以黑白相间的方格进行存储信息,可以储存汉字、数字、照片等信息,信息储存量大,保密性和可靠性也很高。为了提高二维码在识别过程中的准确性和快速性,先对二维码进行图像预处理后再进行后续译码步骤。二维码图像处理流程如图3所示。
2.1 图像灰度化
普通图像使用红(R)、绿(G)、蓝(B)三种基础色进行混合叠加形成各种颜色。该图像中的每个像素點均会占到三个字节来表示颜色的RGB,占用的存储空间更大。二维码是由0、1编码组成的黑白图像,对其进行灰度化处理后,可以大大减少计算机的运算量从而提高运算速度,并且在识别过程中不会产生任何影响。在OpenMV模块中可以直接调用image.GRAYSCALE()函数拍摄灰度图像。部分代码如下:
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)#设置图像灰度格式
2.2 中值滤波
由于成像系统、传输介质和记录设备的不完善,图像往往会受到各种噪声的污染。一般噪声通常表现为明显孤立的像素点或像素块。中值滤波器将处理像素邻域中的像素使用中值来代替,使像素的灰度值与周围邻域像素比更加接近,从而消除孤立的噪声点,达到很好的滤波效果。具体方法是使用某种结构的二维滑动模板,将模板内像素按照像素值的大小进行排序,生成单调的二维数据序列。二维中值滤波输出公式为:
g (x,y) = med{ f (x - i,y - i)},(i,j) ∈ S
其中,f (x,y)、g (x,y)分别表示原始图像和处理后图像。S表示模板窗口,通常为3×3,5×5区域,也可以是不容的形状,如线状、圆形、十字形、圆环形等。
在OpenMV中,通常调用img.median()函数运行中值滤波。部分代码如下:
while(True):
clock.tick()
img = sensor.snapshot()
img.median(1, percentile=0.5)
#第一个参数“1”为内核大小。N对应于((N×2) + 1)2的内核大小。
#percentile控制内核使用值的百分位数,从N×N邻域中选择。
#默认情况下使用各像素相邻的中心替换,即0.5。
2.3 二值化
二值化处理是指把原本彩色图像矩阵中的像素点RGB值变成黑色或白色。二值化处理后使原本的颜色范围从256种精简到2种,提高计算速度。在二值化处理过程用,使用到大律法,其处理速度更快,能够较好地保留目标物体的形状,轮廓清晰、容易辨认。
在OpenMV的代码编写中用到img.binary(thresholds, invert=False)函数,它通过遍历灰度图像中的像素点,判断像素是否位于阈值列表thresholds的范围内,将图像中的所有像素设置为黑色或白色。thresholds必须为元组列表。对于灰度图像,每个元组中需要设置最小灰度值、最大灰度值,只考虑落在这些阈值范围内的像素区域。处理完成后的二值化图像如图4所示。
2.4 形态学处理
形态学图像处理的基本操作包括膨胀、腐蚀、开闭操作、TOP-HAT变换、黑帽变换等。主要应用于噪声消除、边界提取、区域填充、细化、粗化等。最常用到的是膨胀和腐蚀。而膨胀和腐蚀的组合便形成了开运算和闭运算。
本文使用到开运算(先腐蚀后膨胀)处理,用于消除图像中的小物体,在细长的点上分离物体,并平滑较大物体的边界,而不会显著改变它们的面积和形状。
本文实验代码利用img.erode(size, threshold=Auto)函数对图像边缘进行侵蚀,从分割区域的边缘删除像素,去除边缘相邻处多余的点。其通过卷积图像上((size×2) + 1)2像素核来实现,如相邻的像素集的总和小于threshold,则对内核中心像素进行归零。size为内核的大小。threshold用来设置去除相邻点的个数,threshold数值越大,被侵蚀掉的边缘点越多,边缘旁边白色杂点少;数值越小,被侵蚀掉的边缘点越少,边缘旁边的白色杂点越多。腐蚀处理完后图像如图5所示。
利用img.dilate(size, threshold=Auto)函数对图像边缘进行膨胀。threshold用来设置去除相邻点的个数,threshold数值越大,边缘越膨胀;数值越小,边缘膨胀的小。通过开运算处理后,图像更加清晰,更容易识别。膨胀处理完后图像如图6所示。
2.5 译码
在二维码的译码工作中,首先寻找二维码三个角的正方形开始定位,定位后获取符号图像。深色于浅色分别为“0”和“1”。然后读取格式版本信息,根据模块的排列规则读取符号字符,恢复信息的数据和纠错码字。利用纠错码字检测对应的信息,发现并更改错误。最后按照模式指示符和字符计数指示符划分数据码字,按照模式译码翻译出数据字符并输出结果。最终二维码识别输出结果如图7所示。
在OpenMV中可以直接调用img.find_qrcodes()函数进行译码。部分实验代码如下:
while(True):
img=sensor.snapshot()
img.lens_corr(1.8)
for code in img.find_qrcodes():
output_str="%s" % code.payload()
#output_str为二维码内容
3 结 论
本文针对大学生工程训练大赛中物料搬运项目视觉识别部分问题,对物料的颜色识别、二维码识别进行优化改进。在颜色识别的部分,通过对图像处理、拍摄对应环境下的物料图像,选取合适的颜色阈值,使识别更加精准。在二維码识别部分,探讨图像处理过程和二维码译码步骤,优化图像处理方法完成二维码快速识别。提高视觉识别的准确率和识别速度,有利于完成比赛任务,提高比赛成绩。
参考文献:
[1] 夏胜杰,杨昊,艾伟清.基于Arduino单片机和OpenMV的颜色目标定位与跟踪小车的设计与实现 [J].常熟理工学院学报,2021,35(5):59-64.
[2] 耿浩楠,周磊,刘新成,等.基于OpenMV的二维码检测技术在自动分拣系统中的应用 [J].工业控制计算机,2022,35(12):11-13.
[3] 彭洋洋,周苗,陈航.二维码识别技术在快递签收中的应用 [J].软件,2019,40(8):49-51.
[4] 胡铃樟.基于手机二维码的仓库管理系统研究 [J].网络安全技术与应用,2014(3):13+16.
[5] 曾一凡,杨振南,王亚勇.基于STM32的智能物料搬运机器人的设计 [J].仪器仪表用户,2023,30(1):9-12.
[6] 张佳路,任彬,赵增旭.基于颜色识别的智能物料搬运机器人 [J].自动化应用,2020(1):59-61.
作者简介:朱志伟(2001—),男,汉族,湖北孝感人,本科在读,研究方向:人工智能。
收稿日期:2023-04-07
基金项目:湖北省大学生创新创业计划项目(S202211072068)