通用卡证信息高精度识别流程 OCR 文本检测 文本识别 身份证 银行卡

2023-05-16

目录

  • 如何将一张身份证图像的信息识别出来?
    • 身份证识别点我
    • 银行卡识别点我
    • 第一步 目标检测
    • 第二步 图像校正
      • 如何获取匹配点对坐标
      • 求解透视变换矩阵
    • 第三步 文本检测
      • CTPN
    • 第四步 文本识别
      • CRNN
    • 最后 信息抽取
  • 总结

如何将一张身份证图像的信息识别出来?

身份证识别点我

银行卡识别点我

目前,人社、金融、工商、公安等政府办事部门使用身份证OCR技术,可以快速识别用户身份信息,缓解政府部门办事压力,减少业务办理的等待时间,是智能识别产业在政务领域的一大突破。

百度、优图等互联网大厂纷纷建立智能识别开放平台。

那么我们不仅要问一张身份证图像信息是如何被精确的结构化识别和传递的呢?

本文将借助项目经验,以身份证信息识别为示例,着重将这一识别流程和框架总结介绍。

第一步 目标检测

毫无疑问我们第一步需要检测和定位我们感兴趣的区域,这是高精度识别的基础。

也就是说我们首先要找到身份证在图像上是否存在,如果存在那么它大概在什么图像坐标位置。

这一步可采用主流目标检测算法有YOLOv3,SSD,Faster RCNN等。

第二步 图像校正

实际应用场景中图像可能是多角度放置的。

需要通过透视变换将变形的目标校正到良好的俯瞰平面。向下面图示一样。。

如何获取匹配点对坐标

由透视变换原理,求解透视变换矩阵至少需要4点对映射。

也就是说我们需要获得至少包括身份证卡片的四个顶点,将其投影到一个标准的卡片尺寸大小。

我们可以根据行业标准获取卡片长宽比为1.6:1,可设置目标顶点坐标(0,0)(1024,0)(1024,640)(0,640)

那么问题来了,图像中身份证顶点坐标如何获取?

经验告诉我们身份证卡边都是直线,透视变换后基本也是直线,通过直线检测获取四条直线相交即可获得四个顶点坐标。直线检测可采用Hough Transform, LSD等。但这些方法鲁棒性较差,直线检测容易受背景干扰。

基于深度学习的关键点检测算法登场!!!

Cascaded Pyramid Network 来自face++2017年coco keypoint benchmark 数据集冠军的文章。主要提出了基于CPN(Cascaded PyramidNetwork)结构的人体关键点检测框架。

采用CPN方法获取关键点还有一大优点相较于传统方法,那就是关键点是有序的,再也不用面对180翻转怎么办的鸡肋问题了。。。

当然也有其他关键点检测算法例如 Mask RCNN。。。

求解透视变换矩阵

不满足四点对?基于四顶点扩增标签点数量。使用最佳子集来产生单应矩阵估计内点和异常值,提升校正效果的鲁棒性。

OpenCV cv2.findHomography()算法使用了RANSAC或者LEAST_MEDIAN(由标志决定)。最优化估计的好的匹配被叫做inliers,而其他的叫做outliers。返回一个掩图 mask 来指定inlier和outlier。如下:

M, mask = cv2.findHomography(pts0, pts1, cv2.LMEDS)
dst = cv2.warpPerspective(img, M, (WIDTH, HEIGHT))

第三步 文本检测

处理到目前为止我们得到了什么?一张张校正过的身份证图像。。。

接下来我们进行文本检测

文本检测不是一件简单的任务,尤其是复杂场景下的文本检测,非常具有挑战性。自然场景下传统行投影,梯度分割等算法局限性凸显。

例如,MSER(Robust wide-baseline stereo from maximally stable extremal regions) 最大稳定极值区域对文字形状变化的适应性和抗干扰性比较差。

文本检测本质上也是一种目标检测,可通对Faster-RCNN这类通用目标检测网络进行改进,设计出适合文本检测全新架构。

CTPN

采用基于faster rcnn等通用物体检测框架的算法都会面临一个问题?怎么生成好的text proposal?这个问题实际上是比较难解决的。因此在这篇文章中作者提供了另外一个思路,检测一个一个小的,固定宽度的文本段,然后再后处理部分再将这些小的文本段连接起来,得到文本行。

之所以选用CTPN这个文本检测框架是有原因的:

  • 将文本检测任务转化为一连串小尺度文本框的检测;
  • 引入RNN提升文本检测效果; 利用特征前后文信息提升鲁棒性;
  • Side-refinement(边界优化)提升文本框边界预测精准度。

这里一些同学该反驳了,CTPN有个大缺点!对于非水平的文本的检测效果并不好!!

