资源经验分享OCR简单入门

OCR简单入门

2019-12-19 | |  127 |   0

原标题:综述:OCR简单入门

原文来自:51CTO      原文链接:https://blog.csdn.net/MrCharles/article/details/103590189


简介

OCR或光学字符识别是最早解决的计算机视觉任务之一,因为在某些方面它不需要深度学习。因此,即使在2012年深度学习热潮之前,就有不同的OCR实现方式,有些甚至可以追溯到1914年。

这使许多人认为OCR挑战已“解决 ”,不再是挑战。另一种类似信念是,OCR不需要深度学习,换句话说,将深度学习用于OCR实在是太大材小用了。

任何从事计算机视觉或一般机器学习的人都知道,没有什么挑战现在可以确定是已经解决的。相反,OCR仅在非常特定的用例上才能产生非常好的结果,但总的来说,它仍然被认为具有挑战性。

此外,对于某些不需要深度学习的OCR任务,确实有很好的解决方案。但是,要真正迈向更好,更通用的解决方案,深度学习将是必不可少的。

这篇OCR综述文章讲了什么

在这篇文章中,我将探讨用于解决不同OCR任务的一些策略,方法和逻辑,并将分享一些有用的方法。我将不遗余力地引用文章,数据集,存储库和其他相关博客文章。

OCR的种类

OCR有多个含义。从最一般的意义上讲,它是指从每张可能的图像中提取文本,无论是从书本中打印标准的页面,还是在其中带有涂鸦的随机图像(“ 在野外 ”)。在这两者之间,您可能会发现许多其他任务,例如阅读车牌,验证码,路牌等。
尽管每种选择都有其自身的困难,但显然“野外”任务最为困难。
01.png
左:打印的文本。右:野外文字

我们可以得出OCR任务的一些属性:

  • 文字密度:在打印/书写的页面上,文字密集。但是,给定具有单个路牌的街道图像,则文本稀疏。

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

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

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

  • Artifacts:显然,室外图像比舒适的扫描仪要嘈杂得多。

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

数据集/任务

SVHN

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

车牌

另一个共同的挑战是车牌识别,这在实践中不是很困难。与大多数OCR任务一样,此任务需要先检测车牌,然后识别其字符。由于车牌的形状相对恒定,因此某些方法使用简单的reshaping方法处理图像,再识别数字。以下是网上的一些示例:
04.png
OpenALPR示例。

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

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

验证码

由于互联网上到处都是机器人,区分他们和真实的人类的一种常见做法是视觉任务,特别是文本阅读(又名CAPTCHA)。这些文本中有许多是随机的和distorted的,这将使计算机更难阅读。我不确定开发CAPTCHA的人能否预测计算机视觉的进步,但是当今大多数文本CAPTCHA都不是很难使用机器阅读。

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

PDF OCR

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

野外OCR in the wild

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

合成文字SynthText

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

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

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

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

Mnist

尽管这并不是真正的OCR任务,但是却很类似。Mnist不被看作OCR任务,因为它一次只包含一个字符(数字),而只有10个数字。
06.png

策略

正如我们已经看到和暗示的那样,文本识别主要是一个两步任务。首先,您想检测图像中文本的外观,可能是密集的(如在打印文档中)还是稀疏的(如野外的文本)。
检测到行/字级别后,我们可以从大量解决方案中再次选择,这些解决方案通常来自以下三种主要方法:

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

  • 专门的深度学习。

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

让我们仔细看一下每一种技术:

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

如前所述,计算机视觉已长期解决了各种文本识别问题。您可以找到许多示例:
Great Adrian Rosebrook有很多教程,访问这里,这里
Stack overflow也有一些,像这一个
经典CV方法通常:

  1. 应用filters 以使字符从背景中分离。

  2. 应用轮廓检测以一一识别字符。

  3. 应用图像分类以识别字符

显然,如果第二部分做得很好,那么第三部分就很容易通过模式匹配或机器学习(例如Mnist)进行。
然而,轮廓检测对于一般化而言是非常具有挑战性的。它需要大量的手动微调,因此在大多数问题中变得不可行。

2.专门的深度学习方法

大多数成功的深度学习方法在通用性方面都非常出色。但是,专用网络可能非常有用。

EAST

