Lesson 6.1 身份证识别: 提取字段

小编最近试试识别身份证上面的文字。

第一步还是图像分割,第一步还是提取文本行,然后提取字段。

看上去,第一个感觉就是所有文字都是黑色的。可以简单过滤一下图片的RGB通道,剩下黑色部分,如下是结果:

1
2

boundary = ([0, 0, 0], [100, 100, 100])
preprocess_bg_mask = PreprocessBackgroundMask(boundary)

基本上所有背景都被去掉了,但是还有头像会阻碍检测文本行,所以把头像部分也去掉了。

1
2

left_half_id_card_img_mask=np.copy(id_card_img_mask)
left_half_id_card_img_mask[:,norm_width/2:]=0

这样往左投影求和就可以找到文本行。然后在图片上,画上文本行即可。

然后每一行进行垂直投影,就可以找到所有字段的位置,当然还有一些噪音。

1
2
3
4
5
6
7
8
9
10
11
12

        ## char extraction
        for line_range in line_ranges:
            start_y, end_y = line_range
            end_y += 1
            line_img = id_card_img_mask[start_y: end_y]
            vertical_sum = np.sum(line_img, axis=0)
            vertical_peek_ranges = extract_peek_ranges_from_array(
                vertical_sum,
                minimun_val=40,
                minimun_range=1)
            vertical_peek_ranges2d.append(vertical_peek_ranges)
        vertical_peek_ranges2d = merge_chars_into_line_segments(vertical_peek_ranges2d)

然后我们可以定义

第一行,第一个字段是名字
第二行,第一个字段是性别
第二行,第二个字段是民族

等等,如此类推。。。下面是以不同的颜色代表不同的字段的调试图片

如何通过Docker安装虫数据的代码可以见 github

运行一下命令可以获取结果:

1
2
3
4

exportCAFFE_MODEL=/opt/deep_ocr/data/trained_models/mnist_model
exportDEEP_OCR_ROOT=/opt/deep_ocr
deep_ocr_id_card_segmentation--img$DEEP_OCR_ROOT/data/id_card_img.jpg\
  --debug_path/workspace/debug

所有身份证的图像分割图片保存在这里 “/workspace/debug”,具体要看用户映射到本机电脑的哪个地方。

下一篇文章将会整合这个分割算法,对身份证上面的字段识别。

编憋了两周,终于憋出了一个简单的身份证识别系统。

基于图像识别,暂时没有加语义上面的纠正。

上一篇文章介绍了如何分割字段,这篇文章主要显示识别结果。

对每个字段的识别方法类似于Lesson 1: 如何做文本行和文字分割分割每个字符。

如何安装请见github项目的首页 通过 Docker 安装

1
2
3
4
5

docker run -ti --volume=${HOME}/deep_ocr_workspace:/workspace jinpengli/deep_ocr_cpu_docker:latest /bin/bash
cd /opt/deep_ocr
git pull origin master
export WORKSPACE=/workspace
deep_ocr_id_card_reco --img $DEEP_OCR_ROOT/data/id_card_img.jpg --debug_path /tmp/debug --cls_sim ${WORKSPACE}/data/chongdata_caffe_cn_sim_digits_64_64 --cls_ua ${WORKSPACE}/data/chongdata_train_ualpha_digits_64_64

识别结果为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

...
ocrres:
============================================================
name
韦小宝
============================================================
address
北京市东城区累山前街4号
紫禁城敬事房
============================================================
month
12
============================================================
minzu
============================================================
year
1654
============================================================
sex
============================================================
id
1X21441114X221243X
============================================================
day
20

暂时不是很稳定,需要加一些语义模型。等等小编吧。。。。

