技术标签: 算法 python 机器学习 计算机视觉 人工智能
基于MATLAB的身份证号码的识别算法
为快速识别身份证号码,以计算机视觉系统为技术手段,以第二代居民身份证为研究对象,从身份证 号码图像中提取号码数字0—9的空间分布特征和结构特征,采用相似系数最大和结构特征一致准则,应用 MATLAB软件编程实现了身份证号码的快速识别.运用图像处理和模式识别技术,实现了身份证号码图像的 预处理、图像分割、号码图像的修正、号码体的定位、号码体的识别等算法,建立了基于摄像头的身份证号码识别系统.系统的识别速度和准确率可满足实际需要.
身份证号码是公民身份的唯一标识,出于保障 公民合法权益和社会治安的考虑,越来越多的行业 都开始要求录入客户的身份证,这是一项非常繁琐 的工作.手工录入效率低且容易出错.为解决此问 题,笔者基于各个数字的不同,对身份证进行一系列 预处理后精确地把数字分割出来,采用MATLAB对 身份证号码进行识别.实验证明,该方法的识别速度 和准确率可以满足实际需要.
第二代身份证是一个长度为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张身份证彩色图片
2.2图像预处理
因为获取的身份证图像为真彩色图像,为了提 高身份证图像的处理速度,增强图像的识别效果,身 份证号码识别的预处理系统首先对图像进行灰度化 的操作,得到的灰度图像如图4所示.然后对身份证 号码进行切割,取得号码部分,得到的图像如图 5所示.
图4灰度化后的身份证图像
412726198807118445
图5切割后的身份证号码图像
将灰度图像转化为二值图像称为灰度图像的二 值化.二值化一般釆用阈值分割法,基本原理为:根 据图像的大致灰度分布情况,选取一个合适的灰度 值(称为阈值),这个灰度值可以理解为一个临界 值,它将图像中的灰度分成2个灰度级,图像中凡是 大于或是等于该灰度值的像素点将其灰度值设置为 1,凡是小于该灰度值的像素点将其灰度值设为0. 被处理后的像素中只有黑白2色⑴.得到的图像如 图6所示.
412726198807118445
图6二值化和求反后的身份证号码图像
在将图像扫描进计算机的过程中,由于光线强 弱不同等原因,图像中不可避免地存在噪声和干扰, 所以要进行平滑处理,用膨胀和腐蚀运算进行处理. 函数imdilate是用来膨胀图像.膨胀是在二值图像 中“加长”和“变粗”的操作,这种特殊的方式和变粗 的程度有一个称为结构元素的集合控制.函数strel 是运用各种形状和大小构造结构元素.腐蚀是在二 值图像中“收缩”和“细化”的操作,收缩的方式和程 度有结构元素控制.函数imerode用来腐蚀图像⑴. 得到的图像如图7所示.
412726198807118445
图7去噪后的身份证号码区域子图像
在定位了身份证号码区域子图像并去噪后,需 要在该区域子图中提取出18个身份证号码子图,以 便后续预处理中更方便地观察字符特征并提取,同 时为号码识别提供方便.分割后的数字如图8所示.
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.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态
文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境
文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn
文章浏览阅读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
文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机
文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk
文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入
文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。 Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。
文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动
文章浏览阅读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技术的停车场管理系统实现与设计
文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;gt;Jni-&amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图
文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法