APP下载

基于CNN的银行卡数字识别方法

2020-03-19李尚林王鲁达

图学学报 2020年1期
关键词:字符银行卡区间

李尚林, 王鲁达, 刘 东

(湘南学院软件与通信工程学院,湖南 郴州 423000)

随着移动互联网技术的发展,移动支付已经成为人们主流的支付方式。而使用移动支付的前提是需要人们绑定银行卡,用户逐个输入银行卡上的数字既费时费力,又容易出错。现代的移动设备普遍具有较高分辨率的摄像头,通过摄像头拍摄银行卡,并使用光学识别技术自动识别银行卡上的数字,能够极大提高移动支付的用户体验。

近年来,光学字符识别(optical character recognition,OCR)已经比较成熟,在规范的文本文档扫描方面识别率已经达到了99%以上。然而,在自然影像场景中对银行卡识别的应用,仍然存在较大挑战[1],主要表现为:①银行卡普遍具有复杂的背景,给字符区域的识别和字符分割带来较大影响;②银行卡拍摄的角度导致的透视形变、不均匀的光照产生的数字颜色畸变和视觉特征退化,会进一步降低识别的准确率。

目前的文本检测主要分为基于区域、边缘及纹理的方法。下面分别对其进行讨论。

基于区域的方法是利用文本字符普遍具有相似的颜色特征,且和背景颜色相比,具有较强的对比度。通过将具有高相似度的特征点聚集成连通区域,能够提取出文本所在区域。较具代表性的工作有基于最大稳定极值域(maximally stable extremal regions,MSER)的自适应的阈值分割法[2]、基于统计学模型的连通区域分析法[3],以及基于聚类和级联分类器对字符对的空间特征进行学习而获取连通区域分析模型[4]。通过利用字符笔画宽度的一致性特征,EPSHTEIN等[5]提出的笔画宽度变换算法(stroke width transform,SWT),不过该类算法在处理对比度较低的字符区域显得较弱。总之,基于区域的方法适用于文本区域的颜色、灰度等视觉特征比较一致,且对比度较高的情况。

基于边缘的方法适用于字符前景和后景对比并不突出的场景。该类方法利用了字符文本具有较强烈而密集的梯度特征。可使用边缘检测算子,从梯度变换的特征中获取字符区域。除了使用常规的Canny算子[5]以外,傅里叶-拉普拉斯滤波[6]、测字符的几何结构的梯度向量流(gradient vector flow,GVF)[7]等方法被提出,这类方法具有检测速度快且易于实现等优点。

基于纹理的方法将文本视作区别于背景的特殊纹理。通过滑窗的方式提取局部纹理特征并进行分类来预测局部区域纹理的所属标签。基于gabor[8],HOG[9],LBP[10]的特征被广泛的用于各类自然场景的文字识别研究中。另一类研究聚焦于提取字符特殊的特征,从而与背景区分开来[11],不过这类方法局限于处理清晰规范的英文字母。

近年来,使用人工神经网络[12]自动获取特征进行分类取得了较大进展,逐渐成为了模式识别和目标检测的主要潮流。最具代表性的工作为最新的EAST[13]网络,该方法在自然场景文本识别中能够获得较高的识别准确率。理论上,将主流的目标检测网络如Faster-RCNN[14],Yolo[15]等,用于自然场景的银行卡数字检测任务中亦是一种可行的方法,然而在实际应用中却存如下问题:

(1) 相对于主流的自然场景文本环境如街道中的商标文字、图片、视频中的字幕等,很多银行卡的数字和背景区分度极低,难度较大;

(2) 银行卡数字相对整张卡片而言太小,该类小尺度目标检测问题目前仍是难点[16];

(3) 容易发生漏检,而银行卡检测任务对漏检的容忍度较低;

(4) 目标检测网络需要大量的完整银行卡数据作为训练集,该类敏感数据的获取、标定难度较大。

总之,使用目标检测网络,在数据获取和识别等各个阶段都存在较大的困难和挑战。

对于车牌识别[17]、身份证识别[18]等任务而言,由于其背景相对干净,字符规范,且与背景区分明显,使用文献[19]Tesseract类的解决方案能达到很高的准确率,其应用已经相对成熟,而银行卡由于品类繁多,字体不规范,且背景纷乱复杂,极端情况甚至肉眼识别都具有较大难度,这些因素给识别工作带来了较大的挑战。商用领域的解决方案会使用大量的银行卡先验经验,如不同银行卡商家的模板,数字序列规则等,因此需要随着新的厂商类型和新的卡片类型进行更新。本文算法尽可能避免使用这类先验经验,使得方法具有易实现、通用性强、鲁棒性高的特点。

1 算法框架

基于卷积神经网络(convolution neural network,CNN)的银行卡数字识别方法框架如图1所示,本文将围绕如下部分展开讨论:

(1) 数字区域检测。包括倾斜矫正和数字区域获取。前者用于将自然拍摄的银行卡图像恢复成矫正后的俯瞰视图,后者通过一系列图像算法获取目标银行卡数字所在的区域。

