使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统

总览html

  • 光学字符识别(OCR)是计算机视觉领域中普遍使用的系统
  • 了解如何为各类任务构建本身的OCR
  • 咱们将利用OpenCV库和Tesseract来构建OCR系统
    介绍
    你还记得考试期间咱们必须填写正确答案的日子吗?或者你还记得在开始第一份工做以前进行的能力测验呢?我能够回忆起奥林匹克竞赛和多项选择测试,大学和组织会使用光学字符识别(OCR)系统对答卷进行大量评分。
    老实说,OCR在普遍的行业和功能中都有应用,所以从扫描文档(包括银行对账单,收据,手写文档,优惠券等)到阅读自动驾驶汽车的路牌,都在OCR的范畴内。
    OCR系统在几十年前建造起来是很是昂贵和繁琐的,但随着计算机视觉和深度学习领域的进步意味着咱们如今能够创建本身的OCR系统了!
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    可是,创建OCR系统并非一件容易的事,对于初学者来讲,面临着诸如图像中的字体不一样,对比度差,图像中有多个对象等问题。
    所以,在本文中,咱们将探讨OCR任务的一些很是著名且有效的方法,以及如何本身实施。
    若是你不熟悉目标检测和计算机视觉,建议你先阅读如下资源:
  • 基本目标检测算法的介绍
    https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1
  • 计算机视觉课程
    https://courses.analyticsvidhya.com/courses/computer-vision-using-deep-learning-version2
    目录
  • 什么是光学字符识别(OCR)
  • 现实世界中流行的OCR应用
  • 使用Tesseract OCR进行文本识别
  • 文本检测的不一样方法
    什么是光学字符识别(OCR)
    首先,让咱们了解一下什么是OCR。
    OCR,或称光学字符识别是一种识别图像内文本并将其转换为电子形式的过程。这些图像能够是手写文字,文件,收据,名片等印刷文字,甚至是天然场景照片。
    OCR有两个部分,第一部分是文本检测,肯定图像中的文本部分,文本在图像中的定位对于OCR的第二部分文本识别很是重要,其中文本是从图像中提取出来的。结合使用这些技术能够从任何图像中提取文本。
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    没有什么是完美的,OCR也不例外。可是,随着深度学习的到来,对这一问题有可能获得更好、更广泛的解决方案。
    在咱们深刻研究如何构建本身的OCR以前,让咱们先看看OCR的一些流行应用程序。
    现实世界中流行的OCR应用
    OCR在各行各业有着普遍的应用(主要是为了减小人工操做)。它已经融入到咱们的平常生活中,以致于咱们几乎没有注意到它!但它确定会努力带来更好的用户体验。
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    OCR经常使用于在手写识别任务中提取信息。该领域正在进行许多工做,也取得了一些很是重大的进步。Microsoft提出了一个很棒的数学应用程序,该应用程序以手写的数学方程式做为输入,生成解决方案,并逐步解释其工做原理。
    OCR愈来愈多地被各个行业用于数字化,以减小人工工做量。这使得从业务文档,收据,发票,护照等中提取和存储信息很是容易且高效,此外,当你为KYC(Know Your Customer,了解客户)上传文档时,OCR用于从这些文档中提取信息并存储它们以供未来参考。
    OCR还用于书籍扫描,它将原始图像转换为数字文本格式。许多大型项目,例如Gutenberg项目,Million Book Project和Google Books,都使用OCR扫描和数字化书籍并将做品存储为档案。
    银行业也愈来愈多地使用OCR来归档与客户相关的文书工做,例如入职资料,以轻松建立客户资料库,这显着减小了上线时间,从而改善了用户体验。此外,银行使用OCR从支票中提取诸如账号,金额,支票号码之类的信息,以加快处理速度。
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    说到OCR的应用,就必须说起它们在自动驾驶汽车中的使用。自动驾驶汽车在很大程度上依赖OCR来阅读路标和交通标志,对这些标志的有效理解可使自动驾驶汽车对行人和其余在道路上行驶的车辆保持安全。
    还有不少OCR应用,例如车牌识别,将扫描的文档转换为可编辑的Word文档等等。
    使用OCR进行数字化显然具备普遍的优点,例如易于存储和处理文本,更不用说能够应用到此数据的大量分析了!OCR绝对是计算机视觉最重要的领域之一。
    如今,让咱们看看最著名的和普遍使用的文本识别技术之一——Tesseract。
    使用Tesseract OCR进行文本识别
  • Tesseract:https://tesseract-ocr.github.io/tessdoc/Documentation.html
    Tesseract是一个开源的OCR引擎,最初是由HP(Hewlett-Packard)做为专有软件开发的,但后来在2005年被开源,从那时起,谷歌就采用了这个项目并赞助它的开发。
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    截至今天,Tesseract能够检测100多种语言,甚至能够处理从右到左的文本,例如阿拉伯语或希伯来语!难怪Google会将其用于移动设备,视频和Gmail的图像垃圾邮件检测算法中的文本检测。
    从版本4开始,Google对该OCR引擎进行了重大改进。Tesseract 4.0添加了新的OCR引擎,该引擎使用基于LSTM(长期短时间记忆,https://www.analyticsvidhya.com/blog/2017/12/fundamentals-of-deep-learning-introduction-to-lstm/) 的神经网络系统,这是解决序列预测问题的最有效解决方案之一。尽管它之前使用模式匹配的OCR引擎仍可做为旧代码使用。
    将Tesseract下载(https://tesseract-ocr.github.io/tessdoc/Home.html) 到系统后,可使用如下命令从命令行轻松运行它(https://tesseract-ocr.github.io/tessdoc/Command-Line-Usage.html):
    tesseract <test_image> <output_file_name> -l <language(s)> --oem <mode> --psm <mode>
    你能够更改Tesseract配置以得到最适合你的图像的结果:
  • 语言(-l) : 使用Tesseract能够检测一种或多种语言
  • OCR引擎模式(-oem): 如你所知,Tesseract 4具备LSTM和Legacy OCR引擎。根据它们的组合,有4种有效的操做模式
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    页面分割(–psm) : 能够根据图像中的文本进行调整以得到更好的结果
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    Pyteseract
    可是,除了命令行方法以外,你还可使用Pytesseract(https://github.com/madmaze/pytesseract) :Tesseract的Python包装器。使用此功能,你能够经过编写简单的Python脚本使用Tesseract OCR轻松实现本身的文本识别器。
    你可使用pip install pytesseract命令下载Pytesseract 。
    Pytesseract的主要功能是image_to_text(),它将图像和命令行选项做为其参数:
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    Tesseract面临的挑战是什么?
    Tesseract并不完美,这不是什么秘密。当图像有不少噪声或者语言的字体是Tesseract OCR没有通过训练的字体时,它的性能不好。其余条件(如文本的亮度或倾斜度)也会影响Tesseract的性能。然而,它是文本识别的一个很好的起点,具备低努力和高产出的特色。
    文本检测的不一样方法
    Tesseract假定输入文本图像是干净的。不幸的是,许多输入图像将包含过多的对象,而不只仅是干净的预处理文本,所以,必须具备一个良好的文本检测系统,该系统能够检测随后能够轻松提取的文本。
    文本检测有几种方法:
  • 使用OpenCV的传统方式
  • 使用当代深度学习模型
  • 创建本身的自定义模型
    使用OpenCV进行文本检测
    使用OpenCV进行文本检测是经典的处理方式。你能够应用各类操做(https://www.analyticsvidhya.com/blog/2019/03/opencv-functions-computer-vision-python/) ,如图像调整大小,模糊,阈值化,形态学操做等,以清理图像。
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    在这里,咱们有按灰度,模糊度和阈值顺序排列的图像。
    完成此操做后,可使用OpenCV轮廓检测来检测轮廓以提取数据块:
    最后,你能够在预测文本的轮廓上应用文本识别:
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    上面图像中的结果是经过最少的预处理和轮廓检测以及随后使用Pytesseract进行文本识别实现的,显然,轮廓并非每次都检测到文本。
    可是,使用OpenCV进行文本检测仍然是一项繁琐的任务,须要使用大量参数。一样,它在泛化方面的表现也很差,更好的方法是使用EAST文本检测模型。
    当代深度学习模型– EAST
    EAST是一种高效、准确的场景文本检测器,是一种从天然场景图像中检测文本的深度学习模型,它很是快速和准确,由于它可以以13.2fps的速度检测720p图像,f值为0.7820。
    该模型由一个彻底卷积网络和一个非最大抑制阶段组成,用于预测单词或文本行。可是,该模型不包括其余先前模型所涉及的能够优化模型的中间步骤,例如候选建议,文本区域造成和单词划分。
    你能够看一下做者在论文中提供的如下图像,将EAST模型与其余先前模型进行了比较:
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    EAST具备U形网络。网络的第一部分包括在ImageNet数据集上训练的卷积层。下一部分是特征合并分支,该分支将当前特征图与上一阶段的未合并特征图链接在一块儿。
    而后是卷积层,以减小计算并生成输出特征图。最后,使用卷积层,输出是显示文本存在的得分图和几何图,几何图能够是旋转的框或覆盖文本的四边形,这能够从研究论文中包含的结构图像中直观地理解:
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    我强烈建议你亲自阅读本文(https://arxiv.org/abs/1704.03155) ,以更好地了解EAST模型。
    OpenCV从版本3.4开始包含EAST文本检测器模型,这使得实现本身的文本检测器变得超级方便。生成的本地化文本框能够经过Tesseract OCR传递以提取文本,这样你将拥有一个完整的OCR端到端模型。
    使用Google的Tesseract和OpenCV构建光学字符识别(OCR)系统
    使用TensorFlow对象的API进行文本检测的自定义模型
  • TensorFlow Object API:https://github.com/tensorflow/models/tree/master/research/object_detection
    构建文本检测器的最后一种方法是用使用了TensorFlow Object API的自定义文本检测器模型。它是一个开放源代码框架,用于为目标检测任务构建深度学习模型。要详细了解它,我建议先阅读下面这篇详细的文章。
  • https://www.analyticsvidhya.com/blog/2020/04/build-your-own-object-detection-model-using-tensorflow-api/
    要构建你的自定义文本检测器,你显然须要一个包含不少图像的数据集,至少要多于100个;而后你须要对这些图像进行注释,以便模型能够知道目标对象在哪里并了解有关它的一切;最后,你能够从TensorFlow’s detection model zoo(https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md) 中根据性能和速度之间的权衡选择一种预训练的模型。你能够参考这个综合性的博客来构建你的自定义模型。
  • 博客:https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html#configuring-a-training-pipeline
    如今。训练可能须要一些计算,可是若是你真的没有足够的计算能力,请不要担忧!你可使用Google合做实验室知足全部要求!这篇文章(https://www.analyticsvidhya.com/blog/2020/03/google-colab-machine-learning-deep-learning) 将教你如何有效地使用它。
    最后,若是你想往前走了一步,并创建一个最早进的YOLO文本探测器模型,该文章(https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) 将是一个了解它的全部细节的敲门砖,是一个很好的入门教程!
    尾注
    在这篇文章中,咱们讨论了OCR中存在的问题以及能够用来解决这项任务的各类方法。咱们还讨论了这些方法的各类缺点,以及为何OCR不像看起来那么容易!
    原文连接:https://www.analyticsvidhya.com/blog/2020/05/build-your-own-ocr-google-tesseract-opencv/
相关文章
相关标签/搜索