产品分9码和10码两种,产品通过吸盘抓取动态随机来料,需要方案适应两种产品且500ms内输出结果通过TCP发送并存图。(被测物为下图中被吸盘抓取的打孔PCB料板,通过背光源打亮进行识别)
✈ 实物检测图:
物料来料会出现无标志、无信号的随机水平镜像翻转,且偶发出现码变形、成像模糊、码孔成像粘连、码孔大小不一的情况,复杂的成像工况使得常规的匹配标志位读码算法难以稳定识别。
首先通过轮廓匹配识别8421码的孔位置,随后使用脚本模块通过8421码的标志位和列标志位识别8421码的XY镜像并获取8421码外接四边形的四个顶点,最后使用OpenCV的透视变换将变形的8421码进行矫正修复(下图为透视变换效果),以方便后续的8421码解码。
① 需要在模糊甚至粘连的成像情况下准确的定位到每一个圆孔。经过测试发现VM4.3新增的轮廓匹配模块相比快匹配或高精度匹配在相同的参数设置下有着更好的识别率和更低的耗时。
② 对于8421码进行识别修正并重绘
1)删除上一步重复识别的点
2)通过标志位点排序规律区分码是否需要X或Y镜像。(9码需要通过最后一排左右两点穿过的点个数是否为8,判断是否X镜像,并且通过Blob计数排除码结果全为8和9的情况)
3)通过OpenCV算子计算出透视变换矩阵以重绘并修正8421码
③ 进行8421码特征识别,以9码为例,需要识别Y轴点间距和X轴向的间距1和间距2,以便解码算法处理。
④ 进行8421解码,通过上一步识别到的XY间距信息。
1)将包含有效负载信息的码点按X轴分类
2)将各X轴码点按Y轴大小排序并解析出结果
3)将各X轴解析结果拼接为最终结果并输出
解决方案:
① 通过OpenCV的ConvexHull算子找到8421码点集的凸包,凸包点集所形成的外轮廓中连续直线最长的一端为8421码底部。
② 通过判断两侧8421码点位置是否符合标志位特性(两侧的三个凸包轮廓点的间距比例和所形成的夹角)即可判断是否需要Y镜像。
难点2:成像偶发会出现变形、倾斜的情况,会导致后续的8421码解码出错
解决方案:通过OpenCV的透视变换将变形8421码点集进行修正并重绘。
1.当识别成像模糊且存在X镜像的图片时,能准确识别并且正确读出码信息。
2.当码结果全为8或9,8421码Y轴方向存在高度相似的情况下,也能准确识别并且正确读出码信息。
① 方案在客户端现场运行的算法耗时约200ms,能够适应码变形、成像模糊、码孔成像粘连、码孔大小不一的复杂成像情况。现场共两台机使用了本方案,每天每台约识别1000张板,调试完成后8421码识别率达到100%。
② 实现复杂成像工况下的8421码读取,避免了客户大量的人工读码操作;方案未使用深度学习模块,可以降低客户的工控机成本和VM加密狗成本;100%的码识别概率降低了客户的后续维护调试成本。
可点击下方观看现场效果视频