机器视觉学习系列四:身份证识别
项目背景:基于手机平台,识别身份证编号、姓名、年龄、地址,性别等;
具体实施方案:
1、基于身份证分类器检测身份证的位置,关于身份证分类器,采用的是HAAR+adaboost算法进行训练;
2、在已经检测到的候选身份证区域里,进行垂直边缘检测;
3、形态学运行,连接垂直边缘;
3、去除干扰连通区域,主要基于连通区域的长宽比,面积,质心相对位置,去除典型的非编号区域;
4、选择质心纵坐标最大的连通区域作为编号数字区域;
5、垂直投影,进行编号的数字分割;
6、基于分割的数字位置,综合判断该区域是不是真正的身份证编号区域,如果是,说明当前候选区域是真正的身份证,否则,说明当前区域是误检区域 ;
7、基于所有的数字中心,通过最小二乘直线拟合,进行身份证的倾斜校正;
8、按照身份证的固定布局规则,获得剩下各个元素的位置,即姓名、性别、地址等;
9、基于垂直投影方法,获取各个元素的单个字符位置;
10、数字识别,采用最简单的模板匹配算法;
11、汉字识别,基于tessract库,但是直接使用该库,识别率很低,只要60%左右,本项目进行了汉字增强处理,主要是外部做一些预处理,比如去除一些干扰,把一些粘连区域分开等,然后在使用tessract库,汉字识别率显著提高;
12、android平台移植,关于opencv的android开发,可以直接参考opencv相关历程,tessract这一块,有一个分支哭可以直接在android上跑,不过不能做到随心的去修改调用,本项目使用的是tessract的源码,通过NDK,自己编译的,呵呵,花了很长时间的尝试,最终搞定;
实验结果:针对清晰的身份证图像,同时倾斜角度在正负10度以内的,数字 识别率99%,汉字识别率在92%以上;
不足:地址里的数字和汉字有时很难区域开来,造成一定的错误识别,美中不足啊,
机器视觉学习系列四:身份证识别相关推荐
- [jQuery学习系列四 ]4-Jquery学习四-事件操作
[jQuery学习系列四 ]4-Jquery学习四-事件操作 前言: 今天看知乎偶然看到中国有哪些类似于TED的节目, 回答中的一些推荐我给记录下来了, 顺便也在这里贴一下: 一席 云集 听道 推酷 ...
- 开发ActiveX控件调用另一个ActiveX系列0——身份证识别仪驱动的问题
程序员要从0下表开始,这篇是介绍这个系列的背景的,没有兴趣的人可以直接跳过. 为什么要开发ActiveX控件 由于工作需要,我们开发了一个网站,使用了一款身份证识别仪的网页ActiveX(OCX)插件 ...
- Identity Server4学习系列四之用户名密码获得访问令牌
1.简介 Identity Server4支持用户名密码模式,允许调用客户端使用用户名密码来获得访问Api资源(遵循Auth 2.0协议)的Access Token,MS可能考虑兼容老的系统,实现了这 ...
- android 键编译,Android 音视频学习系列 (四) 一键编译 32/64 位 FFmpeg 4.2.2
前言 2020/5/20 增加了硬件解码编译脚本 编译环境 Centos + NDK20b + FFmpeg4.2.2 + Android-21/16 2020/4/26 更新了编译 64 位脚本 编 ...
- 吕鑫MFC学习系列四
第一个是Win32工程转换而成MFC工程: 建一个win32项目,window应用程序,然后删除了所有函数,只留下主函数,编写过程中转MFC,所以右击项目,选择静态库MFC,然后在stdafx.h中用 ...
- Python - 深度学习系列1-目标识别 yolo
1 目的 实现基于yolo网络的目标识别. 使用github上开源的代码.那么需要做的事只有几样: 1 原理.多少还是知道一下yolo的原理以及应用特点. 2 环境.对应的安装包,特别是cpu.gpu ...
- Java NIO学习系列四:NIO和IO对比
前面的一些文章中我总结了一些Java IO和NIO相关的主要知识点,也是管中窥豹,IO类库已经功能很强大了,但是Java 为什么又要引入NIO,这是我一直不是很清楚的?前面也只是简单提及了一下:因为性 ...
- RabbitMQ入门学习系列(四) 发布订阅模式
什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道消息发送到队列 ...
- 【Python学习系列四】Python程序通过hadoop-streaming提交到Hadoop集群执行MapReduce
场景:将Python程序通过hadoop-streaming提交到Hadoop集群执行. 参考:http://www.michael-noll.com/tutorials/writing-an-had ...
最新文章
- vue父组件ajax改变数据,vue父组件传了变量给子组件,改变子组件的对象时,父组件也跟着改变...
- ODB——基于c++的ORM映射框架尝试(安装)
- android8支持设备,Android8.0奥利奥支持机型有哪些 安卓8.0奥利奥适合设备详细介绍...
- 如何科学的使用华为云
- 【leetcode】963. Minimum Area Rectangle II
- 百度js选择器fox
- python lambda函数详细解析(面试经常遇到)
- Exchange Server 2013部署系列之一:部署环境介绍
- AI智能电话机器人源码搭建的原理
- [转载]计算机端口详解
- 记一次mykings暗云挖矿木马的排查与解决
- 关于开源软件开发的若干问题
- ACP敏捷管理-知识要点
- html文件导入到u盘中,技术分享 - 编程实现U盘插入自动复制U盘内容到本地
- 【协议】MQTT、CoAP、HTTP比较,MQTT协议优缺点
- win10控制面板快捷键_你没玩过的全新版本 Win10这些操作你知多少
- 英特尔的指令集体系结构_新指令集将上线:Intel 新版指令集手册确认 Alder Lake 架构的存在...
- Win11终于兼容安卓App!微软推送安卓子系统
- 04_nand基本操作
- hp服务器pe系统安装win7系统安装系统安装失败,使用硬盘安装系统出现pGptRestore部署失败怎么解决?...