cover_image

图像算法系列-银行卡扫描识别技术简介

文远 MOGU广告技术
2017年07月19日 02:26

应用背景

随着移动互联的发展,电商移动应用中的交易环节涉及到个人银行卡账户的绑定,实际测试中手动输入16-19位银行卡号码,速度慢,易出错,用户体验非常差。为了提高在移动终端上输入银行卡号的速度和准确性,我们研发了自动识别银行卡号的技术,大大提高了绑卡的效率和体验。


银行卡识别技术介绍

银行卡号识别问题是个特定领域下的OCR问题。在具体的业务场景下,我们的银行卡号识别功能主要应用在移动端,通过相机视频流的方式进行识别。这种情况情况下算法的速度和占用资源是非常重要的考量方面,我们希望算法占用的资源尽可能少,同时速度尽可能快。

我们知道常规情况下银行卡的大小和身份证、驾照等卡片相同,符合ISO ID-1规格(85.6*53.98mm)。对于非常规银行卡形状的情况会做特殊的处理。

根据银行卡号的经验尺寸以及视频流实时识别的情况,我们可以约束用户绑卡的时候将银行卡放置在视频画面中的固定位置,依此提高识别效率。具体实现中会提示用户将卡片放在和银行卡片等比例方框中,通过检测某个固定范围内的银行卡边界最终确定卡片实际位置,同时根据检测到的卡片四个顶点坐标将卡片校正成水平标准尺寸。

图片

另外,针对非常规卡片的情形,如果连续N帧未能检测到卡片的四条边界,可以默认卡片和识别提示框重合,进入后续的识别流程。

图片

得到视频帧中卡片的位置并做校正后,接着会定位银行卡上卡号的位置区域。由于银行卡发卡行对卡号位置区域在竖直方向上有一个范围限定,因此我们可以在卡片的某个经验区域中检测实际卡号位置区域。实际处理过程中借助于微型深度学习方法可以准确的找到银行卡号位置区域、卡号字符类型(平面或者浮凸卡号)等信息。

在找到银行卡号行精确位置后,我们会切割出银行卡号的每一个字符,并识别字符。最终识别出可能的卡号结果。当前全球的银行卡号序列符合Luhn验证,通过对识别卡号结果做验证后输出识别结果。在整个识别系统中,字符切割是对图像信息做精细化处理,对识别结果有决定性的影响,我们在此花费了大量的逻辑来提高分割的准确性。经过对实际样本数据的观察和实验,浮凸和平面两种字体的卡号图像数据差异较大。为了降低问题的难度,我们根据卡号区域定位信息将浮凸和平面两种卡号区域按照各自的特点进行字符分割,这就降低了两种类型之间的干扰,提高了分割的精确度。

在实际的卡号字符切割过程中,由于卡号区域干扰较多,可能无法获得所有字符的确切位置,这时可以分析得出概率较大的所有可能字符位置,通过后续识别验证后再确定识别结果。

图片

图片

最终,我们达到了在移动端APP中的实时识别,同时在实际样本集上准确率超过95%,大大提高了用户绑卡的效率和体验。


问题和展望

为了尽可能确保识别结果可靠并在移动端保持高效率,当前识别系统对于卡号规则依赖性较强,只有符合已有统计的卡号规则才会输出结果。但是Luhn验证只能检测出卡号序列中有1位数字错误的情况,在错误数字超过1位该验证无法保证有效性。这样在卡号图像质量较差的情况下,可能出现识别结果通过验证但卡号错误的情况。

另外,为了应对实际场景中卡号污损、卡号和背景难以直接区分等情况,尽可能识别出卡号信息,我们统计了当前常用的银行卡号发卡规则(幸运的是也确实存在这样约束卡号信息的规则,近些年来的新卡号也基本符合这些规则),并依据这些规则筛选合适的识别结果。这样就可能导致由于某些位卡号识别错误,或者遇到年代比较久远、不符合卡号规则的银行卡无法得到正确的结果。该问题的进一步优化就需要细化规则和分析实际图像情况。

       当前的识别系统流程中获取卡号区域后仍然进行了常规的字符切割识别,这部分处理可以尝试使用类似LSTM的方法直接识别卡号区域的内容。为保证足够的样本数据,可以使用CGAN的方式生成样本做相关训练




更多流量广告搜索算法相关内容, 敬请关注“美丽联合数据技术”公众号

图片


继续滑动看下一个
MOGU广告技术
向上滑动看下一个