基于像素匹配的Android平台身份证号码实时识别

2016-09-23 07:19程习武李旭伟张德江刘元梓
现代计算机 2016年4期
关键词:身份证号像素点号码

程习武,李旭伟,张德江,刘元梓

(四川大学计算机学院,成都 610065)

基于像素匹配的Android平台身份证号码实时识别

程习武,李旭伟,张德江,刘元梓

(四川大学计算机学院,成都610065)

Android;图像识别;身份证号码;实时

0 引言

随着信息化技术的发展和智能手机的日益普及和平民化,以Android应用为代表的移动应用越来越广泛,为人们的生活带来了诸多方便。一款移动应用能否赢得用户,除了功能实用、界面美观外,操作的便利和简单也是一项重要指标。作为一款优秀的移动应用,与用户的交互应该尽可能地简单方便,尽量减少用户繁锁的输入。众所周知,阿里巴巴集团的“支付宝钱包”App中扫一扫识别银行卡号的功能,极大地提高了用户输入银行卡号的速度,减少了出错率,无需用户一遍一遍进行核对,十分方便。而对于公民身份证号来说,目前二代身份证号普遍为18位,比银行卡号更长,对于中老年用户来说要输入这么长一串数字非常繁锁,如果能够像支付宝钱包一样采用自动识别的技术来进行辅助输入,将会为身份证号码的输入提供极大的便利。

通过对Android市场类似App的考察发现,银行卡号识别与商品条码、二维码识别以及名片识别之类的应用已经较为广泛,但目前还没有通过图像识别的方法来实时识别身份证号的App应用。对于身份证信息的读取,在银行、铁路交通部门、旅馆等目前使用的身份证读卡器无疑是最准确最快速的一种手段,但身份证读卡器的使用需要与公安部门联网,必须得到公安部门的许可,而且需要附加一套读卡设备,对于普通的App应用来说可行性不高。

采用图像识别技术识别身份证号码这种十分规范的数字,利用目前比较成熟的图像处理技术如OpenCV、C++、MATLAB等可以轻易实现,但把这些第三方库集成到Android平台或其他移动平台上来,则难度较大。虽然移动应用市场上关于名片识别的App已经较为普遍,如“夏普名片识别”,但其使用的是一套通用的OCR文字识别库,是针对所有字符的识别库,仅用来处理身份证号码中的0-9十个数字来说显得比较臃肿,目前还没有专门针对身份证号码识别的库。还有一种商用的身份证号码识别App如 “文通证件识别”,其采用的文字识别库与“夏普名牌识别”如出一辙,其操作方式是先拍照保存,然后对保存的照片进行识别,没有做到实时性,操作不够人性化且不利于与其他应用进行集成,而且其源码不公开,使用费用相对较高。

本文通过最简单的像素匹配技术,在Android平台上实现了对身份证号码的实时采集和识别,未使用任何图像识别相关的第三方库,不会增加App的体积,不需要额外的硬件和网络开销,极大地增强了应用的普适性。

1 系统设计与实现

为更加清晰地说明本文设计思想,本文单独设计了一个简单的Android应用,如果需集成到具体的项目中,可以将本项目中的Java类打包成JAR包引入到具体的项目中进行调用,或者直接将本项目中的Java类拷贝到具体的项目中去。

1.1系统设计

App只有一个界面,打开即显示扫描界面,在光线良好的情况下,将手机摄像头正对身份证样本进行取景,App会循环对身份证进行扫描并识别,直到识别成功后停止扫描,同时弹出对话框显示识别结果供用户确认。

(1)构造数字模型矩阵

①制作样本。利用Photoshop或其他绘图软件抠取身份证中的数字0-9作为样本,如图1 所示。

图1 初始数字图像样本

②样本预处理,主要是去色和增加对比度,减少程序处理时的噪声。

③样本二值化。本文编写了一个简单的程序对此10个样本图像进行二值化处理,通过程序扫描像素矩阵,取得每一个像素点的R、G、B颜色值,如果同时满足R<180、G<180、B<180,则将此像素点置为黑色,即0xFF000000,否则置为白色,即0xFFFFFFFF。经过二值化处理后的样本图像如图2 所示:

图2 二值化处理后的数字图像样本

