产线零件特征图形识别的技术研究
2021-02-28苏州工业职业技术学院机电工程系王赵雨周家豪
苏州工业职业技术学院机电工程系 王赵雨 徐 黎 仝 奥 刘 晨 周家豪 鹿 霖
使用OpenCV开源视觉库,通过色域转化、轮廓提取、角点识别等功能实现对指定产品零件的特征图形识别。使用开源控制器树莓派及其搭载的Pi Camera摄像头获取机器人携行工件的原始图像,并对图像进行滤波,灰度转化等处理,再对其轮廓进行提取、拟合等操作,最终获得指定几何形状的识别结果并进行标定。结果表明,作为一项基于开源软硬件的解决方案,可实现对指定零件上的三角形,圆形,正方形,矩形轮廓进行识别判断,并可作为产线的一部分,与机器人进行联动。
随着中国制造向中国”智”造转型升级,对生产效率的要求也日益提高,借助传统的“打光透亮”和“大小格栅”方法对流水线上零件进行物理检测质检和分类的工作变得越来越困难,对于借助机器视觉进行进一步精细核验的需求越来越迫切。目前市场成熟的视觉软件和成品智能相机源码多为国外企业保密资料,国内相关信息又过于零散,且成熟代码多为基于商业软件MATLAB、Halcon编写。
本文主要研究了使用开源硬件树莓派作为控制器,通过开源视觉库OpenCV对某产线零件上典型特征图形进行识别的方法,同时加入了机器人与树莓派的数据通信作为流程控制与结果获取。此类方法可以应用于工业生产中对于零件轮廓的分类和零件加工是否到位进行检测,具有简便可靠等特点,易于在生产中应用。本案例所使用的检测对象即为某型号轮毂零件。
1 系统硬件方案设计
系统硬件框图如图1所示,使用IRB120机器人作为上位机使用socket指令与树莓派进行TCP通信,用于下达拍摄指令及接收图像识别结果;使用树莓派自带的CSI接口的Pi Camera摄像头进行图像拍摄,获取目标的图像数据;树莓派4B作为控制器,对采集到的图像数据进行处理分析;HDMI显示屏用于实时显示结果。实际使用时,无屏幕显示亦可。
图1 系统硬件框图
2 系统及软件准备
由于树莓派搭载的操作系统为Raspberry Pi OS,属于Linux系统,所以在软件安装上与常用的Windows系统略有不同。其所有操作均通过终端(terminal)命令行执行,下载OpenCV源码需借助“wget-o”指令从目标网站(官方提供的是github链接)下载zip格式压缩包。然后再使用“unzip“指令进行解压。解压后的库文件经“CMake”编译后即可正常使用。如果不能正常编译安装,应首先考虑使用“sudo apt-get update&&upgrade”更新系统。此外如果希望程序能够稳定运行还需通过“sudo apt-get install”指令安装必要的配套库如OpenCV数值优化库“libatlas-base-dev gfortran”等。
3 图形识别过程
图2所示为该产线零件轮廓识别过程流程图,IRB120机器人作为上位机下达指令,相机进行拍照,树莓派对相机采集的图像数据进行处理,包括图像预处理,轮廓拟合与提取,角点检测、形状判断,面积筛选,最终将识别结果反馈给IRB120机器人。整个过程可循环进行。
图2 轮廓识别流程图
3.1 图像预处理
通过摄像头拍照获取的原始图像如图3所示。主要识别中心位置的方形、三角形、长方形和圆形图案。由于主要是对图像做图形识别,而读入的初始图像信息包含的无用信息和干扰项过多,如大量不可视的噪点以及做形状识别所不需要的色彩信息,所以首先对图像进行高斯模糊GaussianBlur()使某些不明显的噪声轮廓被率先滤除,然后再进行色域转化,把原BGR图成GRAY格式(如图4所示)。
图3 原始图像
图4 预处理后的图像
3.2 边缘粗提取
图像轮廓特指目标图像中灰度值突变的区域边界,目前业界多用Canny算子进行轮廓提取。经过多次尝试,测试设定阈值为25,75,使用默认内核,内核为3,使用Canny算子提取后轮廓如图5所示。可见目标图案轮廓,但仍有很多其他边缘轮廓,如轮毂、背景干扰线等。
图5 Canny算子处理后的粗轮廓图
3.3 对粗提取出的轮廓通过部分图形操作减少杂波
在获得的粗轮廓图基础上,再使用膨胀dilation和侵蚀erosion的图形学运算可以进一步削减Canny算子提取出的干扰轮廓,以避免对后续识别产生影响。此处使用了10X10的矩形内核,矩形内核由getStructingElement中的参数MORPH_RECT确定,其他的还有十字形,椭圆形,分别适合不同场合。具体对照如图6,A为处理前,B为处理后。
图6 侵蚀膨胀处理对照图
3.4 对处理过的轮廓进行识别和标定
使用Canny生成的轮廓图后,借助FindCounter函数对其进行轮廓检测。FindCounter函数可将较为抽象的轮廓转化为易于处理的点集。其参数首先为输入图像,其次是接收轮廓的容器此处使用vector二重容器。再次为轮廓层级。接着是一些如阈值等可选参数。为了实现图形判断,引入conPoly函数筛选出轮廓点集中含拐点的特殊点,其中填入counter.size()。接着使用approPolyDP对获取的点集进行多边形拟合,最后再通过drawContours函数将获得的轮廓进行标定,效果如图7所示。可见,除了将检测的轮毂中心图案标定出来之外,仍旧还有很多干扰轮廓。
图7 轮廓标定
故在通过FindCounter获取点集之后,调用counterArea函数计算轮廓面积。将计算得到的轮廓面积,筛除其中小与1000的部分后再进行后续操作。最终获得如图8所示效果。至此,成功识别目标形状,并分别予以标定。
图8 筛选
FindCounter函数识别轮廓对于照明条件有较高的要求,如果照明条件不够理想则会出现难以准确检测的问题。目前已知的,也是最简便的方法为在相机周围加装灯带,可显著提高准确率。另外在在不变修改照明条件的情况下,可以考虑将相机设置为锁帧,亦可削弱一定的影响。
4 IRB120与树莓派的TCP通信
整个零件特征图形识别流程由IRB120机器人进行控制,所以在设计中,通过在树莓派上建立TCP服务器,而IRB120作为TCP客户端对树莓派做动作请求。在树莓派上通过软件编程实现,并通过关键词触发,实现对图形识别流程的控制。机器人端则使用指定的socket指令实现,且需开启616-1 PC-interface选项支持。
本文使用树莓派4B和随机搭载的Pi Camera摄像头搭建了简易可靠的视觉检测系统,运用OpenCV对产线零件特征图形进行识别检测,结果显示该系统可以轻松准确地检测出正方形,圆形,三角形,矩形,且整个流程可由上位机IRB120机器人实现控制。相机端软件依靠C++语言的固有特性,运行高效且对CPU处理能力要求不高,有利于多平台移植,使用通用TCP/IP套接字通信,更便于接入工业网络。同时完全未涉及付费或保密内容,有利于进一步降低生产成本及推广使用。