一、上料缺陷检测
设计思路
a.导入图像源后,分为两个分支,分别使用目标检测模型检测缺口和缺角的缺陷,用图像分割模型检测隐裂和崩边的缺陷。
b.目标检测分支下由变量计算、条件分支、格式化组成。首先当目标检测检测出存在缺口或缺角时,变量计算获取其矩形框的长宽,由此计算其面积大小。接着通过条件分支分成两个格式化模块,其一为检测出存在缺口或缺角时进行格式化,输出内容为“{类别名称}:{面积}”并将其置于矩形框中心点进行显示;其二为未检测出缺口及缺角时进行格式化,输出内容为“无缺口及缺角”并将其置于图像中心进行显示。图像分割分支下配合Blob标签分析,此模块将图像分割所获得的标签及其面积进行可视化输出。
c.由于需要赛题需要显示面积,而目标检测模块显示的矩形框无法显示面积信息,因此使用图形收集模块收集矩形框轮廓,叠加上一步的变量计算中计算出的面积以便使其显示至运行界面。接着再次放置变量计算模块,此模块用于将目标检测及图像分割检测到的缺陷个数相加输出缺陷总个数。
d.由于我们检测TCP通信及日志保存时,发现若仅使用单一格式化模块发送信息,在换行后会产生信息丢失的问题,因此我们建立了六个分支,分别使用六个格式化模块保存图像名称信息、缺陷总个数、缺陷名称、缺陷面积、缺陷位置X及缺陷位置Y。
e.使用条件检测模块,若变量计算出的缺陷总个数为0,则输出OK;若缺陷总个数不为0,则输出NG。最后构建六个全局变量,使用发送数据模块,将上述六个格式化结果分别发送至相应的全局变量。
模型选择
在上料缺陷检测中,我们分别选择目标检测和图像分割两种模型来识别缺陷结果。最初我们尝试使用目标检测或图像分割同时检测四种类型的缺陷,但对缺口缺角使用图像分割的方法时,很容易出现背景的误检及漏检,模型可能会将正常的角检测成缺角,或者分不清缺口和缺角,结果混乱。而由于崩边过于微小,对崩边使用目标检测效果较差,所以使用同一个模型检测四种类型的缺陷不太适合本赛题。
因此,我们最终对缺口缺角使用目标检测模型,由于其目标较大,也较为适用目标检测算法。对于隐裂和崩边,在目标检测中,对于崩边的查找效果特别差,而隐裂在目标检测和图像分割中效果都很不错。但是,由于Blob标签分析必须要多分类才能准确输出标签信息,而且图像分割是像素级的检测,对小目标缺陷的检测中得到的缺陷面积会更加准确,因此综合下来选择用图像分割来对缺陷和崩边进行检测,能得到不错的分割效果。
缺陷检测效果
图4为上料缺陷检测运行效果示意图,包括缺陷图以及OK图的检测,完整实现了对缺口缺角及隐裂崩边的检测显示。
二、下料四相机定位及测量
设计思路
由于四个相机需要检测的内容一致,因此接下来介绍其中一个流程的设计思路,其余三个流程的思路与之相同。
a.导入图像源后,使用训练好的目标检测模型定位Mark点,并采用格式化模块输出Mark点中心坐标。
b.由于所给图像之间存在位置的稍许偏差,利用快速匹配模块将位置相对较正的图像作为下料模板并将图像与之匹配方便后续的位置修正。为减小图片模糊的情况对直线查找等模块造成的影响,使用图像增强对图片进行锐化处理。
c.由于赛题需要查找两条边界线、第一栅线及第二栅线,因此我们建立了四个分支,分别查找上述直线。在直线查找完毕后,分别使用线线测量模块测量两条栅线间的距离及两条边界线之间的夹角,使用点线测量模块测量Mark点到边界的距离。由于点线测量模块得到的是垂足点,因此在点线测量模块后加入几何创建模块绘制垂线。分别在上述四个分支最后加入格式化模块,使赛题所需的文字显示到运行界面上。
d.使用图形收集模块将各个检测到的渲染结果显示到运行界面上,将工作日志及TCP通信所需的结果格式化,最后构建一个全局变量,使用发送数据模块,将上述格式化结果发送至全局变量中。
模型选择
在AI算法平台众多算法中,根据下料定位的要求和条件,图像分割与目标检测是比较符合题目要求的,图像分割是像素级的检测,准确到边缘信息,而目标检测是使用目标建议框将目标框出来,是非像素级的检测。
目标检测输出是一个矩形框,矩形框中心点能直接对应上赛题所需要的Mark十字中心点;而图像分割的结果是一个轮廓,不利于找到图像中十字的中心点。由于赛题最重要的目的是定位Mark十字中心点,因此目标检测方法相对图像分割方法更利于本赛题的实现。
三、日志、tcp与运行界面
如图示,为运行时的示意图,可见上料和其所对应的下料中的各种检测信息可以清晰的显示在运行框中。当检测到上料缺陷时,NG模块会出现“NG”标志,当上料图片不存在缺口及缺角时,其上会出现“无缺口及缺角”文字,若同时也不存在崩边及隐裂时,NG模块会出现“OK”字样。