④数字化样本图像。再次遍历二值化后的样本图像,构造样本数组,如果是白色,存为1,如果是黑色存为0,得到0-9的像素数字化矩阵,并作为常量数组存储为SAMPLE_ARR[10],如0、3的样本在模型中SAMPLE_ARR[0]、SAMPLE_ARR[3]的存储形式如图 3所示:

图3 数字0和数字3在模型中的存储形式

②程序识别流程如下

1.开始;

2.初始化样本矩阵SAMPLE_ARR[10];

3.抓取摄像头场景,并存储为临时图片tmp.jpg;

4.主线程暂停,抛出新线程;

5.对tmp.jpg进行预处理和初步裁剪,得到res.jpg;

6.扫描关键像素点,如果无关键像素点,或像素点过少,则认为原始图像不符合要求,返回2重新抓取场景;

7.对res.jpg进行二值化处理并缩放到适当尺寸;

8.得到待识别的像素数字化矩阵res_arr[0]-res_arr [17];

9.循环将得到的数字化矩阵与样本矩阵进行对照,设定一个阈值范围,如果相同像素点超过80%,即认为是对应的数字,如果10个样本均不符合,认为本次识别失败,返回2重新抓取场景;

10.如果18个数字均成功识别,则将识别出的18位数字组拼成身份证号采用身份证识别正则表达式进行验证;

11.如果未通过验证,认为本次识别失败,返回2重新抓取场景;

12.如果通过验证,则弹出对话框供用户核对,流程结束。

以上过程流程图如图4所示。

图4 识别身份证号码App程序流程

1.2系统关键技术实现

(1)样本矩阵的构造

通过程序获取10个二值化样本图像宽高像素值分别为 width,height,初始化三维整型数组 SAMPLE_ARR[10][width][height],扫描10个二值化样本图像,白点存为1,黑点存为0,将SAMPLE_ARR按数组格式输出到文件,以备使用。

(2)图片循环采集

因为是自定义的预览窗口,所以不能使用Android自带的拍照API,需要自己定义一个接口完成取景拍摄之后的动作,此接口在系统拍完照后调用,接口实现代码如代码1所示:

代码1调用Android拍照API回调方法

③图像预处理

首先,将原始图像进行缩放至600px×400px,以提高处理性能。

其次,调整图像亮度和对比度,以便于下一步图像二值化时程序比较容易处理。

基本原理:图像亮度本质上是指图像中每个像素点的亮度,每个像素的亮度指RGB值的大小,RGB值为0的像素点为黑色,RGB均为255的像素点为白色。对比度则是不同像素点之间的差值,差值越大,对比度越明显。从直方图分析的观点来看,对比度越好的图片,直方图曲线会越明显,分布也越均匀。

算法流程:调整图像亮度与对比度算法主要由以下几个步骤组成:

1.计算图像的RGB像素均值M

2.对图像的每个像素点减去平均值M 3.对去掉平均值以后的像素点P乘以对比度系数4.对步骤3处理以后的像素P加上M乘以亮度系数

5.对像素点RGB值完成重新赋值

通常,对比度系数的最佳取值范围在[0-4],亮度系数的最佳取值范围在[0-2]之间,本文分别取值1.5和1.0。

④图像二值化

扫描像素矩阵,取得每一个像素点的R、G、B颜色值,如果同时满足R<180、G<180、B<180(180为实验值),则将此像素点置为黑色,即0xFF000000,否则置为白色,即0xFFFFFFFF。程序关键代码如代码2所示:

代码2二值化像素点方法

⑥身份证号码有效性验证

如果18个数字识别完成后,App会对此号码有效性进行验证,确保识别出的号码为有效的身份证号,以增加识别成功率。验证身份证号码有效性可以通过正则表达式完成,关键代码如代码4所示:

代码4验证身份证号码有效性方法

public boolean isIdcardNumber(String idcard){

return idcard==null||"".equals(idcard)?false: Pattern.matches( "(^\d{15}$)|(\d{17}(?:\d|x|X)$)",idcard);

}

2 测试结果与分析

通过对多个身份证样本在不同场景下的识别测试,发现在光线较好,拍摄角度比较正时能够比较快速和正确地识别出身份证号,对于较小角度的旋转也基本能够正确识别身份证号,在光照条件较差或拍摄角度偏差较大时,识别正确率较差。

