APP下载

移动设备的信用卡号码自动提取技术

2021-06-11陈佳林

电子设计工程 2021年11期
关键词:卡号字符识别字符

陈佳林

(应急管理部信息研究院,北京 100029)

随着智能手机、PAD 等智能设备的迅速发展,移动支付不断普及。对于移动支付而言,需要用户绑定16~19 位信用卡号码。手机端手工输入信用卡号码速度慢、易出错,造成用户体验差。为提高在移动终端设备包括智能手机、PAD 等的信用卡号码录入速度和准确率,提高移动支付用户体验,如何快速自动提取并录入信用卡号码则成为一个充满商机和亟待解决的问题。

字符识别技术研究,特别是印刷体字符的识别研究已经相对成熟。字符识别技术可以简单分为基于传统模式识别技术和基于深度学习的字符识别技术。传统的字符识别技术,由图像预处理、特征提取、分类器设计等几个关键步聚组成。经典的字符识别特征包括Gabor 特征[1]、方向线素特征[2-3]、梯度方向特征[4-5]等。分类器则有最小距离分类器MDC、修正二次鉴别分类MQDF[6]、支持向量集SVM等。基于深度学习的字符识别技术采用卷积神经网络CNN 提取特征和分类[7-9],是一种端到端(Endto-End)的识别技术。基于深度学习的识别技术需要大量的训练样本,并且在一些中低端移动设备的推理速度较慢,很难达到实时。而传统的识别技术,只要每个类别字符样本数不为0 就可以训练,预测速度远快于基于深度学习的算法。信用卡作为个人隐私数据,很难收集大量样本,所以采用了传统技术方案。

传统的OCR 方法一般基于二值图像进行定位、切分和识别。很明显信用卡号码无法通过二值化得到满意的效果,必须另寻他路[10-19]。根据手机预览图像视频流识别的模式,文中设计了图像预处理、信用卡号码行定位、信用卡号码字符串分割、单字符识别引擎、识别结果校验等几个主要模块。

1 算法设计

1.1 图像预处理

信用卡因为其商业性一般采用绚丽的背景加Farrington-7B 字体进行凸印,如图1 所示。

图1 信用卡号码样本

通过手机等移动终端设备的相机预览视频流获取的图像一般会包含目标图像外的复杂背景,并且目标图像伴有透视变形和模糊现象。对于因图像模糊造成无法定位卡号或识别结果不满足LUHN 校验规则的情况,不会产生错误识别结果,可以不用考虑。但透视变形会造成银行卡号的大范围梯形形变或倾斜,必须处理。文中设计了基于检测银行卡四边的方法,得到银行卡在原始图像中的4 个顶点坐标。通过构建固定大小的目标图像,来完成图像的校正规一化。

算法描述如下:

步骤1:提取图像彩色Sobel 梯度,获得彩色梯度图;

步骤2:在彩色梯度图像上进行LSD 直线检测,并进行线段合并;

步骤3:根据规则计算信用卡上、下、左、右4 条边界线,计算相邻边界线交点。

步骤4:根据获得的4 个原始顶点,通过构建目标图像大小获得4 个目标顶点,从而得到4 组(8 个)对应点,通过式(1)和式(2)进行空间变换。

x′、y′表示失真图像中的坐标点,x、y为校正后的坐标点。系数k1~k8 可通过解方程得到,通过反向变换完成原图的变形校正。图2(a)表示变形图像,经过图像归一化后,图2(b)表示校正后的图像。

图2 图像归一化

1.2 银行卡号定位模块

对校正后的信用卡图像,需要准确定位到卡号所在的位置,鉴于信用卡背景的复杂性,无法通过传统二值化或投影方法得到卡号的准确行坐标。考虑到手机的处理速度,设计了一种基于梯度积分图的卡号定位算法。

通过1.1 节的算法,已获得规一化的宽为856 像素,高为540 像素的裁切图像。根据实验观察和总结,假定银行卡号所在位置区域梯度值较高,基于此假设,设计卡号行定位算法,如下:

步骤1:通过Sobel算子提取已校正图像的梯度图;

步骤2:计划梯度图像的积分累加图;

步骤3:以步长为2,在窗口高为40~60 之间搜索梯度最大值区域。

步骤4:对不同窗口得到的梯度最大值区域进行加权,获取卡号精确坐标。图3(a)表示定位候选区域,图3(b)表示进行区域加权融合后的卡号定位。

图3 卡号定位

1.3 卡号字符串分割

银行卡的前景和背景颜色接近,无法通过连通域搜索或投影的方式获取信用卡号码的字符切分结果。设计了一种基于SVM 的滑动窗口判定策略,实现信用卡号码切分。

首先,训练基于SVM 的字符前景和背景判定模型,该模型可以判断当前窗口图像是信用卡号码前景字符还是背景图像。具体来说,就是将窗口内的灰度图像规一化到48*48 大小,通过提取水平和垂直梯度,进行子窗口划分,得到32 维的分类特征,SVM 模型训练和检测均采用此类型特征。

然后,通过滑动窗口,得到一系列判定结果,通过加权融合得到前景字符的精确坐标。通过此方法并不保证得到全部卡号字符坐标,最终需要通过插补得到切分结果。

最后,只要滑动窗口方法能找到3~4 个以上字符的精确坐标,可以通过设置字符宽高插值,计算补全其他字符。需注意,通过补齐得到的切分序列可以大于实际的银行卡号长度,最终需要通过OCR 识别和结合LUHN 校验得到最终的识别结果。图4(a)表示基于SVM 模型获取字符坐标,图4(b)表示通过插补后得到的切分图像。

图4 卡号切分

