OCR快速入门(一)| Python版

点击关注我哦

一篇文章带你了解OCR | Python版

简介

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

这让很多人认为OCR的挑战已经“解决”,不再具有挑战性。另一个的观点是OCR不需要深度学习,或者换句话说,使用深度学习来进行OCR是一种过度的尝试。

计算机视觉或者机器学习的研究人员都知道,没有任何任务可以称得上是“解决”的,OCR也不例外。相反,OCR仅在非常特定的用例上才能产生非常好的结果,但总的来说,它仍然被认为具有挑战性。

此外,对于某些不需要深入学习的OCR任务,确实有很好的解决方案。然而,要真正朝着更好、更普遍的解决方案迈进,深入学习将是必不可少的。

为什么要介绍OCR?

这也是从工作的项目开始的,小编被要求解决一个具体的OCR任务。在完成这项任务期间,得出了一些值得分享的结论和见解。另外,在集中精力完成一项任务之后,很难停止并扔掉它,所以小编继续研究,希望能得到一个更好、更广泛的解决方案。

在这里能获得什么?

在本文中,小编将探讨用于解决不同OCR任务的一些策略、方法和逻辑,并将分享一些有用的方法。在最后一部分中,我们将使用代码解决现实生活中的问题。当然文章介绍的不会那么全面,欢迎有兴趣的同学加入一起讨论~

OCR的类型

如前文所述,OCR有不止一个含义。在它最一般的意义上,它指的是从每个可能的图像中提取文本,无论是从一本书的标准印刷页,还是一个随机的涂鸦图像(“户外图像”)。在这两者之间,你可能会发现许多其他的任务,例如车牌识别、禁止机器人验证码、街道标志等。

尽管每一种任务都有自己的困难,但显然户外”任务是最困难的,因为环境复杂导致很多物体的不可控。

从这些例子中可以得出OCR任务的一些属性:

文字密度:在印刷或书写的页面上,文字是密集的。然而,给出一张只有一个街道标志的街道图像,文本是稀疏的;

文本的结构:页面上的文本是结构化的,大多数情况下是按严格的行排列的,而自由状态下的文本可能以不同的旋转方式散布在各处;

字体:印刷字体比较容易,因为它们比手写字体更有结构感;

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

噪声:室外图片明显比扫描仪噪音大得多;

位置:某些任务的文本可能是裁剪好的或者位于图像中央,然而某些任务的文本位置则是随机的,可能在图像的任何位置。

数据集/任务

SVHN

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


车牌

另一个常见的挑战是车牌识别,这在实践中并不十分困难但却十分有用。与大多数OCR任务一样,此任务需要检测车牌,然后识别其字符。由于车牌的形状相对恒定,有些方法在实际识别数字之前先用简单的方法对车牌进行调整。以下是一些来自网络上的示例:

1.OpenALPR是一个鲁棒性很强的工具,不需要深入学习,可以识别来自不同国家的车牌;

2. 此网址(https://github.com/qjadud1994/CRNN-Keras)提供了CRNN模型的实现(将进一步讨论),以识别韩国车牌。

验证码

由于互联网上到处都是机器人,把机器人与真人区分开来的一种常见做法就是视觉任务,特别是文本阅读,又名验证码。这些文本中有许多是随机的和扭曲的,这会使计算机更难阅读。但随着技术的进步,现在大多数文本验证码的识别都不是很难解决的,特别是如果我们不尝试同时解决所有这些问题的话。

AdamGeitgey提供了一个很棒的教程,通过深度学习来解决一些验证码问题,其中包括再次合成人工数据。

PDF OCR

OCR最常见的场景是打印文件和pdf。打印文档的结构化特性使解析它们更加容易。大多数OCR工具(如Tesseract)主要是为了解决这个问题,并取得良好的效果。因此,本篇文章中便不对这项任务做过多的阐述。

户外OCR

这是最具挑战性的OCR任务,因为它将所有一般的计算机视觉挑战(如噪声、光照和伪影)引入OCR。与此任务相关的一些数据集是coco文本,以及再次使用街景图像提取文本的SVT数据集。

合成文本

SynthText不是一个数据集,甚至可能不是一个任务,但是一个提高训练效率的好主意是人工数据生成。由于文本的对齐性,将随机字符或单词随机放到图像上比任何其他对象都要自然的多。

我们在前面已经看到了一些数据生成,用于更简单的任务,如验证码和车牌。该任务包括考虑图像的深度信息。幸运的是,SynthText是一个很好的工作,它接收带有上述注释的图像,并智能地添加单词(来自新闻组数据集)。

为了使“散落”的文本看起来真实和有用,SynthText库对每个图像使用两个蒙版,一个是深度,另一个是分割。

建议根据此网址(https://github.com/ankush-me/SynthText)检查更新并自行生成一些图像。应该注意,代码中可能使用了一些过时的opencv和maptlotlib版本,因此可能需要在使用时根据最新版本的库做一些修改。

Mnist

尽管这并不是真正的OCR任务,但撰写有关OCR的文章没办法不介绍Mnist。这个最着名的计算机视觉挑战并不是一项考虑周全的OCR任务,因为它一次只包含一个字符(数字),而只有10个数字。但是,这可能解释了为什么OCR被认为很容易。

OCR的第一部分就先介绍到这里啦,下一部分我们将介绍深度学习在OCR中的应用以及一个生动鲜活的案例哦~

·  END  ·

HAPPY LIFE

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值