水表广泛用于日常生活与工业当中, 水表作为计量收费的依据属于国家强制检定的工作器具, 必须经过严格的检定并检定合格才能投入使用. 所以生产水表的企业或计量部门需要对水表的示值误差按照相关部门制定的规程进行性能检定. 传统的水表检定, 主要依靠人工来对水表进行装夹、校验、计算记录和卸表工作, 通过人工检定的方式不可避免的存在着工作量大, 操作过程中存在较大的人为误差, 效率低等问题. 随着工业的发展, 各种生产线自动化水平的不断提高, 为满足生产与市场需要, 提高生产效率, 降低劳动强度, 将传统的人工水表检定线改造成自动化流水线式检定线已成为一种必然趋势. 针对水表检定线的自动化改造, 有许多学者进行了相关的研究, 在水表自动读数方面, 现主要有基于水表梅花针转过的齿数计数[1,2]和指针识别获取水表读数[3,4], 都有不错的效果, 在自动水表检定装置方面, 周兵等[5]提出了一种静态容积法水表自动检定装置, 詹志杰等[6]提出一种基于流量时间法、活塞为标准器的家用冷水水表示值误差动态全自动检定方法. 但这些研究主要集中在水表的流量检定和校验上, 而在水表的上料, 装夹以及卸表工作鲜有研究.
目前, 整个水表检定过程中还存在着许多需要人力的重复操作如水表的上料、装夹和分拣等, 在这些阶段采用工业机器人代替人工进行工作可以有效减少人力需求, 提高工作效率, 并进一步增加检定线的自动化程度, 实现水表检定真正意义上的全自动检定. 当前, 国内已有了全自动电表检定线, 能实现机器人的自动挂(摘)表[7]. 然而, 此类的检定线并不能简单地应用于水表检定线上, 原因有多方面: 一是电表具有统一的国家标准, 且形状是规则的立方体, 而水表没有统一的国家标准, 且形状也不规则; 二是在水表检定过程中, 流经水表的水流是有向的, 并且多个水表需要串联连接检定, 这要求机器人在抓取过程中要能准确判断水表的方向和姿态; 三是在水表检定流程上需要抓取的环节有多个, 背景不一且较为复杂. 由于检定线上需要检定的水表型号通常有多种, 每种水表的参数又有所差别同时后续的检定也需要进行型号的区分以放置到对应的检定装置中, 因此需要对水表进行分类抓取. 然而, 水表之间有差别的同时又具有较大的相似性, 这对于基于人工设计特征的模式识别方法是比较困难的问题. 针对上述问题, 本文设计了一个基于深度学习网络YOLOv3[8]的水表抓取系统, 该系统通过YOLOv3网络进行目标水表检测, 获得水表的类型和相应水表位置, 再进行水表的位姿检测获取水表抓取点的像素坐标和姿态角, 最后驱动机器人进行抓取、调整姿态并放置. 本文的水表抓取系统在进行抓取时不需要使用特定的托盘装载水表, 可以实现机器人在不同背景下对流水线上不同型号水和不同姿态水表进行分类抓取与位姿调整, 抓取成功率较高, 在一定条件下受外部环境影响小, 可靠性高.
1 水表抓取系统设计水表抓取系统的框图如图1所示, 整个系统分为3个部分即视觉检测识别部分、机器人定位部分和机器人控制部分. 视觉检测识别部分使用CCD摄像头获取检定流水线上的图像, 为减少检测时间, 将原图分辨率改为416×416输入到训练好的YOLOv3的网络模型获取水表区域坐标与示数区域坐标, 根据得到的坐标将相关区域分割出来, 其中水表区域用来计算抓取点即水表表盘圆心的坐标, 示数区用于检测其长边所在的直线, 根据示数区位于出水口方向且与水表横向垂直的特性, 结合得到直线再结合表盘圆心坐标就可以确定水表的位姿. 机器人定位部分则通过手眼标定得到相机和机器人坐标系的旋转矩阵和平移矩阵, 进而将圆心的像素坐标和角转化为机器人坐标系下的坐标与姿态. 机器人控制部分负责驱动机器人移动并进行水表的抓取, 并根据水表需要放置的位置控制机器人移动到指定位置进行放置.
2 YOLOv3模型 2.1 YOLOv3的网络结构
YOLOv3为YOLO[9]算法的第3个版本, 属于One-Stage检测算法, 这类算法将检测问题转换为回归问题, 将物体的定位和分类放在一个步骤完成, 直接在输出层回归边界框的位置及其所属的类别, 因此在检测速度上获得了较大的提升. YOLOv3在YOLOv2的基础上进行了改进, YOLOv3网络结构如图2所示, 在特征提取方面, YOLOv3提出了新的特征提取网络Darknet-53,整个特征提取网络完全由卷积层组成, 没有用到池化操作, 同时借鉴了ResNet[10]的思想添加许多的残差模块防止训练时梯度爆炸或消失以减少训练难度. 在预测方面, YOLOv3中抽取了3个不同尺度的图像特征进行多尺度的预测, 分别对特征图大小为13×13、26×26、52×52的3个尺度进行二倍的上采样融合并在每个尺度的特征图上独立做检测, YOLOv3中将图片按特征图的大小划分为N×N个单元格, 每个单元格需要预测3个边界框(bounding box), 最后每个尺度输出的张量为N×N×[3×(4+1+C)], 包括4个边界框的信息, 一个置信度得分, C个预测的类别数.
2.2 数据处理和anchor参数设定
本文中YOLOv3训练所需的数据集主要来源为实验室自己采集的数据, 以3类水表作为实验的目标物体. 为使模型能够更好的识别不同环境下的水表, 使用CCD相机采集不同背景、不同位置与不同姿态的水表图片. 因为深度学习需要的样本数量比较大, 为使模型有更好的性能, 需要对数据集进行增强. 因此对采集的数据分别进行缩放图像、旋转图像以及高斯模糊操作来进行数据集的扩充. 实验中将目标物体标注为4类, 为3类不同的水表以及水表的示数区如图3所示.
YOLOv3在检测过程中沿用了YOLOv2中使用的anchor box, anchor box的初始参数会直接影响网络的学习速度和检测精度, 需要根据自己的数据集重新聚类分析. 在聚类算法中, K-means具备简洁快速,易于实现的优点[11], 因此本文使用K-means对数据集重新进行聚类得到适合的anchor box.
3 水表的位姿检测 3.1 水表抓取位置检测本文采用真空吸盘作为水表的抓取工具, 为使抓取时可以容许最大误差, 因此以水表表盘的圆心做为抓取点, 计算圆心像素坐标的检测流程如图4所示, 相应图片处理结果如图5所示.
3.1.1 水表区域提取与灰度化
经过YOLOv3检测后可以得到水表区域的坐标, 经过转换可以将水表区域从原图提取出来处理, 避免多余背景的干扰, 提取后进行灰度化处理. 式(1)的灰度化算法是采用根据人眼对光谱适应能力得到的一组灰度化系数[12], 如下:
$Y = 0.299R + 0.587G + 0.114B$ | (1) |
由于原始图像中存在较多的噪声, 需要对图片进行滤波处理. 中值滤波采用像素点邻域灰度值的中值来代替该像素点的灰度值, 相比于其他滤波算法在去除噪声的同时可以保留图像的边缘细节, 能够避免噪声对边缘检测造成较大的影响, 因此在本文中采用中值滤波对图片进行降噪处理.
3.1.3 自适应阈值在图像处理应用中阈值化操作是一个很常用的处理方式, 本文中采用的阈值方法是局部自适应阈值, 每个像素点的阈值根据点(x, y)局部邻域块的高斯加权和来确定二值化的阈值T(x, y), 确定阈值后根据式(2)进行二值化, d(x, y)为阈值化后点的像素值, src(x, y)为阈值化之前对应点的像素值.
$d(x,y) = \left\{ {\begin{array}{*{20}{l}} {255},&{src(x,y) > T(x,y)} \\ 0,&{\rm{otherwise}} \end{array}} \right.$ | (2) |
经过阈值化后存在有许多连通小区域, 为避免对之后图片处理造成干扰需要去除多余的黑色的小连通区域, 本文通过指针访问像素, 对图像中各个连通区域进行标记, 统计各个连通区域的像素总数并与给定阈值相比, 小于阈值则将此连通域像素值全部变为255, 大于阈值连通域像素值不变化.
3.1.5 椭圆拟合由于水表在不同位置会导致图像中水表表盘不为标准圆形, 所以本文使用椭圆拟合寻找表盘圆心, 椭圆的表达公式如式(3)所示, 算法中通过式(4)~式(8)转化为用圆心(x0, y0),长短轴a, b, 旋转角α及长短轴比ρ等5个参数唯一表示.
$ A{x^2} + Bxy + C{y^2} + Dx + Ey + F = 0 $ | (3) |
$({x_0},{y_0}) = \left(\frac{{BE - 2CD}}{{4AC - {B^2}}},\frac{{BD - 2AE}}{{4AC - {B^2}}}\right)$ | (4) |
$a = \sqrt {\frac{{2\left(Ax_0^2 + B{x_0}{y_0} + Cy_0^2 - F\right)}}{{(A + C) - \sqrt {{B^2} + {{(A - C)}^2}} }}} $ | (5) |
${{b}} = \sqrt {\frac{{2\left(Ax_0^2 + B{x_0}{y_0} + Cy_0^2 - F\right)}}{{(A + C) + \sqrt {{B^2} + {{(A - C)}^2}} }}} $ | (6) |
$\alpha = \frac{{\arctan \left(\dfrac{B}{{A - C}}\right)}}{2}$ | (7) |
${\rm{\rho}} = \frac{a}{b}$ | (8) |
从图5中第5张图片中可以看出经过连通小区域的去除后表盘圆形轮廓保存的比较完整, 因此本文利用轮廓的点集进行拟合得到表盘所在的圆, 但在某些情况下轮廓会发生断裂不连贯, 一个轮廓被分为多个点集以致拟合不出所需要的圆如图6(a)所示, 因此本文对其进行了改进, 改进后椭圆拟合的结果如图6(b)所示, 椭圆检测使用的具体过程如算法1.
算法1. 改进的椭圆检测算法
1) 寻找图片中的轮廓, 将找到的每个轮廓点集储存于向量中;
2) 进行轮廓的筛选根据点集的大小剔除较小轮廓, 然后对每个轮廓点集分别进行椭圆拟合;
3) 对拟合得到的椭圆根据长短轴比接近1和长轴长不超过检测出水表框的短边长度进行筛选, 若找到满足条件的椭圆则输出椭圆信息, 若无符合条件的椭圆则进行下一步.
4) 设轮廓总数为n, 对于第i个轮廓点集, 分别与第i+1, 第i+2,…, 第n个轮廓点集分别融合形成新的轮廓点集, 最后形成n(n–1)/2个轮廓;
5) 重新对新轮廓进行拟合并筛选出符合条件的椭圆.
3.2 水表姿态的检测
本文利用水表示数区所在一侧为出水口方向且示数区的横向与水表整体位姿基本是垂直的特性来判断水表的姿态, 具体流程如图7所示.
3.2.1 边缘检测
通过边缘检测可以更好的将图像中的边缘信息表示在图片中, 更方便于下一步的直线检测, 系统中采用Canny算子进行边缘检测, 先使用式(9)的高斯函数进行图像的去噪、平滑, 再使用一对卷积阵列计算水平和垂直方向的梯度分量Gx和Gy并用式(10)与式(11)计算梯度的幅值G和方向θ, 最后使用非极大值抑制排除非像素边缘保留候选边缘, 并根据双阈值从候选边缘点中寻找最终的边缘点, Canny算子使用了两个滞后阈值其中低阈值用于边缘连接, 高阈值用于控制边缘初始段, Canny算子的高低阈值比一般在2:1~3:1之间.
$G(x,y) = \frac{1}{{2\pi {{\rm{\delta}} ^2}}}\exp \left( { - \frac{{{x^2} + {y^2}}}{{2{{\rm{\delta}} ^2}}}} \right)$ | (9) |
$G = \sqrt {G_x^2 + G_y^2} $ | (10) |
${\rm{\theta}} = \arctan \left( {\frac{{{G_x}}}{{{G_y}}}} \right)$ | (11) |
本文采用累计概率霍夫变换对直线进行检测, 霍夫变换中选择使用极坐标系来表示直线, 将图像上的点映射到极坐标系通过式(12)表示, 因此可以通过检测交于一点的曲线数量是否超过阈值来判断是否检测到了直线, 累计概率霍夫变换是对霍夫变换的改进, 不需要对每个点都进行追踪, 在一定范围内进行霍夫变换, 对于随机的前景点, 当曲线满足最小阈值时将直线找出并将直线上的点删除, 记录起始点和中点判断是否满足最小长度, 若满足记录下对应参数. 累计概率霍夫变换得到的参数为检测到线段的端点坐标, 为便于直线筛选姿态角的判断, 本文将其转化为
${\rm{\rho}} = x\cos {\rm{\theta}} + y\sin {\rm{\theta}} $ | (12) |
经过上述的检测后, 可以得到水表的表盘圆心(x0, y0)与示数区直线方程, 如图8所示, uov表示像素坐标系, 箭头垂直指向直线位置, L表示实验时图像姿态角为0°时示数区直线的所在的位置, L1和L2表示两种不同姿态时检测直线所在的位置, 此时水表的姿态方向为图中箭头所指方向, 结合机械臂第六轴的旋转方向, 将角度θ范围限制在0°到180°, 以0°姿态角为标准线, 左边为负角度, 右边为正角度, 设在图8中当水表两种姿态与标准线的夹角分别为θ1和θ2, 则水表的姿态角分别为θ1和–θ2. 所以在求取角度θ时只需要联立圆心与直线方程就可以计算出姿态角θ.
4 机器人定位与抓取
由椭圆拟合后可以得到抓取点的像素坐标, 还需要通过标定将其转化为机器人坐标系下的坐标以实现机器人对目标的抓取. 其中像素坐标和相机坐标系关系可由式(13)表示, 式中(u, v)为像素坐标系中的坐标, Xc, Yc, Zc表示相机坐标系下的坐标, 其中K为相机内参, 本文中利用文献[13]标定法对相机进行标定. 实验中相机以眼在手外的方式固定, 因为机器人和相机均固定, 所以由相机坐标系到基座标系的变换矩阵T可以唯一确定. 相机坐标系到基座标系的坐标转换关系可以用式(14)表示, 其中R为旋转矩阵, t为平移矩阵, Xb, Yb, Zb为机器人基座标系下的坐标. 本文利用最小二乘法来计算两个坐标系的变换矩阵, 在图像中选取系列的点, 计算这些点在相机坐标系下的坐标pi, 并控制机器人末端移动到指定的点获得一一对应的基座标qi, 将其建模为式(15)的形式, 再利用文献[14]介绍的SVD(Singular Value Decomposition)求解方法对式(15)进行求解得到相机到基座标的旋转矩阵R和平移矩阵t. 得到变换矩阵后就可以计算出在机器人基坐标系下抓取点的坐标, 通过正运动学可以求解出末端手爪要到达的位置, 再由逆运动学求解6个关节角并驱动机器人进行抓取.
${Z_c}\left[ \begin{gathered} u \\ v \\ 1 \\ \end{gathered} \right] = K\left[ \begin{gathered} {X_c} \\ {Y_c} \\ {Z_c} \\ \end{gathered} \right]$ | (13) |
$\left[ {\begin{array}{*{20}{c}} {{X_b}} \\ {{Y_b}} \\ {{Z_b}} \\ 1 \end{array}} \right] = T_{camera}^{base}\left[ {\begin{array}{*{20}{c}} {{X_c}} \\ {{Y_c}} \\ {{Z_c}} \\ 1 \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} R&t \\ O&1 \end{array}} \right]\left[ {\begin{array}{*{20}{c}} {{X_c}} \\ {{Y_c}} \\ {{Z_c}} \\ 1 \end{array}} \right]$ | (14) |
$(R,t) = {\rm{argmin}}\displaystyle\sum\limits_{i = 1}^n {{w_i}||(R{p_i} + t)-{q_i}|{|^2}} $ | (15) |
实验平台如图9(a)所示, 硬件部分包括一台ABB1200型六自由度机器人, 一台500万像素的CCD工业相机, 其拍摄的图片尺寸为2588×1940,一台通用计算机, 其使用的CPU为i7-8700, GPU为1080Ti, 机器人实际抓取图像如图9(b)所示. 软件开发环境为Visual Studio 2013, 并配置有CUDA库、cuDNN库和OpenCV图像处理库.
5.2 检测结果
将水表摆放在相机视野内, 使用YOLOv3模型可以准确检测出每个水表的类别以及水表、示数区的位置, 检测结果如图10(a)所示, 其中框为水表的位置区域, 框的左上方为物体的类别和置信度, 水表的位姿检测结果如图10(b)所示.
5.3 抓取实验为验证YOLOv3在水表抓取系统中的有效性, 实验中与两种比较典型的深度学习网络Faster RCNN[15]和SSD (Single Shot multibox Detector) [16]进行比较, 依次对3种水表进行抓取, 每种水表抓取20次, 以将水表抓取到指定位置并且将水表方向旋转到姿态角为0的状态视为成功抓取, 其他情况则视为抓取失败, 抓取结果如表1所示.
从表1中可以看出使用Faster RCNN和YOLOv3网络的抓取效果相对较好, 但Faster RCNN的检测时间要明显要长于YOLOv3. 使用SSD网络的抓取成功率比较低, 通过分析SSD检测的结果发现SSD对于水表示数区域识别效果比较差, 会出现识别不全、错误的情况导致姿态角计算错误出现抓取失败的情况. 综合抓取效果和检测时间YOLOv3比较适用于本文的抓取系统中. 为进一步验证水表抓取系统的可靠性, 本文分别在一般亮度环境下、偏暗环境、偏亮环境和两种不同背景中对3类水表分别进行抓取实验, 实验环境如图11所示, 每类水表单独连续抓取20次, 并在有其他水表干扰的情况下连续抓取10次, 判定抓取成功条件与上述实验相同, 抓取的结果如表2所示.
从表2中的实验数据可以看出, 系统可以实现在不同的背景下进行水表抓取, 同时在光照范围一定的条件下, 受到环境光的影响小. 但过暗和过亮也会影响系统的检测, 系统识别率会降低无法正常工作. 实验数据中水表3的抓取成功率更低, 主要原因是因为水表表盘相比其他两个水表较小有个突出的部分, 抓取时吸盘碰到突出部分闭合不紧导致抓取失败. 在实际的水表检定线上, 检定环节需要检定水表的最大流量、分界流量与最小流量等, 所需要的时间较长, 所以对于其他环节执行速度上要求不高, 本文的水表抓取系统能够以较快的速度识别水表并进行抓取, 能够满足实际水表检定线上的水表抓取需求.
6 结语
本文设计了一个基于机器视觉的水表抓取系统, 利用该系统可以实现对检定线上的水表进行型号识别并准确抓取. 系统通过YOLOv3网络模型能准确的实现水表型号的识别以及位置的检测, 得到水表型号后可以防止误抓也能够使系统可以根据不同型号设置相应的参数减少误差提高抓取的成功率. 实验结果表明, 本文的设计的抓取系统受到背景和光照的影响小, 3类水表都有较高的抓取成功率, 能够有效可靠的完成自动化检定线上水表的抓取.
[1] |
潘丰. 水表特性自动校验系统设计. 传感器技术, 2003, 22(10): 24-26, 29. |
[2] |
陈硕, 刘丰, 唐旭晟, 等. 基于机器视觉技术的水表在线检定系统研究. 计量学报, 2017, 38(4): 473-476. DOI:10.3969/j.issn.1000-1158.2017.04.19 |
[3] |
汤思孟, 赵杰煜, 陆晓峰. 基于机器视觉技术的水表新型检定方法. 计量学报, 2015, 36(1): 54-57. DOI:10.3969/j.issn.1000-1158.2015.01.12 |
[4] |
林阳, 郭丙轩, 肖雄武, 等. 利用多种投票策略的水表读数字符分割与识别. 科学技术与工程, 2017, 17(10): 50-57. DOI:10.3969/j.issn.1671-1815.2017.10.009 |
[5] |
周兵, 张宏魁. 静态容积法水表自动检定装置. 计量技术, 2008(10): 41-44. DOI:10.3969/j.issn.1000-0771.2008.10.013 |
[6] |
詹志杰, 沈文新, 林志良, 等. 全自动活塞式流量时间法水表检定装置的设计. 计量学报, 2012, 33(S1): 153-158. |
[7] |
李鑫, 胡婷. 机器人自动挂(摘)表式单相电能表检定装置. 大众用电, 2016, 31(8): 47-48. |
[8] |
Redmon J, Farhadi A. YOLOv3: An incremental improvement. arXiv preprint arXiv: 1804.02767, 2018.
|
[9] |
Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection. Proceedings of 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas, NV, USA. 2016. 779–788.
|
[10] |
He KM, Zhang XY, Ren SQ, et al. Deep residual learning for image recognition. Proceedings of 2016 IEEE Conference on Computer Vision and Pattern Recognition. Las Vegas, NV, USA. 2016. 770–778.
|
[11] |
吕铄, 蔡烜, 冯瑞. 基于改进损失函数的YOLOv3网络. 计算机系统应用, 2019, 28(2): 1-7. DOI:10.15888/j.cnki.csa.006772 |
[12] |
杨敏, 叶邦彦, 牟丽, 等. 用于机械零件视觉检测的彩色图像灰度化算法. 现代制造工程, 2004(10): 69-71. DOI:10.3969/j.issn.1671-3133.2004.10.030 |
[13] |
Zhang ZY. A flexible new technique for camera calibration. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2000, 22(11): 1330-1334. DOI:10.1109/34.888718 |
[14] |
Sorkine O. Least-squares rigid motion using SVD. Technical Notes, 2009, 1-6. |
[15] |
Ren SQ, He KM, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137-1149. DOI:10.1109/TPAMI.2016.2577031 |
[16] |
Liu W, Anguelov D, Erhan D, et al. SSD: Single shot multibox detector. Proceedings of the 14th European Conference on Computer Vision. Amsterdam, The Netherlands. 2016. 21–37.
|