点击关注我哦

一篇文章带你了解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

OCR快速入门(一)| Python版相关推荐

  1. python快速入门答案-Python 开发 14 天快速入门

    专栏亮点 零基础学习,循序渐进:专栏将编程语言的学习路线提炼为基础.中级.高级三层,内容由易到难,循序渐进,简练而生动地为读者呈现知识点. 内容全面,提炼要义:从核心概念到高级知识点,包括基本数据结构 ...

  2. python快速入门教程-Python 开发 14 天快速入门

    专栏亮点 零基础学习,循序渐进:专栏将编程语言的学习路线提炼为基础.中级.高级三层,内容由易到难,循序渐进,简练而生动地为读者呈现知识点. 内容全面,提炼要义:从核心概念到高级知识点,包括基本数据结构 ...

  3. OpenCV快速入门篇(Python实现)

    OpenCV快速入门篇(Python实现) 转载自:https://blog.csdn.net/feilong_csdn/article/details/82750029 本系列python版本:py ...

  4. python新手快速入门教程-Python 开发 14 天快速入门

    专栏亮点 零基础学习,循序渐进:专栏将编程语言的学习路线提炼为基础.中级.高级三层,内容由易到难,循序渐进,简练而生动地为读者呈现知识点. 内容全面,提炼要义:从核心概念到高级知识点,包括基本数据结构 ...

  5. Qt Creator快速入门(第3版)

    ​​​第1章Qt Creator简介 可以参考Qt开源社区(www.qter.org)  打开文件所在的文件夹: Ctrl+ Tab快捷键,可以在多个打开的文档切换 帮助里面的: 书签:Ctrl十 M ...

  6. OCR快速入门(二)| Python版

    点击关注我哦 一篇文章带你了解OCR | Python版 方法与策略 如上所示,文本识别主要是一个分两步的任务.首先,需要检测图像中的文本外观,它可能是密集的(如打印文档中的)或稀疏的. 在检测到行/ ...

  7. Jupyter 快速入门——写python项目博客非常有用!!!

    from:https://blog.csdn.net/m0_37338590/article/details/78862488 一.简介: Jupyter Notebook(此前被称为 IPython ...

  8. Mysql快速入门 在python、java使用

    三分钟搞定Mysql数据库的安装 下载链接 链接:https://pan.baidu.com/s/1utfNkqgi2dG5NBiiaMgy3A  提取码:ahuf 用到的命令: mysqld --i ...

  9. python快速入门第3版 数据_Python 快速入门 第3版

    第 一部分 开始篇 第 1章 关于Python 3 1.1 用Python的理由 3 1.2 Python的长处 3 1.2.1 Python易于使用 4 1.2.2 Python富有表现力 4 1. ...

最新文章

  1. stitching detail输出的dot图含义
  2. eclipse 工程复制
  3. Golang 解决no buildable Go source file in问题
  4. 领英全球副总裁:如何做到 5 亿用户增长的 ?
  5. 定义快捷代码_Qt Creator快捷键
  6. python检查https过期_记录用certbot续签HTTPS时,python的pip源出现问题
  7. Java实验实现一个circle类,java实验报告-类的定义.doc
  8. Eclipse 设置自动导包
  9. python作者 google面试_如果Google面试让你用python写一个树的遍历程序
  10. CCNP-第十五篇-VXLAN(一)
  11. 感觉前路任重而道远呀。
  12. ipad文献管理软件_【MAC上写论文有哪些好的文献管理软件可以推荐?】-看准网
  13. 蓝绿色——三色配色篇
  14. 苹果手机文件转换html,苹果手机html文件怎么打开?
  15. java基础巩固-宇宙第一AiYWM:为了维持生计,JVM_Part4~(4种垃圾收集算法(标清、标整、复制、分代)、判断是否是垃圾(引用计数、根可达算法))、四种引用类型、整起
  16. java实现mysql拦截_java分页拦截类实现sql自动分页
  17. 三菱伺服定长追剪,系统为Q172DSCPU,高级同步模式
  18. 【数据分析案例】英雄联盟美服10000条排位数据分析
  19. Apache 与 php的配置
  20. c语言scanf返回值

热门文章

  1. [喵咪开源软件推荐(4)]Liunx跑分神器-unixbench
  2. Mac安装NUKE 12 for Mac安装教程(支持big sur)
  3. 小孔成像总结_科学实践小孔成像
  4. 隔离放大器 模块DIN导轨安装低成本小体积
  5. ic卡读写器有哪些分类?如何使用ic卡读写器?
  6. 【状语从句练习题】that 的省略
  7. 分布式配置中心-Config
  8. 社会即将分层,你将会在第几层?
  9. 网络聊天室_TCP服务端
  10. 腾讯云网站备案号是什么及相关问题解答