EAST(高效准确的场景文本检测器)是一种简单而功能强大的文本检测方法。使用专门的网络。
与我们将要讨论的其他方法不同,它仅限于文本检测(不是实际的识别),但是它的健壮性值得一提。
另一个优点是,它也已添加到open-CV库(从版本4开始)中,因此您可以轻松使用它(请参见此处的教程)。
该网络实际上是众所周知的U-Net的一个版本,可用于检测大小可能不同的功能。底层的前馈“干”(为杜撰的文章,见下图),这一网络可能很-  PVANet在纸张使用,但OpenCV的实现使用RESNET。显然,它也可以进行预训练(例如使用imagenet)。与U-Net一样,功能是从网络的不同级别提取的。
07.png
最终,网络允许两种类型的输出旋转边界框:具有旋转角度(2X2 + 1参数)的标准边界框或“四边形”(quadrangle),四边形仅仅是具有所有顶点坐标的旋转边界框。
08.png
如果真实生活的结果如上图所示,则识别文本不会花费很多精力。但是,现实生活中的结果并不完美。

CRNN

Convolutional-recurrent neural network是2015年的一篇文章,其中提出了一种混合(或三杂项)端到端架构,旨在通过三步方法捕获单词。
想法如下:第一层是标准的全卷积网络。网络的最后一层被定义为要素层,并分为“要素列”。在下图中看到,每个这样的功能列如何表示文本中的特定部分。
09.png
之后,将特征列输入到深度双向LSTM中,该LSTM输出序列,并用于查找字符之间的关系。
10.png
最后,第三部分是转录层。它的目标是采用混乱的字符序列,其中一些字符是多余的,而另一些是空白的,并使用概率方法来统一和理解它。
此方法称为CTC损失,可以在此处阅读。该层可以与/不与预定义词典一起使用,这可以促进单词的预测。
使用固定文本词典,本文达到了较高的准确率(> 95%),而没有此词典,则成功率会有所不同。

STN-net / SEE

SEE  —半监督端到端场景文本识别,是Christian Bartzi的作品。他和他的同事采用了一种真正的端到端策略来检测和识别文本。他们使用非常弱的监督(它们被称为半监督,其含义不同于通常的含义)。因为他们只使用文本注释(没有边界框)来训练网络。这使他们可以使用更多数据,但是使他们的训练过程颇具挑战性,并且他们讨论了使之起作用的不同技巧,例如,不训练多于两行文本的图像(至少在训练的第一阶段)。
本文有一个较早的版本,称为STN OCR。在最后的论文中,研究人员完善了他们的方法和演示文稿,此外,由于结果的高质量,他们更加强调其方法的通用性。

11.png
名称STN-OCR暗示使用空间转换器的策略(= STN,与最近的Google转换器无关)。
他们训练两个串联的网络, 其中第一个网络(即变压器)学习图像的变换,以输出更易于解释的子图像。
然后,另一个顶部具有LSTM的前馈网络(嗯……似乎我们之前已经看过)来识别文本。
这里的研究强调了使用resnet的重要性(它们使用了两次),因为它提供了向早期层的“强大”传播。但是,如今这种做法已经很普遍了。
无论哪种方式,这都是一种有趣的尝试方法。

3.标准的深度学习方法

正如标题所暗示的,在检测到“单词”之后,我们可以应用标准的深度学习检测方法,例如SSD,YOLO和Mask RCNN。我不会在这些方法上做过多的阐述,因为在线上有大量的信息。
我必须说这是当前我最喜欢的方法,因为我在深度学习中喜欢的是“端到端”哲学,您可以在其中应用一个强大的模型,通过一些调整可以解决几乎所有问题。在本文的下一部分中,我们将了解其实际工作原理。
但是,SSD和其他检测模型在涉及密集的相似类时面临挑战,如本文所述。我觉得这有点讽刺,因为事实上,深度学习模型发现识别数字和字母要比识别更具挑战性和复杂性的对象(例如狗,猫或人)困难得多。 它们往往无法达到所需的精度,因此,专门的方法蓬勃发展。

总结

在本文中,我们讨论了OCR领域中的不同挑战和方法。深度学习/计算机视觉中有许多问题,它比起初看起来具有更多的意义。我们已经看到了它的许多子任务,以及解决它的一些不同方法,但它们目前都不是灵丹妙药。从另一方面来说,我们已经看到要取得初步结果并不是很困难,没有太多麻烦。


免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:2019中国智能语音的发展历程、现状及前景分析

下一篇:想做数据化转型,为什么必须要上企业级BI?

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...