(2) CNN训练。包括训练数据的增强和所使用CNN的具体模型结构。

(3) 数字识别。使用CNN滑窗算法分割单个数字,以及如何使用平滑优化算法获得更加准确的数字序列。

图1 银行卡数字识别方法框架

1.1 数字区域提取

当前市面上绝大多数银行卡均符合国际ISO/IEC 7810中的ID-1标准,尺寸为85.60 mm×53.98 mm。移动设备的拍照识别程序通常都会利用该长宽比引导用户拍摄银行卡,因此,本文假设获取到的银行卡影像是完整的。

1.1.1 倾斜校正

由于拍摄位置的自由性,使用移动设备获取的银行卡图像通常存在一定的角度倾斜,角度较大的图像会严重影响后续的识别。考虑到算法的鲁棒性,需要分2种情况考虑。

对于银行卡边缘完整的情况,可以考虑先获取银行卡边缘,再对图像进行投影校正。具体方法如下:

(1) 使用Canny算子来获取边缘;

(2) 使用霍夫变换来查找直线,同时过滤角度不合理的直线;

(3) 通过直线求交点运算,得到银行卡轮廓的4个角点;(4) 对图像使用投影变换,获得矫正后的图像。对于银行卡边缘不完整的情况,可以使用车牌识别领域中常用的Radon变换[20]进行处理。

综上所述,银行卡拍摄角度的矫正过程如图 2所示。

1.1.2 数字区域获取

目前主流的银行卡上的数字区域可以分为喷涂式和按压式2类。喷涂式的数字通常采用深色的颜色,使之与浅色的背景作区分,该类型银行卡的数字区域的定位相对较为简单;而按压式银行卡,其数字区域和卡片背景具有一致的颜色,只能通过检测按压区域的光线变化进行检测。

对于喷涂银行卡,其核心预处理是先做二值化,再做闭操作,最后重复多次膨胀和腐蚀连接相邻的数字区域。考虑到银行卡中的数字是水平排列的,因此形态学操作的卷积核大小设置为(x=20,y=5),使得数字区域能够在水平方向上进行连接。

对于按压银行卡,其核心预处理是利用旋转不变性的Laplace算子检测数字区域边缘凹凸不平产生的梯度变化。由于Laplace算子对噪声敏感,因此必须先做归一化处理和高斯模糊。边缘检测完成后,使用相同的形态学处理连接数字区域,最后进行最大类间方差(OTSU)算法进行二值化。

经上述预处理可获取到1个或多个目标数字区域,最后可以使用投影法,筛选得到最佳的数字区域。图3为数字区域获取过程示意图。

图2 投影校正过程

1.2 CNN训练

获取到数字区域后,需对独立的数字进行分割与识别。本文使用CNN分类器作为数字的分隔和识别任务的核心。

1.2.1 CNN模型

用于识别单个数字的 CNN网络模型结构如图4所示。网络共包括3个卷积层,3个Max pooling层,2个全连接层,1个Softmax输出层。考虑到银行卡数字和背景颜色的无关性,该模型的输入大小为宽度w=30,高度h=46的单通道灰度图,最终将输出图像分成11类,类别0到9为对应的数字标签,类别10为非数字区域标签。

1.2.2 数据增强

考虑到数字区域提取部分结果必然存在一定的误差(如透视投影畸变、字符区域有少量像素被截取等),合理的数据增强是提升CNN识别准确率的关键因素之一。

(1) 数字标签数据。数字标签为0到9共10类,每个训练图片为一个完整的单个数字字符的图像。这类图片的增强方法包括:x方向平移像素k;y方向平移像素k;中心旋转角度k。其中k∈[-2, 2]。

(2) 非数字区域标签数据。该类标签数据来源于:银行卡背景、其他非数字字符、以及同时存在2个字符的情况。

图3 数字区域获取测((a)~(d)为喷涂银行卡样例;(e)~(h)为按压银行卡样例)

图4 CNN模型示意图

图5 数据增强

通过上述数据增强(图5),每一类标签的训练数据大约为2 000,训练图片数据总量约为2万。使用交叉验证方法在该数据集上训练的CNN能够达到99.5%左右的准确率。值得说明的是,如果使用VGG或者ResNet等网络模型替换图4中提出的模型,虽然能够在训练集和验证集上得到更高的准确率和更低的损失,然而在实际检测过程中却并不能获取更高的识别准确率。通过大量实验分析,其原因可能在于:真实的银行卡测试数据和训练集中的数据存在较大的差异,而更复杂的网络对该训练集容易产生过拟合。因此,综合考虑到数据集、准确度、泛化能力、训练成本等因素,在大量实验和验证后得到了图4所示的网络。

1.3 数字分割与平滑优化

1.3.1 滑窗分割

使用训练好的 CNN对数字区域进行数字分割(图 6)。首先将数字区域的大小进行标准化,保证其高度与CNN输入的高度h保持一致。对于给定宽度W的输入数字区域,通过滑窗算法在横坐标区间[0,W-w]上逐一将子区域输入CNN,输出为一个长度为W-w+1的输出序列。将横坐标值作为x坐标,对应的CNN输出标签值作为y坐标,输出的函数曲线如图6(b)所示。

