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

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

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

01_origin_img

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

02_mask

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

04_left_mask

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

03_mask_text_lines

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

06_origin_img_chars

然后我们可以定义

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

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

07_origin_img_key_to_segments

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

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

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

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

《Lesson 6.1 身份证识别: 提取字段》有6个想法

  1. 大神你好,我们公司需要图文识别银行卡号的功能集成在项目中使用,有什么好的建议和给出个意见呗,谢谢🙏.如果可以的话请发到我的邮箱。跪谢!
    emailForHan@163.com

    1. 你可以把虫数据的代码看几篇自然就知道该程序是怎么处理的。
      银行卡号识别我觉得没啥难度,有难度的是自然图片的文字定位。楼主的程序行分割都是水平求和,如果自然图片中后面也出现文字的话,而这些文字的位置如果能把前面几行文字连续在一起的话,那么这几行都会被算成一个行。这样的话文字定位会不准确。二值化,边缘检测,连通域分析效果不是很好,我也试过用核函数聚类进行灰色阶统计,效果会好一些。但是这些都不是解决问题的关键,因为传统的算法都存在一个阈值的问题,而在自然图片前面人工是设定阈值都是有问题的,文字定位也应该用深度学习来判断就好。行业做得好的百度OCR的API接口和Image++的接口我也调式过,效果很好。百度OCR貌似用Boosting CRF,CNN等来进行文字检测和行生成,但是苦于找不到任何资料。而我们用深度学习在OCR这块仅仅是用在训练汉字的识别上,当然挺耗资源的,因为需要多一些的字体,我训练20多种字体,跑训练就跑掉了70G的内存。深度学习真是好东西,但水很深,不是我一个卖红酒的爱好python的学渣能摸透的。以上是我的个人观点,仅供参考。

      1. “百度OCR貌似用Boosting CRF,CNN”,这些我都认真看过,但是都需要一开始proposal regions,就是一个分割算法,然后单个字符识别,还不是很适合ocr,因为candidates太多了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注