这个嘛 前面我们预处理对身份证图片进行了校正,文本位于水平方向的,完全可以与CTPN无缝衔接,充分发挥CTPN良好的工业化适用能力。

推荐一篇文本检测算法综述

再来一篇。。。

文本检测效果如下

第四步 文本识别

得到多个文本行图像后,就要进行字符识别
传统的方法比如投影分割出单字后进行通过模板匹配,浅层神经网路分类识别几乎已经没有市场。
现今基于深度学习的端到端OCR技术正大行其道。

主要有两大技术方向CRNN OCR和attention OCR。其实这两大方法主要区别在于最后的输出层(翻译层),即怎么将网络学习到的序列特征信息转化为最终的识别结果。这两大主流技术在其特征学习阶段都采用了CNN+RNN的网络结构,CRNN OCR在对齐时采取的方式是CTC算法,而attention OCR采取的方式则是attention机制, 本文将介绍应用更为广泛的CRNN算法。

CRNN

CRNN 网络结构由CNN + LSTM 两部分构成,LSTM的加持使它能够结合前后文信息,同时适用变长文本行的识别。

在这里插入图片描述

CRNN 具有以下优势

  • (1)可以端到端训练;
  • (2)可以识别任意长度的序列;
  • (3)可以训练基于字典的模型和不基于词典的任意模型;
  • (4)训练速度快,并且模型很小。

CRNN训练用样本如何获取?有限的身份证数据集仅包含部分字符样本,或者字符概率分布极不平衡。

因此需要机器生成训练用样本,通过透视变换,模糊,抖动,背景融合等增强样本数据。如下 Fake News。。。

最后 信息抽取

得到杂乱的文本识别结果后,就需要抽取关键身份证信息关键字段了,姓名,性别,住址,号码。。。等

八仙过海各显神通了,对于身份证信息来说格式相对固定,可通过关键字匹配,结合位置信息来编写抽取规则。

这部分重要吗?非常重要!!!结构化的输出识别信息才是客户的最终需求,它对精度影响是直接的。

一些有用的规则不能忽略,比如身份证号码符合国标校验的,,,

总结

以上是笔者在对身份证信息高精度识别流程的实践总结,可推广应用至银行卡,驾驶证,户口本等其他类似卡证智能识别场景。

当然有同学会觉得流程过于复杂,比如目标检测可以直接跳过,图像校正也可以跳过,直接进行文本检测。

本文提供的通用卡证信息识别流程框架,是充分考虑使用场景,保证识别精度,提升识别效率,建立在实践基础上的。。。

欢迎同学们访问如下链接,测试评估交流!!

Email:1161242024@qq.com

身份证信息识别服务

银行卡信息识别服务

