身份证识别图像处理实验报告.docx
- 文档编号:4977859
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:16
- 大小:987.89KB
身份证识别图像处理实验报告.docx
《身份证识别图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《身份证识别图像处理实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
身份证识别图像处理实验报告
课程大作业实验报告
基于图像分析身份证信息识别
课程名称:
数字图像处理
组长:
林爱珊学号:
2************年级专业班级:
10通信3班
成员一:
官璐学号:
2***********年级专业班级:
10通信3班
成员二:
李妙云学号:
2***********年级专业班级:
10通信3班
*******
报告提交日期2013年6月答辩日期2012年6月
1.前言
1.1身份证识别综述
随着信息时代的到来,信息安全成为更重要的一部分,同时,越来越多的活动需要身份信息的获取,比如开网店,网上账户等,都将用到身份证信息的采集。
身份证识别是利用硬件对身份证图像进行采集,将身份证图像中的信息分块提取到表格中,从而将身份证信息完整地,分门别类地展示出来,从而让使用者能够清晰准确地获得身份信息。
相比于传统的手工登记身份证,利用图像识别进行的身份证信息的获取有如下好处:
(1)传统的手工登记人工工作量大,尤其对于需获取的信息较多时,耗时长且耗人力。
而采用图像处理的身份证识别则有快速,少人力消耗的特点。
(2)对于传统手工统计,信息的正确率受到人的状态的影响,一旦人处于疲劳状态,很容易造成信息丢失或者错误。
采用图像处理的身份证信息则不受主观影响,能够提高准确率,稳定率。
基于上述两点,身份证识别可以极大提高工作效率及质量,具有其存在的必要性。
1.2目标
(1)CVI编程,实现对身份证图像的文字、字符等信息的识别,显示在界面的文本框内容;
(2)提取信息,并对信息进行分类,如姓名、性别、年龄、地区等,并将这些信息保存在excel中。
1.3.技术路线
图1.技术路线流程图
(1).字符库的制作:
选择合适的字体,对数字或汉字制作成统一尺寸的标准图像,便于后面的字符匹配。
(2).模板提取:
制作身份证模板,将身份证归一化后用模板提取出身份证各信息块的图像。
(3).行列分割:
将模板提取得的信息块中的文字进行行列分割,逐一分割出每个字符,标准化并将字符送到匹配模块。
(4).匹配:
将行列分割得到的各个字符与标准字符库进行匹配。
(5)导入到excel:
将匹配得到的结果输入到excel,并在事先做好的excel文件中显示身份证的各部分信息.。
2.字符库的制作
2.1.字符图像的制作
(1)查找资料,得知身份证所用字体主要为华文细黑,而身份证号码为OCR-B10BT字体,出生日期为方正黑体简体
(2)用word做出以华文细黑字体,相同大小的一批文字,并分别做出OCR-B10BT、方正黑体简体两种字体的数字
(3).将上述文字逐一输入到画图软件,每个文字保存为一个bmp文件,且每个bmp文件有相同的大小。
2.2.字符的制作原理
将字符图像载入,进行行列分割。
对图像进行行扫描,自上而下,扫到第一个黑点所在行作为起始行,自下而上,扫到第一个黑点处作为结束行。
同理可得左右边界。
通过对每个字符的处理从而提取出字符的边框。
将边框中的字符标准化,形成标准字符。
由于采用了合适的字体,并选用相同的标准制作,有助于字符匹配的准确率的提高。
2.3.程序的改编
由于参考资料中的字符制作程序为单个字符制作,完成字库的制作工作量略大,且在执行时会有错误产生,因此我们进行了程序的改编。
在理解单个字符制作程序的基础上,引入了多个字符制作的方法,编写了多文件打开的函数MultiFileSelectPopup(),利用status=MultiFileSelectPopup(lpath,"*.bmp","","",0,0,1,&numFiles,&fileList);语句实现多图像文件的导入,同时导入大量文件,利用循环,自动完成导入的字符的批量制作。
制作步骤包括:
载入图像——阈值选择——二值化——边界提取——数字提取——标准化——保存——退出。
由于步骤较多,我们通过调用函数实现了多字符制作一键完成,效果显著。
图2字符图像的制作的实验结果
3.待识别字符图像处理
3.1模板提取
3.1.1模板提取的原理
每张载入的身份证大小不一,同时存在照片的质量不同,因而首先要进行归一化,以便后面的信息提取。
将归一化后的图像进行信息块的位置的确认,制作模板。
将制作的模板与身份证进行“与”操作,从而将信息块的信息突显出来,从而屏蔽其他无关信息。
图2.模板提取原理框图
3.1.2.模板提取的实现
(1)根据身份证,制作统一的标准的模板,并保存在程序中。
(2)实现对载入身份证的归一化。
(3)以后的使用中,每次载入身份证,标准化后直接与程序中的模板进行与运算,模板中信息块部分灰度值置255,而其余部分置0,当与标准身份证进行“与”运算时,模板中置0的部分也会被屏蔽,从而取出了信息块。
(4)选择合适的阈值,对取出的信息块进行二值化,避免背景对文字分割的影响。
图3模板提取的实现
3.2行列分割
3.2.1行列分割的原理
把信息块的内容突显出来后,要对每个信息块的内容进行行列分割,以确定单个字图像的提取区域,方便之后的单字提取。
行列分割阈值和算法的选取决定了单字提取的准确率,所以显得尤为重要。
3.2.2行列分割的实现
对选中模块进行行分割,记录行分割的位置。
再对分割出的每一行进行列分割,记录列分割的位置。
在此为了提高其准确率,我们采用的判断算法进行了加强。
然后在行列分割的位置进行画线,并显示出来。
图4.行列分割的实现框图
行,列分割位置的确定:
设x[a]为统计所得的a行的像素点,那么当条件满足x[a-1]=0,x[a+1]!
=0且x[a]=0,此时,判断a行为起始行;当条件满足x[a-1]!
=0,x[a+1]=0且x[a]=0,此时判断a行为结束行。
同理可确定起始列和结束列,从而进行分割
图5行列分割的效果
3.3.单字提取
3.3.1单字提取的原理
行列分割后单字的提取,就是把每个字的分别提取出来。
为了方便后面的字符匹配,我们把提取出来的单字转为标准化图像。
3.3.2单字提取的实现
单字提取是根据行列分割的位置,把每个单字所在的区域的灰度值赋予一个新的Image,就可以实现单字的提取。
4.字符匹配
4.1字符匹配的原理
将字库中的字符统一标准为36*36,将分割得到的字符也标准化为36*36,这样,同一个字,所对应的的像素点分布基本相同。
在匹配过程中,将待匹配与标准字库中的字进行比对,计算出相似度最高的字符,作为最终匹配的结果。
4.2字符匹配的实现
(1)对数字提取得到的字符进行标准化,成为与字库等同尺寸的图像。
(2)取出待匹配图像中每个像素点的灰度值,保存在数组a中;同时取出字库的第一个图像每个像素点的灰度值,与数组a中的每个值进行比较,计算出相似度s[0]。
(3)同理计算出字库中其他图像与待匹配图像的相似度,存入数组s中
(4)选出数组s[]中的最大值,即相似度最高,作为匹配结果输出.
相似度s的计算方式为:
将字库中字符图像的每个像素点与待匹配图像的每个像素点进行匹配,遇到相同的像素点则执行s=s+1,最终选出相似度最高的图像输出
图6.字符匹配流程
5.信息导入到excel
5.1信息导入到excel的原理
完成信息的匹配识别后,将所识别的信息导入到一张事先建立的Excel模板表格中,利用CVI所提供的一些文件如excel8.h,excel8.fp,excel8.c,以及相应的函数完成从CVI输出数据到Excel表格,要注意表格各单元格与所对应信息的正确存放位置关系。
5.2信息导入到excel的实现
(1)按要求用EXCEL做好表格模板存储成普通EXCEL文件格式excelimf.txt,我们用的是Excel2010;
(2)按CVI的正常程序,在UIR界面创建按钮(我们创建的是“导出Excel”,CallBack函数OutputtoExcel),一键完成打开Excel程序、写入数据及保存表格的任务;
(3)工程要添加excel8.h,excel8.fp,excel8.c,excelimf.txt文件;
(4)编写LaunchApp(),OpenAppFile(),WriteDataToExcel(),SaveAppFile(),CloseAppFile(),ShutdownApp()函数,其中写入数据函数WriteDataToExcel()关键如(5);
(5)关键问题是控制所要导入的各模块的信息指向Excel模板表格中的哪一个单元格,这里是在匹配过程中将每个模块的信息存放在各模块对应的一个字符数组中,每匹配一个字符就用字符串处理函数strcpy将该字符连接到对应数组中,即全部信息匹配完后每个模块所对应的的字符数组就存放着该模块完整的信息字符串,每个字符数组便可以在WriteDataToExcel()函数中利用CA_VariantSetCString(&vArray[i*COLUMNS+j],Test)将其写进表格对应单元格,其中i,j便是用来控制单元格的位置的。
6.验证试验
6.1试验结果
图7载入图像并标准化
图8模板提取并二值化
图9提取感兴趣区域
图10行列分割
图11单字提取和字符匹配
图12保存到Excel
图13保存结果
6.2试验分析与解决办法
(1)字符库制作的路径问题:
第一次涉及到关于自动存储方面的问题,对路径设置函数并不熟悉,多次出现了保存失败的问题,主要是对FileSelectPopup函数的应用。
(2)在实验的过程中,会出现一些行列分割不够好的现象。
可能是有噪声点的问题,所以我们在二值化的时候加入了一个去噪程序,能够改善一下这种情况,此外我们在行列分割时,还加强了判断的语句,采用m[t][x]==0&&m[t][x+1]==0
&&m[t][x+2]!
=0,m[t][x+2]==0&&m[t][x+1]==0&&m[t][x]!
=0,以防止对一些左右结构的字进行错误的分割和提取,取得一定的效果。
(3)在单字提取时,开始时循环起来会有问题,后来发现是对很多的全局变量没有清零的原因,而有时也会出现提取到空白区域的问题,然后我们在程序中加入了一个判断语句if(a[t][j+1]-a[t][j]<9)j++;就可以解决了。
(4)字符匹配程序写完之后,一开始是单个字符的匹配试验,但只能与字库中的第一个字进行匹配,无法得到字库中其他图像的信息,程序也不断提示错误。
起初怀疑是循环程序没有写好,但是多次检查发现可以进入循环,百思不得其解。
最后原来是指向路径的问题。
程序中应用了strcat(Savepath,filename[q])这一语句,其中,Savepath是字库文件夹路径,filename[q]则代表第q个字。
当程序运行调用第一个字的信息的时候,程序正常,当调用第二个字是发生错误,原因是strcat函数实现的功能是Savepath=Savepath+filename[q],当进行第二次循环时,Savepath被改变,再也无法指向字库。
当修改为strcpy(Path,Savepath);strcat(Path,filename[q]);程序能够正常运行。
7.结论和讨论
7.1结论
(1)采用先提取感兴趣区再进行二值化的放法能够自动选择更好的阈值,有利于分割与匹配
(2)采用了均值滤波的方法,希望能减少噪点增加匹配率,但效果一般;若采用中值,则效果很差,基本无法辨认原来的字符,严重影响分割匹配
(3)对于很多资料中提到的先细化再匹配的原理,我们加以实践,但是细化后的匹配效果远比细化前的效果差
(4)对于左右结构,上下结构等字的分割存在一定难度,通过加强行列界限判断条件可以基本解决。
(5)由于采集的照片质量,亮度等不同,图片存在噪点较多,一定程度上影响了匹配效果,本程序能够基本完成身份证信息的提取与识别
通过这次的大作业,我们知道了基于图像分析的身份证识别,要先建立一个字库(里面文字字体要与身份证中的相同),然后对载入的身份证进行预处理(最好要倾斜校正和一定的滤波),以保证比较好的载入图像,方便以后识别。
然后是对载入图像进行归一化,在和身份证模板相与,滤波并二值化后提取感兴趣区域。
对每个感兴趣区域进行行列分割,单字提取,及字符匹配。
然后再各自输入相应的文本框内,进而输出到Excel中去。
通过试验的结果,我们发现这样的方法能够较好的实现身份证识别,不过识别率还有待加强,由于时间有限,我们只能做到对所选图像的识别,其他图像还有待提高。
7.2讨论
(1)由于细化不明显,腐蚀效果过度,产生断截的现象,我们放弃了形态学的处理,如果存在一种能够控制腐蚀程度在较小范围内的算法,应该可以提高匹配率
(2)本来打算先实现身份证的倾斜矫正,再进行信息的提取,但由于编程能力有限,实现的效果不佳,最终放弃这一设想。
如果能实现,那么身份证识别这一程序就能更加靠近现实硬件的实现。
(3)将程序与硬件采集结合到一起更具有现实意义。
因为在相同的采集条件下,得到质量状况相当的图像,根据图像特点相应地改编程序可以提高识别率
(4)本次为了提高匹配率,我们了解许多种方法,主要是神经网络识别法,序贯相似法和模板匹配法。
由于神经网络识别找到的参考资料多为matlab,对于这一概念也较为生疏,因此只是稍微做了了解,并没有深入做编程体验;对于序贯相似法,我们尝试写了一段时间,但是很遗憾没有实现,由于时间问题,只好选择了老师在课堂上介绍的模板匹配法,如果以后有机会,还是愿意试验前两种方法。
8.心得体会
8.1系统开发体会
这次大作业比大学入学以来所有课程设计所付出的心血都要多。
平时的设计一般是跟同班的男生组队,而怀着对图像处理这一课程浓厚的兴趣,这次我们大胆地选择了三个女生的组合。
由于缺乏编程经验,我们在编程过程中碰壁多次。
首先是字库的制作,我们选用十余张身份证,制作了150字的字库;但等到临近最后期限,完成最终匹配的时候发现匹配率较低,这是才想起字体的影响,我们的字库是采用宋体的,而身份证则是不同区域不同字体,主要是华文细黑字体和OCT—B10BT以及方正黑体。
于是我们重新制作了字库。
其次遇到的问题是二值化的阈值选择问题,对于很多图像,二值化后的效果不好,有的字粗得难以匹配,有些字又浅的无法分割,我们试验了所有的自动二值分割的方式,但是都不能达到符合所有图像,因而我们舍弃了一些身份证图像。
之后就是关于行列分割,数字提取的阈值选择问题,以什么标准来判断边界,以及各个方面的融合。
这次最大的收获是我们组内三人团结度的大提高,这次我们先是每人分配一个大块的编程任务,然后再进行汇总整合。
前面的编程并不是很难,分块实现比较容易,最后的融合比较困难。
我们曾经熬夜到四点分析寻找一个错误,最后的结果是,我们都能摸清楚其他成员模块的编程思想,能够交换检查各个部分,相互提高,相互促进。
这也是本次大作业给我们带了的除知识上的收获外的一大受益,学会合作,学会分担,学会共同进步。
系统开发过程中我们遇到了很多的问题,也找了很多的资料,很多的程序设计都要自己编写,也参照了很多的匹配的思想。
我们发现在写程序的时候,我们往往是按照一种比较理想的情况去编写的,可是在实际上,往往会出现很多预想不到的结果。
例如:
在选择模板时,我们发现,并不是所有尺寸的模板都能够成功的导入程序中的,我们经过多次的试验,最后才确定模板大小800*600。
在行列分割时,我们也会遇到分割不到以及分割效果不好的情况,回去查看程序,反复验证及修改,才能达到较为理想的值。
而在字符匹配的时候也是会由于倾斜校正得不好而进行模板匹配会影响匹配的正确率。
在很多时候我们都不是在编写程序的,很多时候我们都是在不断的的调试和修改程序,以满足其需要。
这次的不足之处是,我们没有很好地与外界交流。
选身份证识别这一课题的同学不少,我们却很少与他们交流,闭门造车,毕竟三个人能想到的方法比较少,如果可以多与其他同学交流,也许在编程方面,方法选择方面能够有所提高,也可以避免走太多的弯路。
总而言之,这次大作业是我的大学生活中一个重重的标志,我们能够独立编程,能够合作,能够证明女生多花点心思,也能做得跟男生们一样好。
这将是我们日后的回忆中难忘的一段。
。
8.2对本门课程的改进和建议
课外关于cvi的资料比较少,希望老师多给一些资料和源代码或者可以介绍一些好的网站,可以让我们较快掌握其方法和提高编程的效率。
9.参考文献
[1]邓继忠.数字图像处理技术.广州:
广东科技出版社,2005.
[2]张毅刚.虚拟仪器软件开发环境LabWindows/CVI6.0编程指南.北京:
机械工业出版社,2002.
[3]易小波. 身份证图像识别系统中文字分割的研究[J].企业技术开发.2003(17)
[4]张真,黄山,李岱璋. 一种应用于身份证字符精确切分的算法[J].计算机应用与软件.2003(06)
[5]殷瑞祥,李国华. 身份证号码的自动识别系统[J].华南理工大学学报(自然科学版).2002(02)
[6]严国莉,黄山,李岱璋,尚建华. 印刷体数字快速识别算法在身份证编号数字识别中的应用[J].计算机工程.2003(01)
[7]陈兆学,施鹏飞,周煦潼. 一类特殊印刷体字符的分割和识别方法[J].微型电脑应用.2003(02)
[8]吴冰,秦志远. 自动确定图像二值化最佳阈值的新方法[J].测绘学院学报.2001(04)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 身份证 识别 图像 处理 实验 报告