基于MATLAB的身份证号码的识别算法-程序员宅基地

技术标签: 算法  python  机器学习  计算机视觉  人工智能  

基于MATLAB的身份证号码的识别算法

  1. 课题介绍

为快速识别身份证号码,以计算机视觉系统为技术手段,以第二代居民身份证为研究对象,从身份证 号码图像中提取号码数字0—9的空间分布特征和结构特征,采用相似系数最大和结构特征一致准则,应用 MATLAB软件编程实现了身份证号码的快速识别.运用图像处理和模式识别技术,实现了身份证号码图像的 预处理、图像分割、号码图像的修正、号码体的定位、号码体的识别等算法,建立了基于摄像头的身份证号码识别系统.系统的识别速度和准确率可满足实际需要.

身份证号码是公民身份的唯一标识,出于保障 公民合法权益和社会治安的考虑,越来越多的行业 都开始要求录入客户的身份证,这是一项非常繁琐 的工作.手工录入效率低且容易出错.为解决此问 题,笔者基于各个数字的不同,对身份证进行一系列 预处理后精确地把数字分割出来,采用MATLAB对 身份证号码进行识别.实验证明,该方法的识别速度 和准确率可以满足实际需要.

  1. 总体方案设计

第二代身份证是一个长度为85.6 mm,宽度为 54.0 mm的长方形图片,大小固定,18位身份证号 码位于身份证的右下方,其字体类型为OCR - B10BT.基于身份证的这些特点,设计方案如为.

身份证图像采集装置|-计算机身份证图——去噪—— 二值化—— 身份证号码区域定位——灰度化——字符分割——特征提取 ——K近邻分类器设计——识别


2.1图像获取装置的制作

釆用一个身份证图像获取装置来获得稳定的图 像.获取装置手工制作,由光源、摄像头、木板支架3 部分构成,主要零件包括220 V(10 W)环形光源、镇 流器、白色灯罩、高清摄像头、黑色磨砂材料、固定摄 像头与光源的木板结构支架,如图2所示.

环形光源铁丝架 0 USB数据线
摄像头 n !— -~1计算机〔
白色灯罩 J U丨身份证1

图2图像获取装置示意图

这个装置是一个类似灯箱结构的装置,长度 16. 5 cm,宽度15.0 cm,高度35. 5 cm,由一个木质 地板和两个垂直木质秤组成,用黑纸将其包围,又用 2个横向木质秤将黑纸和木质架子固定.整个装置 用黑纸围起来,在下方开一个门,可以自由地放取身 份证.装置是不透光全封闭的,以免受到外部光线变 化的影响,防止拍摄到的身份证图像表面有很亮的 反光,造成号码体被遮盖等,如图3所示.

构成装置的光源釆用稳定的内置环形光源近距 离照射,灯管为10 W,固定于装置最上方.为了避免 获得的身份证图像出现很亮的白斑点,灯管下方一 定距离处放置平行于灯的白色灯罩来遮蔽装置,使得光源的光分散,均匀照射岀去,避免了直射强光直 接照射身份证带来的亮斑点和强反光.同时,环形光 源在一侧均匀照射,克服了身份证表面的防伪标记 在图像上的显现,降低了其干扰.另一方面,在封闭 的装置内采用稳定的环形光源,以保证获得的图像 不受外界光线的影响,即便在光线很弱的夜晚,该装 置也能够正常使用。

构成装置的摄像头固定于装置的中部,以横穿 装置的双层铁丝为支架,固定时,摄像头紧贴灯罩, 镜头通过灯罩上所挖的圆孔突出出来,以便调节焦 距和采集图像.摄像头选用深圳极速科技有限公司 的大画质720 P高清摄像头,型号为V5,分辨率可 达到1 280 x960,可以满足实际需求.采用此装置, 获取了 50张身份证彩色图片


v2-3d2393650f83a3bbefb219a815b36756_b.jpg