识别失败结果分析:本文所设计的App在于识别身份证号的实时性,不追求一次性识别的准确性,所以并未考虑图像旋转角度较大的情况处理,不过对于此种情况并不影响应用的实际使用,因为对于App而言,一次识别的周期很短,如果识别失败App会马上进入第二次场景抓取和识别循环,如果超过一定时限将提示用户调整取景角度,并在取景界面显示取景框,提示用户对焦。只要用户按照提示保正较为平正的取景,基本能够正确识别。

3 结语

本文设计并实现了Android平台上基于像素匹配的身份证号码实时识别的应用,并能够通过打包成jar文件的方式轻易地集成到其他具体的Android项目中去,提高App中身份证号码输入的快速性和准确性,增强App用户体验。本设计十分轻巧,未使用任何第三方图像支持库,基本不会增加具体项目的体积。整体实现所使用的技术也不多,仅仅用到了Java基本的图像操作和数组操作,对于普通开发人员易于上手,甚至可以十分轻易地通过Objective C或Swift语言改写成iOS平台应用,或将源码嵌入到桌面应用程序中,具有较强的实用性和普适性。

[1]Alsuwailem A M.A Novel FPGA Based Real-time Histogram Equalization Circuit for Infrared Image Enhancement[J].Active and Passive Electronic Devices,2008(03):311-321.

[2]Zhou S M,Gan J Q,Xu L D,et al.Interactive Image Enhancement by Fuzzy Relaxation[J].International Journal of Automation and Computing,2007,04(3):229-235.

[3]孙夑华.数字图像处理:Java编程与实验[M].北京:机械工业出版社,2011.

[4]刘持标,林金发,孙丽丽,吴美瑜,邱锦明.基于 Android图像识别技术的失踪人员管理系统开发[J].三明学院学报,2014.8(4), 17-24.

[5]梁福林,冯生强,马思思,石华,唐琼.“随手拍”物品信息查询系统应用设计与实现[J].教育教学论坛,2015.9(39),238-239.

[6]CSDN.Java图像处理之调整亮度与对比度[EB/OL].http://blog.csdn.net/jia20003/article/details/7385160.2012.3.22

Android;Image Recognition;Identification Card Number;Real-Time

Real-Time Recognizing Identification Card Number Based on Pixel Matching on Android Platform

CHENG Xi-wu,LI Xu-wei,ZHANG De-jiang,LIU Yuan-zhi
(College of Computer Science,Sichuan University,Chengdu 610065)

程习武(1985-),男,湖北天门人,在读硕士研究生,助理工程师,研究方向为面向设计与制造的软件工程

李旭伟(1963-),男,浙江长兴人,副教授,研究方向为计算金融

张德江(1986-),男,新疆乌鲁木旗人,在读硕士研究生,助教,研究方向为信息安全

刘元梓(1984-),男,重庆人,在读硕士研究生,助教,研究方向为信息安全

2015-12-15

2016-01-10

利用图像识别技术中最基本的像素匹配技术,通过限制图像采集条件来进行循环采集识别的方式,设计并实现Android平台上基于像素的实时识别身份证号码的App应用,该应用能够非常容易地集成到其它Android项目,以提高身份证号码输入的快速性和准确性,增强App用户体验。同时,该设计十分轻巧,未使用任何第三方图像支持库,可以很容易地使用Objective C语言或Swift语言改写之后集成到iOS平台应用中。而且该设计基本不会增加App项目的复杂度和体积,对于普通开发人员来说,易于理解和上手,对智能手机硬件配置无特殊要求,具有较强的实用性和普适性。

Designs and realizes an Android application which can recognize identification card number real-time,with the technology of pixel matching which is the basis of image recognition,by limiting the image acquisition conditions and cycling collect to recognize.And the App can very easily be integrated into other Android projects to improve the speed and accuracy when inputting identification numbers, which will enhance user experience for applications.Meanwhile,the design is very light,without any third-party image supporting libraries,which can be integrated into the iOS platform very easy by rewriting with Objective C language or Swift language.It is practical and universal,which will not increase the complexity of App,can be learn and understand easy for average developer,and non-specially requiring for smart phone hardware.

猜你喜欢
身份证号像素点号码
图像二值化处理硬件加速引擎的设计
基于局部相似性的特征匹配筛选算法
说号码 知颜色
一个号码,一个故事
作品赏析(4)
老师情
猜出新号码
作品赏析(3)
基于像素点筛选的舰船湍流尾迹检测算法
基于canvas的前端数据加密