1.4 单字符识别引擎设计

通过对比Gabor 和8 方向梯度特征识别率和识别速度,最终选定以梯度特征作为单字符识别引擎的特征类型。方向梯度特征对规一化后的灰度字符图像,通过Sobel 算子进行水平和垂直梯度提取。在(x,y)坐标位置梯度G(x,y)=[Gx,Gy]提取方法如下:

Gx(x,y)=f(x+1,y-1)+2f(x+1,y)+f(x+1,y+1)-f(x-1,y-1)-2f(x-1,y)+f(x-1,y+1);

Gy(x,y)=f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1)-f(x-1,y-1)-2f(x,y-1)+f(x+1,y-1);

梯度的强度和方向均可由G(x,y)得到。将梯度方向从0~360 度等分为8 份,即分成8 个方向平面,分别统计各方向平面梯度分布情况。当梯度位于两个标准方向之间时,可采用四边形分解到两个最近邻平面。

预先将单字符图像规一化到48*48 大小,并将每个方向平面分成窗口为8*8 大小的36 个网格,共8个方向平面,因此可以得到36*8=288 维方向梯度特征,如图5 所示。

图5 梯度强度分解图

信用卡号码识别字符集为数字0~9,为了能够较好地区分背景噪声,增加一个负样本‘X’来表示一些非法字符,因此字符集为{0,1,2,3,4,5,6,7,8,9,X}。

将预先采集好的单字符样本进行分类,分成0~9 和X共计11 个类别。原则上可以采用每个类别字符的均值向量直接作为模板,生成共计11 个模板字典。但考虑到信用卡字符的复杂性,采用了更高效的LVQ 模板学习策略。

LVQ 学习向量量化基本原理是通过迭代学习使正确的模板距离样本更近,使错误的模板与样本变远。对于一个输入样本x,寻找与其距离最近的两个模板类mi、mj(mi为类别正确的模板,mj为类别错误的模板),并且x满足条件:

min(di/dj,dj/di)>(1-w)/(1+w);

则更新模板

mi=mi+a(t)(x-mi);

mj=mj-a(t)(x-mj);

w为窗口大小,a(t)为学习因子,di、dj为样本与mi、mj的欧氏距离。

学习过程如下:

1)对11 类字符样本特征向量进行类内K-means聚类,得到初始模板;

2)对生成的初始模板进行LVQ 迭代学习;

3)将LVQ学习结束后的模板作为最终识别字典。

2 实验结果

在LVQ 分类器识别引擎中,单类字符类别采用的模板(原型prototypes)数量,对识别率有决定作用,通过实验获取模板数量对识别率的影响情况。由图6 可以看到,当模板数量由5 增加到9 时,识别率有显著提高。当模板数量增加到13 时,识别率趋于饱和,进一步增加模板数量,识别率增长缓慢。

图6 LVQ中模板数量与识别率关系

为了获得最优的识别率,实验评估了以8 方向梯度特征加MQDF 分类器的识别率。MQDF 分类器的识别率和主子空间维数K有关系,实验结果如图7所示。

图7 MQDF识别率与主子空间维数关系

通过图6 和图7 测试获得的数据,设计分类器参数。LVQ 分类器采用每个字符类别生成15 个原型模板,MQDF 分类器主子空间维数选为60,进行识别率性能对比,如表1 所示。

表1 LVQ和MQDF识别性能对比

从识别率测试情况看,训练集上LVQ 的识别率明显高于MQDF 分类器,这得益于LVQ 的训练机制。在测试集上两种分类器识别率相近,MQDF 分类器略高于LVQ 分类器。从识别速度和字典体积来看,LVQ 分类器性能要明显优于MQDF。因为最终产品会用在手机移动设备上,综合性能考虑,采用LVQ 分类器。

鉴于预览视频流模式测试识别率困难,文中测试了导入静态图像的识别率。通过对3 950 张静态信用卡图像进行PC 端导入识别测试,信用卡号码整体识别率为86.53%。在实际移动设备应用场景中,采用视频流模式即可获得信用卡的多帧图像,相当于有多次识别机会,直到识别出结果。理论上其识别率要远高于静态模式导入识别样本的准确率,粗略统计识别率应高于90%。

3 结论

该文针对移动设备对信用卡卡号识别的需求,设计了从图像校正、卡号定位、卡号切分识别和卡号校验的整套解决方案。提出了一种基于Sobel 梯度积分图快速定位卡号的方法,这种技术可以推广到其他的识别场景。提出了一种基于SVM 滑窗的卡号分割算法,通过对卡号位置进行水平滑窗,作SVM分类,判断当前窗口是否为有效字符位置,这样可以得到多个字符锚点,然后通过插值切分整个卡号行。设计了一种基于梯度方向特征和LVQ 分类器的单字符识别方案。通过对比MQDF 分类器识别率和字典体积,验证了所提字符识别方法的有效性。通过实验测试结果表明文中所提方法静态图像识别率为86.53%,视频流动态图像识别率大于90%,达到了预先设计需求。

文中方法在处理一些背景极度复杂的银行卡号时,会有误识现象,这将是下一步要研究的方向,后续还会增加对信用卡截止日期和持卡人姓名的识别。

猜你喜欢

卡号字符识别字符
河南省长葛市彩红蜂衣蜂帽加工厂
寻找更强的字符映射管理器
河南省长葛市彩红蜂衣蜂帽加工厂
字符代表几
一种USB接口字符液晶控制器设计
消失的殖民村庄和神秘字符
一种改进深度学习网络结构的英文字符识别
仪表字符识别中的图像处理算法研究
好老板
基于CUDA和深度置信网络的手写字符识别