2.2图像预处理


v2-b3181e08c57230c459bc9de22c75f87d_b.jpg

因为获取的身份证图像为真彩色图像,为了提 高身份证图像的处理速度,增强图像的识别效果,身 份证号码识别的预处理系统首先对图像进行灰度化 的操作,得到的灰度图像如图4所示.然后对身份证 号码进行切割,取得号码部分,得到的图像如图 5所示.

图4灰度化后的身份证图像



412726198807118445

图5切割后的身份证号码图像


将灰度图像转化为二值图像称为灰度图像的二 值化.二值化一般釆用阈值分割法,基本原理为:根 据图像的大致灰度分布情况,选取一个合适的灰度 值(称为阈值),这个灰度值可以理解为一个临界 值,它将图像中的灰度分成2个灰度级,图像中凡是 大于或是等于该灰度值的像素点将其灰度值设置为 1,凡是小于该灰度值的像素点将其灰度值设为0. 被处理后的像素中只有黑白2色⑴.得到的图像如 图6所示.


412726198807118445

图6二值化和求反后的身份证号码图像


在将图像扫描进计算机的过程中,由于光线强 弱不同等原因,图像中不可避免地存在噪声和干扰, 所以要进行平滑处理,用膨胀和腐蚀运算进行处理. 函数imdilate是用来膨胀图像.膨胀是在二值图像 中“加长”和“变粗”的操作,这种特殊的方式和变粗 的程度有一个称为结构元素的集合控制.函数strel 是运用各种形状和大小构造结构元素.腐蚀是在二 值图像中“收缩”和“细化”的操作,收缩的方式和程 度有结构元素控制.函数imerode用来腐蚀图像⑴. 得到的图像如图7所示.


412726198807118445

图7去噪后的身份证号码区域子图像


在定位了身份证号码区域子图像并去噪后,需 要在该区域子图中提取出18个身份证号码子图,以 便后续预处理中更方便地观察字符特征并提取,同 时为号码识别提供方便.分割后的数字如图8所示.


  1. 身份证号码的特征提取及识别

3.1欧拉数特征的提取

读入1张身份证,灰度化,截取身份证号码,形 态学处理,二值化,切割字符,求出单个子图像.经过 图像预处理以后,观察10个阿拉伯数字,其中数字。

8的欧拉数与其他9个数字的欧拉数不一样,数字 0,6,9的欧拉数一样,剩下的6个数字欧拉数一样, 所以欧拉数为一个特征⑵.10个数字的欧拉数 见表1 -

1阿拉伯数字的欧拉数

数字 0 1 2 3 4 5 6 7 8 ~

欧拉数 100000102 1

利用欧拉数特征将字符8区别开来,同时将字 符0,6和9归为1组,欧拉数特征为1,将字符1,2, 3,4,5,7和X归为一组,欧拉数特征为0.

3.2特征提取

对切割好的数字字符图像求出其长度和高度, 再求出长度和高度的1/2和1/4.

3.2. 1计算各个位置上数字1的和

切割好的图像是二值图像,数字图像矩阵的元 素由0和1构成,有笔画的矩阵元素为1,空白处矩 阵元素为0.根据这个特性,提取特征,统计1的个 数,即计算各个位置上数字1的和.

1) 整体和:整个矩阵中所有位置上的1相加.

2) 左半部和:整个高度和长度的1/2矩阵位置 上的1相加.

3) 右半部和:整体和减去左半部和.

4) 上半部和:上部高度为1/2的整个长度矩阵 位置上的1相加.

5) 下半部和:整体和减去上半部和.

6) 上左半部和:矩阵的1/4,靠近上面和左面位 置上的1相加.

7) 上右半部和:上半部和减去上左半部和.

8) 左上半部和:矩阵的1/4,靠近左边和上边 位置上的1相加.

9) 左下半部和:左半部和减去左上半部和.