Lesson 6.1 身份证识别: 提取字段相关推荐

  1. JAVA基于百度云文字(车牌、身份证、图片)识别提取

    基于百度云文字(车牌.身份证.图片)识别提取 由于自己想写一个停车场项目,所以去查询了百度API文档,可以实现所有图片中文字的提取,此贴为傻瓜式教程,希望所有像我一样的初学者都可以看懂,有所收获,话不 ...

  2. Java实现身份证识别注册

    博主在开发项目时,需要使用Java完成身份证识别功能,如图所示: 后来,便采取了百度识别接口中的身份证识别技术,即通过该接口,实现识别身份证中的信息.下面是实现步骤: 首先,需要去百度平台开通百度身份 ...

  3. android ocr识别源码_身份证识别OCR解决手动输入繁琐问题

    随着互联网金融的的发展,越来越多的互联网金融公司都推出了自己的金融APP,这些APP都涉及到个人身份证信息的输入认证,如果手动去输入身份证号码和姓名,速度非常慢,且用户体验非常差. 为了提高在手机移动 ...

  4. 身份证识别技术方案介绍

    身份证识别技术方案介绍 身份证识别功能说明 通过合合信息全球领先的 OCR(光学字符识别 Optical Character Recognition)技术,对身份证正反面图片进行识别,返回身份证图片上 ...

  5. Python使用阿里API进行身份证识别

    Python使用阿里API进行身份证识别 1. 作者介绍 2. 身份证识别介绍 3. 调用阿里智能云API 4. 代码解析 4.1导入库 4.2 完整代码 4.3 实验结果 参考 1. 作者介绍 孟莉 ...

  6. 身份证识别和聚合收单

    一,身份认识别(这里的操作是后端进行操作的) 1.需要一个身份证读卡机器,安装相应sdk 身份证识别和聚会收单安装包我放在文章最后,需要自己提取 2,写代码实现该功能: 引入jar包 <depe ...

  7. 移动端身份证识别,APP证件信息采集

    移动端身份证识别app应用背景 移动端身份证识别app的应用,让需要实名制的应用更加方便,快捷,提高用户体验,为人们解决繁琐输入的问题,随着智能终端(智能手机及平板电脑)及移动通信(4G)的发展,人们 ...

  8. 微信小程序+百度AI OCR二代身份证识别

    微信小程序内虽然有OCR识别功能 但是收费是按次计费的,还是选用了百度ai提供的OCR识别二代身份证. // 上传人面像upFileFront:function(e){let type = e.cur ...

  9. 技术指南:手机拍照身份证识别技术

    近几年,各种各样的APP正在取代PC端软件成为用户应用方式的首选,而在APP中,用户信息注册是必不可少的环节,尤其是大型公众平台.第三方支付平台.二手车交易平台等,更是有庞大的用户群体来进行信息输入. ...

最新文章

  1. 执行cmd并获得结果_MySQL 服务无法启动 请键入 NET HELPMSG 3523 以获得更多的帮助...
  2. 模块开发卷宗是什么_详论单片机固件模块化架构设计(精华)
  3. Ubuntu 11.04上搭建Android开发环境
  4. 初识 HTML5(一)
  5. 用python计算两个二维list依据第二维的前一个数据相加
  6. 引用管理器没有程序集_如何使用Zotero插入引用文献
  7. 【BZOJ3160】万径人踪灭 Manacher+FFT
  8. Python 字符串查找子串的方法之 index() 和 find()
  9. MongoDB数据库的迁移
  10. 暴跌3000亿,“酱茅”怎么了?
  11. FTP服务器上传文件操作方法,FTP工具(FLASHFXP)下载使用教程
  12. keil 5 注册机使用及报错解决办法
  13. linux基础命令(一)
  14. 研究生硕士论文开题报告中的进度和安排该怎么写?
  15. JSON在线序列化网站
  16. WindowsCMD配置代理
  17. 12306所有车次及时刻表的爬取中
  18. 第四章 数据定义语言(Data Definition Language,DDL)
  19. Mac air苹果笔记本安装Win10双系统教程(绝对能成功,超详细!)[转]
  20. Error receiving broadcast Intent com.android.vending.billing PURCHASES_UPDATED flg=0x10 has extras

热门文章

  1. 尝试引用已删除的函数_学Excel函数公式,你必须要掌握这些知识
  2. java反射po转vo_三步走使用Dozer (Do,Po,Vo转换工具)
  3. 说说你对 HTML 语义化的理解?
  4. 利用fputc函数写一个putw(w,fp)函数,将整数w写入fp所指文件中; 利用fgetc函数写一函数getw(fp)从所指文件读出一整数
  5. 在关联枚举中使用Codable
  6. 使用Angular CLI从蓝本生成代码
  7. Java vararg(动态参数)的应用
  8. LUA C 交互 cocos
  9. Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
  10. oracle 11g RAC Grid Infrastructure