首页 > 编程知识 正文

基于opencv的人脸识别,身份证网上办理系统

时间:2023-05-05 23:52:06 阅读:61793 作者:1123

一、前言

本文主要实现身份证图像上身份证号码的自动识别,在Qt平台上使用opencv进行图像处理,并绘制简单的用户界面,设计了基于Qt和opencv的身份证号码识别系统。

二、用户界面

以下是一些简单的控件,这里只是实现了身份证号码的识别,没有汉字(名字和地址)的识别,水平还不够。

三、身份证图像处理流程

下图是身份证识别系统的系统框图。

四、图像二值化处理

在获取另一个图像(即彩色身份证的图像)之后,选择r分量作为彩色图像的灰度化,然后对图像进行二值化,使得身份证号码的颜色和背景颜色差异很大。 这里需要获取图像的全局阈值和本地阈值。 当通过Otsu算法(实现了opencv )获得整个图像的全局阈值t、通过Beresen方法获得感兴趣的像素的域窗口中的灰度平均值Tbn、并使用整个图像的最大灰度值和最小灰度值获得一个校正因子b时,获得第二校正因子b

这里,t是Ostu全局阈值,Tbn由以下公式确定。

b由以下公式决定。

这里,g2是图像中的灰度的最大值,g1是图像中的灰度的最小值,c是经验系数,通常使用函数OstuBeresenThreshold实现0.12算法,实现的效果如下。

五、身份证号码定位

对二值化图像进行背景黑色处理,对居民票号进行黑白反转处理,然后进行闭图像操作后,利用findContours检测二值图像中白色像素块的轮廓,提取符合长宽比和面积要求的轮廓。 找到的配置文件如下:

要识别汉字,可以在这一部分对齐汉字区域进行剪切

六、号码分割

获取的裁剪后的id号图像缩小为300*20的分辨率尺寸。 如下所示

在该图像中,显然id编号与背景图像颜色的区分较高,所以在反转颜色后,用Otsu法进行二值化时得到

要分割编号,只需分割列,即进行统计

其中f(x,y )是介于两个字符之间的像素,该过程通过函数char_segment实现

七、特征提取

提取数字字符特征向量,即梯度分布特征灰度分布特征水平投影直方图垂直投影直方图,最后得到每个字符1*72的特征向量,用calcGradientFeat函数实现

八、神经网络训练

所用训练图像均由多个身份证图像分割得到,然后经过特征提取,得到的训练矩阵和标签矩阵保存在ann_xml.xml文件中,由函数getAnnXML实现,并从ann_train中读取训练矩阵和标签矩阵

九、分类器分类

利用训练的神经网络对提取的字符特征向量进行分类,用函数classify实现。

十、校验位计算

由于最后一位的识别率可能不高,最后一位的分割结果可能不好,所以最后一位的奇偶校验位直接从前17位的数字开始计算,由getParityBit函数来实现。

十一、结果显示

该身份证号码识别系统处理的图像,需要身份证区域尽可能占据整个图像的更多区域,并且在单色背景下拍摄。 另外,拍摄的身份证图像必须尽可能均匀地照亮,不存在高亮。 如下所示

系统识别结果如下。

使用的身份证照片都来自百度搜索

源程序下载: http://download.csdn.net/detail/AP 1005834/9530222

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。