基于深度学习的打印文档缺陷检测算法
2021-10-22刘李漫汪梦婷劳喜鑫吴兴宇中南民族大学生物医学工程学院武汉430074
刘李漫,汪梦婷,劳喜鑫,吴兴宇(中南民族大学 生物医学工程学院,武汉 430074)
文档打印的过程中可能遇到褶皱、破洞、漏墨、打印内容倾斜、打印内容偏移、打印文字不清晰等问题.对于文档的缺陷检测通常采取基于图像处理的方法.然而在工业生产中,对打印文档的数量需求多,质量要求高,基于图像处理的方法受环境因素干扰较大,误差大.深度学习在国内外工业生产的缺陷检测中应用非常广泛,如文献[1-3]中描述的布匹表面缺陷检测、金属表面缺陷检测、裂纹表面缺陷检测.本文提出了一个新的基于深度学习的打印文档缺陷检测算法,通过先检测纸张全局的缺陷问题后检测局部细节的缺陷问题来判断该纸张是否合格.该算法受到实验环境的影响较小,检测的效率和精度更高.
1 打印文档缺陷检测整体框架
提出的文档缺陷检测算法主要由三个部分组成:打印文档纸张缺陷检测、打印文本倾斜和偏移检测、打印文字清晰度校验.打印文档缺陷检测的具体流程如图1所示.人工确认一张正确的样本作为参照样本,将待测样本和参照样本进行边缘提取和透视矫正,再将待测样本送入分类网络,分出漏墨类、褶皱类、破损类、合格类,再将合格类纸张进行打印文本倾斜和偏移检测,合格的纸张则进行字符分割,将分割后的单个字符和参照样本分割后对应的字符进行字符图像特征一致性检测,最终得到质量合格的打印文档.
图1 文档缺陷检测算法流程图Fig.1 Document defect detection algorithm flow chart
1.1 打印文档纸张缺陷检测
打印文档纸张缺陷检测主要检测由打印纸张质量而引起的缺陷问题.通过canny边缘检测算法找出纸张边缘,再对纸张进行透视矫正,将纸张从拍摄背景中提取出来.将矫正后的待测样本通过分类网络,分类出漏墨、褶皱、破损以及合格四大类.
1.2 打印文本倾斜和偏移检测
打印文本倾斜和偏移检测主要检测打印文本是否整体倾斜、整体上下偏移、整体左右偏移.将分类合格的打印文档进行水平投影[4]得到最上行和最下行文字的边界,通过边界内的像素点进行线性回归得到直线的斜率,根据斜率判断打印文档是否整体倾斜.通过投影法确定打印文档的上下边界和左右边界,比较打印文本边距确定打印文本是否发生偏移.
1.3 间距打印文字清晰度检测
打印文字清晰度检测主要检查打印文字是否出现字迹模糊或字迹不清的情况.将合格的纸张进行字符分割得到单个的字符,再将字符和参照样本对应的字符送入孪生神经网络进行相似性度量[5-7],将得到的概率和设定的阈值P进行比较,进而判断打印文字清晰度是否合格.
2 打印文档纸张缺陷检测
2.1 纸张边缘提取和矫正
拍摄的纸张图像通常包含了拍摄背景,背景的不同以及纸张拍摄后形状的多样性给缺陷检测带来了很大的难度.为了提高缺陷检测的精度,可将纸张从背景图像中提取出来.
2.1.1 用canny边缘检测算法找到纸张的边缘
由于纸张的边缘比较单一,所以选用传统的canny边缘检测算法[8]来寻找纸张边缘.首先通过高斯模糊去除噪声,然后计算图像中每个像素点的梯度幅值和方向,再应用非极大值抑制,以消除边缘检测带来的杂散响应,最后用双阈值算法检测和连接边缘.
2.1.2 拟合出长方形的纸张边缘
通过拟合出所有的轮廓,可以找到最大面积的轮廓.最大面积的轮廓就是纸张的边缘,然后在最大面积轮廓上找到四个顶点.得到纸张边缘的顶点后,通过透视变换将原本的纸张形状转换为长方形.透视变换是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换.边缘提取和矫正效果如图2所示.
(a)待测样本图 (b)边缘检测效果图 (c)顶点检测效果图 (d)透视变换效果图图2 边缘提取和矫正效果图Fig.2 Edge extraction and correction renderings
2.2 文档纸张缺陷分类
2.2.1 ResNet-50网络结构
将透视矫正后的文档图片送入残差网络[9](ResNet-50)中,通过残差网络(ResNet-50)将纸张分为四类:合格、破损、褶皱、漏墨.残差网络有很深的网络结构.通常很深的网络层结构会出现梯度消失或梯度爆炸[8]和退化现象[10](Degradation).为了解决网络层堆叠造成的梯度消失或者梯度爆炸的问题,使用Batch Normalization加速训练.为了解决退化问题使用残差(residual)模块,假设残差块的输出为H(x),学习到的残差函数为F(x)=H(x)-x,训练网络时,只学习残差映射F(x)比学习原始映射更加容易,且更容易优化.残差模块结构如图3所示.
图3 残差结构示意图Fig.3 Diagram of residual structure
残差网络由多个残差块构成,当残差块的输入和输出维度不变时,仍然使用恒等映射,维度改变时,将输入进行线性映射后,叠加至输出,使维度保持一致.ResNet-50有四组大Block,每组分别包含3、4、6、3个基本块,每个基本块里面有三个卷积层.另外,网络的最开始有一个单独的卷积层,最后有一个全连接层,一共50层.其中每个基本块由残差结构构成.ResNet-50结构如图4所示.
图4 ResNet-50网络结构图Fig.4 ResNet-50 network structure diagram
2.2.2 基于ResNet-50的打印文档纸张缺陷分类算法
使用基于ResNet-50的打印文档纸张缺陷分类算法来检测打印文档纸张的缺陷,纸张的缺陷大致可划分为合格、破损、漏墨、褶皱四类.准备800张分辨率为500×600的数据图片作为训练集,其中每个类的数据量都为200张,同时每个类准备20张数据图片作为验证集,训练集和验证集比例为10∶1.首先对图像进行预处理,为了使训练效果更好,采用数据增强的方法.数据增强的具体步骤如下:
(1)将数据集随机裁剪到256×256;
(2)采用随机旋转;
(3)采用随机水平翻转;
(4)中心裁剪到224×224;
(5)转换成张量;
(6)将得到的张量进行归一化.
数据增强后,选用交叉熵作为损失函数,学习率为0.01,epoch为150,batchsize为20,优化方式为mini-batch momentum-SGD,并采用L2正则化(权重衰减),其中momentum为0.9,weight decay为0.0005.将数据增强后的数据集送入ResNet-50中训练,得到每一类的分类得分,取得分最高的那个类作为分类结果.
3 打印文档倾斜和偏移检测
将筛除全局缺陷后的纸张进行字符平行检测,字符平行检测不合格的打印文档被判断为不合格,字符平行的文档图片则进一步进行内容偏移检测.
3.1 字符平行检测
字符平行检测用于检测打印时打印文本倾斜的问题.打印内容平行检测分为图像二值化,垂直投影,线性回归[11]三个部分.首先将图像进行二值化预处理,对预处理后的图像进行垂直投影,能够得到每一行字的像素点的上下边界,每一行字上下边界内的像素点划分为一个集合,对每行字符的像素点进行线性回归得到每行字符的斜率,得到字符线性回归的效果图如图5所示.
图5 线性回归效果图Fig.5 Linear regression renderings
设置阈值K,将得到的斜率和阈值进行比较,大于阈值K则判断该打印文本倾斜,反之则判断打印文本合格.
3.2 内容偏移检测
内容偏移检测通过检测打印内容和纸张上下左右边缘的距离,从而判断打印内容是否发生偏移.水平投影后能够得到文字内容的上下边界, 根据图片的高度和打印内容的上下边界,可以得到打印内容距离纸张边缘的上边距a,下边距b.
a=y1,
(1)
b=h-y2·
(2)
其中y1为文本的上边界,h为图片的高度,y2为文本的下边界.垂直投影后能够得到文字内容的左右边界,根据图片的宽度和打印内容的左右边界,可以得到打印内容距离纸张边缘的左边距c,右边距d.
c=x1,
(3)
d=w-x2·
(4)
其中x1为文本的左边界,w为图片的宽度,x2为文本的右边界.将正确样本检测到的上下边距和左右边距的值作为阈值.如果a、b、c、d值的大小小于设定的对应阈值,则判断打印内容偏移.内容偏移检测效果如图6所示.
(a)待测样本图 (b)上下边界检测图 (c)左右边界检测图图6 内容偏移检测效果图Fig.6 Rendering of content offset detection
4 打印文字清晰度检测
4.1 字符分割
在打印文本倾斜和偏移检测后,对合格的打印文档进行字符一致性对比.先将样本进行图像预处理即二值化,再对图片进行膨胀腐蚀处理,使得预处理后的单个字符形成闭合结构,避免汉字结构问题带来的分割误差,最后将图片进行水平投影法和垂直投影法分割,得到单个的字符.字符分割流程如图7所示.
图7 字符分割流程图Fig.7 Character segmentation flow chart
图8 水平投影分割像素分布图Fig.8 Horizontal projection divides the pixel distribution map
找到每一行的上界限和下界限,进行行切割,再进行垂直投影,即在垂直方向上对图片的每一列像素点进行统计,得到垂直方向的像素分布,垂直投影分割像素分布如图9所示.
图9 垂直投影分割像素分布图Fig.9 Vertical projection divides the pixel distribution map
找到每一个字符的左右边界,进行单个字符的切割,字符分割效果如图10所示.
图10 字符分割效果图Fig.10 Character segmentation rendering
在完成字符分割后,将分割好的字符进行一致性检测.将参照样品纸张与待检测纸张对应的字符一起送入到孪生神经网络中,经过网络的前向推断,得到字符的语义差异性特征,计算两个图片的相似度.设置阈值P,将得到的图片相似度和阈值P进行比较,如果检测结果中有小于阈值P的字符对,则判断该纸张中存在打印文字清晰度低.
4.2.1 孪生神经网络
孪生神经网络[13](Siamese Network)是一种特殊类型的神经网络架构,是一种相似性度量的方法.孪生神经网络有两个输入,由两个完全相同权重共享的神经网络组成,每个输入都输出一个特征向量,最后计算两个图像之间的相似度.
将待测样本字符和参照样本字符送入孪生神经网络,分别提取图像的特征得到两个特征向量,计算两个特征向量的距离[14],得到两者的差异性特征,最后送入全连接层输出一个特征差异的概率,通过调整概率阈值,判断字符的清晰度是否合格,孪生神经网络结构如图11所示.
图11 孪生神经网络结构图Fig.11 Structure diagram of Siamese Network
4.2.2 特征提取网络VGG16
主干特征提取网络使用VGG16网络[15]来进行特征提取.VGG16由13个卷积层,3个全连接层和5个池化层构成.VGG16的网络结构如图12所示.VGG16的卷积层均采用相同的卷积核参数,池化层均采用相同的池化核参数.该模型通过堆叠多个3×3的卷积核来替代大尺度卷积核,减少所需参数.
图12 VGG网络结构Fig.12 VGG network architecture
5 实验结果
5.1 打印纸张缺陷分类的实验结果
如图13所示,有四类分类样本.将四类样本送入纸张缺陷分类网络中,图(a)纸张分类结果为合格类C1,图(b)纸张分类结果为破损类C2,图(c)纸张分类结果为褶皱类C3,图(d)纸张分类结果为漏墨类C4.
(a)合格类纸张 (b)破损类纸张 (c)褶皱类纸张 (d)漏墨类纸张图13 纸张缺陷分类测试样本Fig.13 Paper defect classification sample
准备432张样本,其中合格样本为108张,破损样本108张,褶皱样本108张,漏墨样本108张.分别计算C1,C2,C3,C4类的正确率Precision和召回率Recall.采用F1-Score作为整体的评测指标,F1-Score越高,检测效果越好.F1-Score的计算方式如下:
测试文档全局缺陷分类对于合格类,破损类,褶皱类,漏墨类的分类准确率,召回率以及F-Score,如表1所示.
表1的实验结果表明, 该网络对于褶皱类的缺陷文档的分类准确率最高,对于合格类和漏墨类的分类准确率较好.对于破损类和褶皱类的缺陷文档的分类召回率较好.对于褶皱类的F-Score最高,破损类的F-Score最低.
表1 各个文档缺陷类别的召回率-准确率-F1-Score对比(%)Tab.1 Recall rate-Accurate-F1-score comparison of each document defect category (%)
5.2 文字内容平行检测的实验结果
用100行平行字符和100行非平行字符分别放入文字内容平行检测算法中,得到每一行字符的斜率.设置阈值K,当得到的字符行斜率小于K时,判断该行字符平行.当得到的字符行斜率大于K时,判断该行字符不平行.检测的总正确率,平行字符行的判断正确率以及非平行字符行的判断正确率分别为R、R1、R2.文字内容平行检测结果如表2所示.
表2 文字内容平行检测的结果(%)Tab.2 Text content parallel detection results (%)
由表2实验数据可得,平行字符行的检测效果更好,更稳定.当K为0.15时,字符行的检测结果最好.
5.3 打印文字清晰度检测的实验结果
如图14所示,图左和图右为相同字符,其中左边为清晰度相同的字符对,其相似值为分别0.996、0.999,右边为清晰度不同的字符对,其相似值为0.732、0.736.由图可得清晰度相同的字符相似值较高,清晰度不同的字符相似值相对较低.
图14 单个字符一致性检测结果Fig.14 Single character consistency detection results
准备1000对字符图片,其中500对字符图片为清晰字符图片和清晰字符图片,500对字符图片模糊字符图片和清晰字符图片.将每对图片送入字符图像特征一致性检测的网络中,得到每对图片的相似性概率.设置阈值P,当得到的相似性概率小于P时,判断这两个字符清晰度不同.当得到的相似性概率大于P时,判断这两个字符清晰度相同.网络的得分正确率,判断清晰度相同字符的得分正确率以及判断清晰度不同的得分正确率分别为S、S1、S2,其中正确率为正确得分数量与对应总数量的比值.得到的字符图像一致性检测的结果如表3所示.
表3的实验结果表明,字符图像特征一致性检测的效果整体较好.在比较字符清晰度的过程中,检测清晰度不同的字符对的得分随着阈值(P)的增加而增加,检测清晰度相近的字符对的得分随之阈值(P)的增加而减少.当阈值(P)为0.9时,字符图像特征一致性检测检测得分最高.
表3 字符图像特征一致性检测的结果(%)Tab.3 The result of character image feature consistency detection (%)
5.4 打印文档缺陷检测的实验结果
准备502个待测样本,对整个打印文档缺陷检测算法的检测效果进行评估,其中正确的样本为108个,错误样本为394个,错误样本中褶皱、漏墨、破损、错字、倾斜、偏移的样本数分别为108、108、108、40、30、30.设置K为0.15,P为0.9,测试本文文档缺陷检测算法的实验结果如表4所示.
表4 文档缺陷检测实验结果(%)Tab.4 Document Defect Detection Experimental Results (%)
由表4结果可得打印文档缺陷检测算法对偏移类和褶皱类的识别率最高,识别率分别达到96.7,对破损类的识别率最低,识别率为51.4.对破损类识别率较低可能的原因是破损类的形状多样,特征各异且部分破损类特征和光照对纸张形成阴影的特征相似.
6 总结
为了改善人工检测打印文档缺陷的不足之处,提出了一种新的打印文档缺陷检测算法.该算法首先使用残差网络ResNet-50优秀的分类能力来对文档全局进行缺陷分类,然后有效的对比文字的缺陷,对文字进行了有效的分割.为了使分割效果更好,对图像进行二值化,同时进行膨胀腐蚀,使得每个字形成闭合的凸包.最后将分割后的文字送入孪生神经网络中测量相似度.实验结果表明:提出的文档缺陷检测算法能较为理想的识别文档缺陷问题.由于实验的原始数据图片容易受到光照,设备,拍摄位置等因素的干扰,外界因素要控制在恒定条件下.