通用卡证信息高精度识别流程
智能图像识别产品开发流程
如何设计一个开放平台

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通用卡证信息高精度识别流程 OCR 文本检测 文本识别 身份证 银行卡 的相关文章

  • Tesseract OCR:解析表格单元格

    我正在使用 cmd 中的 Tesseract OCR v4 0 0 alpha 从如下所示的表格的 png 中提取文本 我希望 Tesseract OCR 能够解析一个单元格中的内容 然后再转到下一个单元格 我不想继续 行 中的下一个单词
  • 如何减小tesseract生成的PDF的大小?

    我的 网络 应用程序的设置如下 我获取用户上传的 PDF 文件 对它们运行 OCR 并向他们显示 OCRed PDF 由于一切都在线 因此最小化生成的 PDF 文件的大小是减少用户加载和等待时间的关键 我从用户那里收到的文件是sample
  • 字符识别(OCR算法)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发一个项目 其中我必须开发 OCR 算法 我必须从图像中读取文本 然后将其转换为不同的语言 所以我的第一个任务是从图像中获取文
  • OCR 解决方案可以检测数字手写体吗?

    有没有一种解决方案可以很好地书写数字 1 10 我尝试了超正方体 但我只得到垃圾 理想情况下是 OSS 但商业也可以 OpenCV 现在附带手写数字识别 OCR 示例 你可以参考一下 http code opencv org project
  • 使用Python从具有两列或三列数据的图像中使用OCR读取图像中的文本

    在示例图像中 仅作为参考 我的图像将具有相同的图案 一个页面具有完整的水平文本 其他页面具有两个水平文本列 如何在python中自动检测文档的模式并逐一读取另一列数据 我将 Tesseract OCR 与 Psm 6 一起使用 它是水平读取
  • Microsoft Azure 认知服务手写检测边界框参数

    我目前正在使用Microsoft Azure 认知服务手写检测 API https learn microsoft com en in azure cognitive services computer vision quickstarts
  • 如何使用 PHP 在网站上实现 OCR? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 OCR 识别上标字符

    我已经开始了一个简单的项目 其中它必须获取包含带有上标的文本的图像 然后通过使用 OCR 目前我使用的是 tesseract 它必须识别上标字符 普通字符 例如 我们有一个化学方程式 例如 Cl 但是当我使用超立方体识别它时 它给出了 Cl
  • tesseract 无法识别该图像中的这个单词,这正常吗?

    我需要从这样的小图像中提取单词 我在命令行中使用带有西班牙语选项的 tesseract 如下所示 tesseract category png l spa psm 7 category txt 我认为该文本一定很容易被 OCR 解析 但该单
  • Tesseract 对阿拉伯语单词/字母不返回任何内容

    我已经安装了 Pytesseract 它可以完美地处理法语 英语文本以及数字 但是当我尝试阅读任何阿拉伯文本 字母时 它不会返回任何内容 这是我使用过的代码 try from PIL import Image except ImportEr
  • Android Studio 上的 Android Tesseract OCR [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 一段时间以来 我一直在尝试将 tesseract 包含在 Android Studio 上的 Andro
  • unicharset_extractor:找不到命令

    我想使用超正方体创建新的列车数据 因此 请按照以下网站中提到的步骤进行操作 https blog cedric ws how to train tesseract 301 https blog cedric ws how to train
  • 使用 OpenCV 对 Tesseract OCR 进行图像预处理

    我正在尝试开发一个应用程序 它使用 Tesseract 来识别手机摄像头拍摄的文档中的文本 我使用 OpenCV 来预处理图像以实现更好的识别 应用高斯模糊和阈值方法进行二值化 但结果非常糟糕 Here https s6 postimg c
  • tess4j 与 Spring mvc

    我已经尝试将 tess4j 作为独立的 java 程序 并且它可以正常工作并给出文本输出 现在我正在尝试创建一个 spring mvc web 项目 在 pom 中添加 tess4j 的依赖项 并且我已在我的项目中添加了 tess4j 源
  • OCR 解析获取复选框或单选按钮值

    I need to parse OCR image file and get all texts and checkbox values How to get Checkbox or Radio Button value from OCR
  • tesseract (v3.03) 输出为 PDF [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 为什么会返回这个错误呢 root amd 3700 2gb ocr test tesseract l dan pdf png out pd
  • TensorFlow:训练时参数不更新

    我正在使用 TensorFlow 实现分类模型 我面临的问题是 当我运行训练步骤时 我的权重和误差没有更新 结果 我的网络不断返回相同的结果 我根据以下内容开发了我的模型MNIST 示例 https www tensorflow org v
  • 收据褪色部分可以恢复吗?

    我有一些包含一些扫描收据的文件 我需要使用 OCR 从中提取文本 由于收据上打印的文字在一段时间后会褪色 导致收据上的某些文字不清晰 影响OCR结果 褪色单词的一些示例 有什么方法可以恢复褪色的部分 以便提高 OCR 结果吗 我在OpenC
  • Tess4j - Pdf 到 Tiff 到 tesseract - “警告:分辨率 0 dpi 无效。使用 70 代替。”

    我正在使用 tess4j net sourceforge tess4j tess4j 4 4 0 并尝试对 pdf 文件进行 OCR 因此 据我了解 我必须首先将 pdf 转换为 tiff 或 png 其中有任何建议吗 我这样做是这样的 t
  • 如何去除给定图像中的噪声,使 ocr 输出完美?

    我已经对这个孟加拉文本图像进行了大津阈值处理 并使用 tesseract 进行 OCR 但输出非常糟糕 我应该应用什么预处理来消除噪音 我也想校正图像 因为它有轻微的倾斜 我的代码如下 import tesserocr from PIL i

随机推荐

  • FPV穿越机一启动就加速翻滚(死亡翻滚)解决办法

    最近不是开始入坑穿越机吗 xff0c 买了一个moblite7玩玩 xff0c 碰到了这个问题 大家在购买其他穿越机 xff0c 或者自组穿越机 xff0c 还有重置了穿越机的设置好 也很有可能碰到问题 xff0c 我把自己搜索并解决这个问
  • Python读取Microsoft Access Database

    公司有一个小零件进出库管理系统 xff0c 数据库是使用Microsoft Access Database xff0c 因长期存储会有生锈问题 xff0c 导致零件报废 因此基于原数据的进库出库在库数据 xff0c 做一个python脚本
  • Android13 新特性和开发适配须知

    前言 目前 Google 已经发布了 Android 13 的正式版 xff0c 虽然国内的手机能用上 Android 13 还有一段时间 xff0c 不过开发者们可以通过模拟器来体验 xff0c 那么我们来看看 Android 13 都有
  • ./configure 的配置和用法

    Linux环境下的软件安装 xff0c 并不是一件容易的事情 xff1b 如果通过源代码编译后在安装 xff0c 当然事情就更为复杂一些 xff1b 现在安装各种软件的教程都非常普遍 xff1b 但万变不离其中 xff0c 对基础知识的扎实
  • JDK1.8(jdk8.0)新特性

    Java is still not dead and people are starting to figure that out 本教程将用带注释的简单代码来描述新特性 xff0c 你将看不到大片吓人的文字 一 接口的默认方法 Java
  • MQTT协议通俗讲解

    参考 Reference 协议文档 Offical Docs v3 1 1 英文原版 中文翻译版 其他资源 网站 MQTT官方主页 Eclipse Paho 项目主页 测试工具 MQTT Spy xff08 基于JDK xff09 Chro
  • mqtt实现库对比

    发现一片非常好的文章 xff0c 从17个方面 xff0c 介绍几个分布式消息队列系统 xff0c 非常棒的内容 xff0c 方便做技术选型 xff0c 平衡各种 xff1a 17 个方面 xff0c 综合对比 Kafka RabbitMQ
  • 几种直播流媒体协议

    题外话 xff1a HTTP渐进下载流媒体播放 基于TCP yy 乐视 爱奇艺 优酷土豆 搜狐视频 花椒直播 xff0c 主要还是通过rtmp amp hls来实现的 xff0c 但他们也意识到rtmp的天生缺陷 xff0c 所以不管是技术
  • Android9.0(androidP)系统API和行为变化

    这篇文章 xff0c 是Android官方文档的中文版本 注意事项 xff08 AndroidP 特性 xff09 xff1a 1 android os Build VERSION RELEASE xff0c 需要当做字符串类型处理 2 依
  • Android version名称,版本号,API level,代号 表(updateing)

    系统版本OS Version 版本号API level 发布日期release Date 发布代号nick Name 主要特性feature android1 0 API1 2008 10 android1 1 API2 2009 2 an
  • Android10.0(Q)新特性和行为变更

    Android Q 还为开发者们带去了许多新功能 xff0c 如折叠屏增强项 新网络连接 API 全新的媒体解码器 摄像头新功能 NNAPI 扩展 Vulkan 1 1 图形支持等等 2019 4 Beta2版本发布 点击查看Google官
  • JNI 使用案例详解(一)

    很久没有写博客了 xff0c 今天来写一下关于在android开发过程中使用JNI的详细案例及操作步骤 首先 xff0c JNI xff0c 我的理解 xff0c 他就是java和C之间的桥梁 xff0c 很多写C 43 43 和JAVA的
  • Echarts添加鼠标点击事件

    1 通常我们只使用了以下代码 xff0c 通过配置项和数据显示图表 var myChart 61 echarts init document getElementById 39 tree chart 39 myChart setOption
  • linux下进程的进程最大数、最大线程数、进程打开的文件数和ulimit命令修改硬件资源限制

    ulimit命令查看和更改系统限制 ulimit命令详解 ulimit用于shell启动进程所占用的资源 xff0c 可以用来设置系统的限制 语法格式 ulimit acdfHlmnpsStvw size 在 etc security li
  • c++ http服务器客户端程序-传输json解析json数据(2)

    1 服务器端的实例 xff1a include 34 stdafx h 34 include lt iostream gt include lt chrono gt include lt cstdio gt include 34 httpl
  • 读华为C语言编程规范(标识符、变量)

    标识符 xff1a 命名规则 xff1a unix like风格 xff0c 单词小写 xff0c 用 分割 xff0c text mutex windows风格 xff0c 大小写混用 xff0c 单词连一起 xff0c 每个单词首字母大
  • curl 命令行下载工具使用方法小结

    CURL是一个利用URL语法在命令行下工作的文件传输工具 它支持文件的上传和下载 xff0c 所以是综合传输工具 xff0c 但按传统 xff0c 习惯称CURL为下载工具 获取curl curl 命令行下载工具 curl的官方网站为 xf
  • ROS: requires the 'world_name' arg to be set The traceback for the exception was written to the log

    catkin ws src seven dof arm gazebo launch grasp world launch requires the 39 world name 39 arg to be set The traceback f
  • Myeclipse中同时改变一个类中相同的代码的方法

    如果在同一个类中 xff0c 想要把某个属性名全部都改成另外一个 xff0c 或者把同一个类中相同的代码段都改成另外一段 xff0c 可以这样做 xff1a 一 左键双击要改的属性名或者代码段 gt 右键点击 xff0c 选择Refacto
  • 通用卡证信息高精度识别流程 OCR 文本检测 文本识别 身份证 银行卡

    目录 如何将一张身份证图像的信息识别出来 xff1f 身份证识别点我银行卡识别点我第一步 目标检测第二步 图像校正如何获取匹配点对坐标求解透视变换矩阵 第三步 文本检测CTPN 第四步 文本识别CRNN 最后 信息抽取 总结 如何将一张身份