阅读 131

OCR技术与深度学习的关系与应用

  • 传统技术OCR,特指应用领域,比如:识别身份证,银行卡,驾照,车牌等。

  • 应用深度学习的OCR技术,可以使用在泛领域的文字、文档识别等。

一、简单介绍

OCR的英文全称是Optical Character Recognition,中文叫做光学字符识别;它是一种存在已久的计算机视觉任务,在某些特定领域它表现的非常好,根本不需要如今火热的深度学习的技术。

在2012年如日中天的深度学习之前,OCR有许多不同的实现,这可以追溯到1914年。可能会有人说,OCR技术的挑战已经都被解决了?答案是:NO!使用深度学习的神经网络来训练OCR的任务会更精准,应用领域更多。

通常来说,任何实践过计算机视觉或者机器学习的人都知道,不存在已经解决的任务,这种情况也不例外。相反,在一些特定的领域,OCR会产生一个很好的结果,所以某一些OCR的任务,还是非常具有挑战性的,所以使用深度学习来训练OCR的识别任务还是非常有挑战性的。

看完本篇文章你会知道:

1.你的车在北京,为什么收到来自上海的超速罚款?

2.为什么一些app上扫描银行卡号时,个别字母识别不出来?

3.深度学习比传统的OCR技术要好吗?

4.深度学习的识别文字原理和框架是什么?

5.如何直接使用OCR文本识别功能?我会尽量说的小白一点,方便不同专业的同学都能看懂^_^

二、OCR的种类

OCR的应用有多种领域,之前也提过。简单的说,就是在图片上提取文字,图片上的文字排版越标准,识别的就越精准,比如印刷的书的某一页,或者标准的打印文档;当然也能识别涂鸦,也就是在极不规范的原素材上识别。我们日常中常见的OCR应用领域有车辆牌照、自动识别验证码、街景标志等等。

每种OCR任务都有自己不同的难度,俗话说“in the wild”是最难的。

image.png

列举几个常用的OCR任务的属性:

  1. 文本密度: 印刷体、书写体的文字密度都很高;但是在一张街景的图片上,文字确实很稀疏的

  2. 文本的结构: 页面上的文本是结构化的,大多数情况下是按严格的行排列的,而野外的文本则可能以不同的旋转方式散布在各处。

  3. 字体: 打印字体比较容易,因为它们比嘈杂的手写字符更结构化。

  4. 字符类型: 文本可能以不同的语言出现,而彼此之间可能会有很大不同。此外,文字的结构可能与数字不同,例如门牌号码等。

  5. 伪影: 显然,室外图像比舒适的扫描仪要嘈杂得多。

  6. 位置: 某些任务包括裁剪/居中的文本,而在其他任务中,文本可能位于图像中的随机位置。

三、SVHN数据集

SVHN(街景房号数据集)是一个很好的起点。顾名思义,这是从Google街景视图中提取的房屋编号数据集。任务难度中等。数字有各种形状和书写样式,但是每个门牌号都位于图像的中间,因此不需要检测。图像的分辨率不是很高,它们的排列可能有些奇怪。

SVHN数据集 :

 ufldl.stanford.edu/housenumber…

image.png

四、车辆牌照

另一个共同的挑战是车牌识别,这在实践中不是很困难也没有用。与大多数OCR任务一样,此任务需要先检测车牌,然后识别其字符。由于车牌的形状相对恒定,因此某些方法在实际识别数字之前使用简单的整形方法。以下是网上的一些示例:

image.png

OpenALPR是一种非常强大的工具,无需进行深度学习即可识别来自不同国家的车牌。

此仓库提供了CRNN模型的实现(将进一步讨论),以识别韩国车牌。

一家数据公用事业公司Supervise.ly写了关于使用其工具生成的人工数据来训练车牌识别器的信息(还将进一步讨论人工数据)

OpenAIPR地址:

github.com/openalpr/op…

CRNN-Keras地址:

github.com/qjadud1994/…

五、CAPTCHA

由于互联网上到处都是机器人,视觉任务(特别是文本阅读,又称为验证码)是一种不同于真实人类的常见做法。这些文本中有许多是随机的和失真的,这将使计算机更难阅读。我不确定开发CAPTCHA的人能否预测计算机视觉的进步,但是当今大多数文本CAPTCHA都很难解决,尤其是如果我们不尝试一次解决所有问题。

image.png

Adam Geitgey提供了一个很好的教程,可以通过深度学习解决一些验证码,包括再次合成人工数据。

Tutorial :medium.com/@ageitgey/h…

六、PDF OCR

OCR最常见的情况是印刷体/pdf OCR。打印文档的结构化性质使解析它们变得更加容易。大多数OCR工具(例如Tesseract)主要用于解决此任务并取得良好的效果。因此,在这篇文章中,我不会对这个任务进行过多的阐述。

Tesseract是开源的且非常有名的OCR识别库,也是所有开源领域最好的一个OCR开源库:

github.com/tesseract-o…

七、在自然环境下的OCR

这是最具挑战性的OCR任务,因为它将所有常规的计算机视觉挑战(例如噪音,照明和伪影)引入了OCR中。此任务的一些相关数据集是coco文本,而SVT数据集再次使用街景图像从中提取文本。

image.png

八、Synth Text

SynthText不是数据集,甚至不是任务,但提高训练效率的一个好主意是人工数据生成。由于文本的平坦性,在图像上扔随机字符或单词看起来比任何其他对象都自然得多。

前面我们已经看到了一些数据生成,例如CAPTCHA和车牌之类的更轻松的任务。在野外生成文本要复杂一些。任务包括考虑图像的深度信息。幸运的是,SynthText是一项不错的工作,它可以接收带有上述注释的图像,并且可以智能地撒入单词(来自新闻组数据集)。

image.png

SynthText流程插图:右上方是图像的分割,右下方是深度数据。左下是图像的表面分析,根据文本散布在图像上。

为了使“散布”的文本看起来逼真实用,SynthText库为每个图像提供了两个蒙版,一个是深度蒙版,另一个是分段。如果您想使用自己的图像,也应该添加此数据。

建议检查仓库并自行生成一些图像。您应该注意,仓库使用了一些过时的opencv和maptlotlib版本,因此可能需要进行一些修改。

image.png

九、MNIST

尽管这并不是真正的OCR任务,但无法撰写有关OCR的文章,也不包括Mnist示例。 最著名的计算机视觉挑战并不是一项考虑周全的OCR任务,因为它一次只包含一个字符(数字),只有10个数字。但是,它可能暗示为什么OCR被认为是容易的。此外,在某些方法中,每个字母都将被单独检测,然后类似于Mnist(分类)模型

image.png

策略 Strategies

正如我们已经看到和暗示的那样,文本识别主要是一个两步任务。首先,您想检测图像中文本的外观,可能是密集的(如在打印文档中)还是稀疏的(如自然环境下的文本)。

检测到行/字级别后,我们可以从大量解决方案中再次选择,这些解决方案通常来自以下三种主要方法:

  • 经典的计算机视觉技术。

  • 专门的深度学习。

  • 标准深度学习方法(检测)。

让我们检查一下每个方法:

1.经典的计算机视觉技术

如前所述,计算机视觉在很长一段时间内解决了各种文本识别问题。您可以在线找到许多示例:


作者:一点资讯技术团队
链接:https://juejin.cn/post/7018813430719053838

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