10) 上上半部和:上部高度为1/4的整个长度 矩阵位置上的1相加.

11) ±下半部和:上半部和减去上上半部和.

3.2.2提取阿拉伯数字的6个特征

1) 整体左右比:左半部和除以右半部和.

2) 整体上下比:上半部和除以下半部和.

3) 上部左右比:上左半部之和除以上右 半部和.

4) 左部上下比:左上半部和除以左下半部和.

5) 上部上下比:上上半部和除以上下半部和.

3.2.3 注意事项

选择特征时,需要注意下面几个方面.

1)在数字9,0,6中,欧拉数一样,而整体上下比 相差很大.2) 欧拉数为0时,整体上下比大于1的是数字 1和7,小于1的是4,和1差不多的是3,上部左右 比中,右多的是数字7,对称的是1.

3) 左右比中,数字2和5差别不大,而上部左右 比中,右部多的是数字2,左部多的是数字5.以数字 4为例,具体特征值见表2和表3.

2数字4的特征值

度量 数值(特征值)
髙度 37
1/2高 18
1/4高 9
长度 24
1/2长度 12
1/4长度 6
整体和 328
上半部和 107
下半部和 221
左半部和 176
右半部和 152
上左半部和 87
整体左右比 1.157 9
整体上下比 0.494 2
上部左右比 4.350 0
左部上下比 0.977 5
上部上下比 0.754 1


3 10个数字的5个特征值

数字 整体左右比 整体上下比 上部左右比 上部上下比 上部左右比
0 0.945 1 0.984 0 0.983 9 1.157 9 1.025 2
1 0.275 7 1.650 5 0.531 5 1.394 4 2.656 7
2 1.019 5 0.952 8 0.463 8 1.729 7 0.441 4
3 0.659 7 1.320 4 0.743 6 1,324 8 1.567 6
4 1.171 1 0.479 8 4.350 0 0.754 1 0.956 0
5 1.049 5 1.406 5 2.027 8 0.847 5 3.244 4
6 1.248 8 0.699 2 1.547 9 0.464 6 0.818 8
7 1.166 7 1.736 8 0.466 7 2.245 9 0.600 0
8 0.985 9 0.931 5 1.014 8 0.801 3 0.958 0
9 0.854 3 1.245 1 0.969 0 1.015 9 1.453 5


3.3 K近邻分类器设计

为了验证预处理算法,设计了 K近邻分类器对 身份证号码进行识别.K近邻原理是:如果一个样本 在特征空间中的K个最相似(即特征空间中的最近 邻)的样本中的大多数属于一种类别,则该样本就 属于该类别.根据已知类别的训练样本和未知类别 的待测样本,利用公式可以计算出该训练样本和待 测样本之间的距离,把距离按照从小到大进行排序, 找出距离最近的K个样本,根据这K个样本的类别 来决定待测样本的类别⑷.

由于采集的身份证图像中字符X的个数较少, 对于样本训练不理想,因此,这里不再验证.其余每 类字符选取50个样本,30个用于训练样本,20个作 为待测样本,则共有500个样本,选取样本的整体上 下比、整体左右比、上部左右比、上部上下比4个特 征为特征向量计算每个待测样本向量与300个训练 样本向量之间的距离,找出最小的K个距离,待测 样本属于K个最小距离中大多数的哪一类.让K从 1到30取值,则得出各个K值下的识别率,见表4. 由表4可以看出,识别率最小时为99. 5%,说明预 处理效果较好,特征提取也比较有效。

K值 1 2 3 4 5 6 7 8 9 10
识别率/% 100 100 100 100 99.5 99.5 99.5 99.5 99.5 99.5
  1. 结语

该系统从硬件和软件两个方面较好地解决了身 份证防伪标记对于身份证图像的影响.实验结果表 明,该算法简单,易于实现,识别效果较好,为身份证 号码的自动识别提供了理论基础.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_55395440/article/details/120305762

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法