图6 数字分割示意图

理论上,对于每个y值相同的连续区间[a,b],如果其值为数字标签(即0到9),且区间长度大于ω,则可将该区间所代表的区域视作对应的有效数字,否则输出无效。即

其中,ω的取值和数字区域长度W与单个数字宽度w相关,建议不超过(W/w)/2。

由滑窗分类结果的输出不难看出,对于图6(a)按压数字的银行卡,背景与数字的区分难度较大,且背景纹理存在较强烈的干扰,即使用肉眼识别也有一定难度。

即便CNN能够在训练集上达到很高的识别准确率,在滑窗识别结果中(图 6(b))仍然存在一定的识别错误。如果不对该结果做平滑处理,输出的卡号与真实值会存在较大误差。接下来,讨论一种平滑优化算法,以去除标签序列中的异常值。

1.3.2 平滑优化算法

为了使得卡号的输出结果更加准确,需要对滑窗分割的输出结果进行平滑优化。平滑优化建立在如下2个假设基础之上:

(1)正常的分割区域(包括背景区域)的区间长度应该大于ω,异常的分割区域长度总是较低的;

(2)背景训练数据决定了正常输出的 2个数字之间总是存在背景区域。

根据假设 1,可以设计一种滤波平滑算法,将异常的输出区间(在数字分割图中表现为跳变)抹平。对于式(1)输出的标签序列 labels,进行平滑优化的算法如下:

算法1.平滑优化标签序列

1 Count = 0,ω1= 3,ω2 = len(labels)/20/3

2 While(ω1 >ω2 or count > Max_Iter)

3 left, right, digits = Find_Min_Region(labels,ω1)

4 if left < 0 or right < 0:

5ω1 += 1

6 else

7 count += 1

8 if left == 0:

9 Filter_Right(labels, Left_x, left, right)

10 elif right == n-1:

11 Filter_Left(labels, Left_x, left, right)

12 else:

13 if labels[left-1]== 10:

14 Filter_Right(labels, Left_x, left, right)

15 else

16 Filter_Left(labels, Left_x, left, right)

区间长度阈值ω1被初始化为较小的数字 3,算法持续寻找低于该阈值的连续区间(第 3行),如果该异常区间出现在左边界处,则该区间被平滑为右邻域区间标签值(8~9行);反之出现在右边界处,则被平滑为左邻域区间标签值(10~11行)。其他情况则根据假设2进行考虑,如果该区间左领域区间为背景区域,则平滑为右邻域区间标签值(13~14行);其他情况则平滑为左邻域区间标签值(15~16行)。如果找不到待平滑的异常区间,则增加阈值ω1进行下一轮迭代查找,直到达到阈值ω2或超过迭代次数限制Max_Iter。

平滑过滤后的数字分割如图6(c)所示,在该结果的基础上使用式(1)即可输出相对准确的银行卡数字序列。

2 实验结果与分析

实验平台为Windows 7 64 bit操作系统,硬件配置为Intel Core i7-4790 3.60 G CPU,16 G内存和NVIDIA GTX 760图形处理器,深度学习框架采用Tensorflow+Keras。部分识别的结果如图 7所示,其中第1行为银行卡影像,第2行为获取到的数字区域,第3行为数字分割图,第4行为输出的银行卡号。

由于银行卡检测领域没有公开的数据集,本文的实验在自己的数据集上测试,数据包含 40张银行卡,其中10张喷涂型,30张按压型。

实验将数字区域检测的准确率和数字识别的准确率分开进行对比。实验结果见表1,可以看到EAST方法对喷涂型银行卡的数字区域检测效果较好,然而对于按压性效果很差。本文方法处理2类银行卡效果均较好。在数字识别部分,3种方法在按压性银行卡上效果均不理想,而增加了平滑优化的本文方法,在2种类型的卡片上都能获得较好的效果。

图7 部分银行卡检测结果

表1 实验结果(%)

3 结 束 语

本文提出了一种基于 CNN的银行卡号码识别方法,通过一系列预处理方法获取数字所在区域,然后通过训练一个 CNN分类器,使用滑窗方法将数字区域输出为目标数字序列,最后使用平滑算法去除异常区域,输出银行卡数字序列。实验结果证明了算法具有较好的准确率和一定的鲁棒性。且本文的算法思想并不局限于银行卡识别,同样可以用于身份证、驾照等证件的识别领域。

值得提出的是,本文的算法依旧存在局限性,在处理含有杂乱复杂背景的银行卡时,数字区域的查找、字符的分割的准确率均会下降。在工程应用中通常会采取增加银行卡相关的先验经验(如不同商家银行卡的数字区域分布)、增加训练样本等方式提升识别准确率。

猜你喜欢

字符银行卡区间
你学会“区间测速”了吗
复杂背景下银行卡号识别方法研究
论高级用字阶段汉字系统选择字符的几个原则
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
全球经济将继续处于低速增长区间
谁划走了银行卡里的款
区间对象族的可镇定性分析
单调区间能否求“并”