python,opencv中的光学字符识别(ocropticalcharacterrecognition)

程序媛一枚~ 程序媛一枚~     2022-12-21     349

关键词:

这篇博客将介绍什么是光学字符识别OCR,介绍OCR发展的简短历史,了解OCR真实的应用场景,了解OCR与方向和脚本检测(OSD)之间的区别。并了解图像预处理和后处理对于提高OCR结果的重要性。

  • OSD是任何OCR系统的基本组件。
  • 图像预处理和OCR结果后处理步骤,通常用于提高OCR精度。

1. 什么是OCR?

光学字符识别(Optical Character Recognition)简称OCR,是用于描述将文本图像转换为机器编码文本的算法和技术。主要包括以下3步:

  1. 接受输入图像(扫描、拍照或计算机生成);
  2. 就像人类“阅读”一样自动检测文本;
  3. 将文本转换为机器可读格式,以便在更大的计算机视觉系统范围内对其进行搜索、索引和处理;

OCR表面上看起来很简单,尽管计算机视觉领域已经存在了50多年,但研究人员尚未创建高度准确的通用OCR系统,依然道阻且长。

另外鉴于人类通过书写进行交流的方式有很多细微差别——有自然语言处理(NLP Natural Language Processing)的所有问题,并且计算机视觉系统在从图像读取文本时永远无法获得100%的准确度。噪声、书写风格、图像质量等方面的变量太多。OCR实现并不容易。

2. 光学字符识别简史

  • 1914年,早期的OCR技术完全是机械式的,伊曼纽尔·戈德伯格开发了可以读取字符并将其转换为标准电报代码的机器;

  • 1920~1930年,伊曼纽尔·戈德伯格开发了搜索缩微胶片(缩小的文档,通常是电影、报纸、期刊等)中的字符OCR。

  • 1974年,OCR主要致力于创建“盲人阅读机器”。

  • 1980年,惠普(HP)实验室开始研究Tesseract,2005年开源后很快成为世界上最流行的OCR引擎。

  • 2010年,Tesseart继续发展,称为长短时记忆(LSTM long short-term memory)网络的专门体系结构极大地提高了OCR的准确性

    LSTM引擎提供了显著的精度增益,使得即使在较差的非最佳条件下也能准确地识别OCR文本。
    LSTM引擎接受了超过123种语言的培训,使得除英语以外的语言(包括基于脚本的语言,如汉语、阿拉伯语等)进行OCR文本更加容易。

  • 2020年,OCR被谷歌、微软和亚马逊等科技巨头日益商业化。

3. 光学字符识别的应用

OCR有许多应用,最初的应用是为盲人创建阅读机器。自那时以来,OCR应用有了显著的发展,包括但不限于:

  • 自动车牌识别(ALPR/ANPR Automatic license/number plate recognition)
  • 交通标志识别(Traffic sign recognition)
  • 分析并击败网站上的CAPTCHA(区分计算机和人类的完全自动化公共图灵测试Analyzing and defeating CAPTCHAs (Completely Automated Public Turing tests to tell Computers and Humans Apart) on websites)
  • 从名片中提取信息(Extracting information from business cards)
  • 自动读取护照的机器可读区(MRZ machine-readable zone)和其他相关部分(Automatically reading the machine-readable zone and other relevant parts of a passport)
  • 解析银行支票中的路由号码、帐号和货币金额(Parsing the routing number, account number, and currency amount from a bank check)
  • 理解自然场景中的文本,如从智能手机拍摄的照片(Understanding text in natural scenes such as the photos captured from smartphone )

4. OSD 方向和脚本检测

OSD:Orientation and Script Detection方向和脚本检测

  • OCR是获取输入图像并以人类可读和机器可读格式返回文本的过程;
  • OSD是分析图像中文本元数据,特别是方向和脚本/书写风格的过程。
    可以说OSD信息是提高OCR准确性的前置步骤。

文本的方向是输入图像中文本的角度(以度为单位)。为了获得更高的OCR精度,需要应用OSD来确定文本方向,纠正它然后应用OCR。

脚本和书写风格是指用于书面和打字交流的一组字符和符号。OCR系统对特定脚本或书写系统所能做出的任何规则、启发或假设都将使OCR引擎在应用于给定脚本时更加准确。

5. 前处理和后处理的重要性

创建一个成功的OCR应用程序部分是科学,部分是艺术。

尽管 Tesseract OCR引擎的进步,OCR系统可以进行自动分割和页面分析。然而这些系统还是远不如人类智能,人类几乎可以即时解析复杂背景中的文本。

  • 如果在OCR前应用一些基本的图像处理操作,如阈值、距离变换和形态学操作,最终将得到清晰的图像。OCR将获得更好的效果;

  • 如果先对文本进行适当的清理和分割,OCR系统将更容易识别文本。

  • 后处理OCR文本。OCR系统永远不会100%准确,所以应该假设会有一些错误。为了帮助解决这个问题,可以应用一些规则和启发法。

6. OCR工具和API

接下来将介绍4部分内容:

  1. 探索世界上最流行的OCR软件包——Tesseract OCR引擎;

Tesseract OCR引擎是一个OCR软件包,最初开发于20世纪80年代,经历了多次修订和更新,现在是世界上最流行的OCR系统。
几乎每种流行编程语言(Java、C/C++、PHP等)都有Tesseract绑定。

  1. 了解Python和 PyTesseract 模块如何使用Tesseract进行推理

PyTesseract库是一个Python包,它是与tesseract命令行进行交互的二进制文件。只需使用一个或两个函数调用,就可以轻松地将Tesseract OCR应用于OCR项目。

  1. 了解计算机视觉和图像处理算法对OCR准确性的影响

为提升OCR的准确性,基于计算机视觉和图像处理,使用OpenCV或者Keras, TensorFlow, scikit-learn 对图像进行预处理或者后处理。

  • scikit学习库是使用Python训练机器学习模型时使用的标准包。
  • Keras和TensorFlow在一个易于使用的API中提供了所有深入学习的能力。
  1. 基于云的OCR API调用

当Tesseract从未训练过图像中的某种字体;或者经过预先训练的“现成”模型均不能够正确定位图像中的文本;或者开发自定义OCR可能需要花费太多的精力,可以考虑使用基于云的OCR API,例如微软Azure认知服务、Amazon RekGoNeNoint和谷歌云平台(Google Cloud Platform GCP)API。


缺点是付费使用;需要网络连接才可以提交图像并获取识别结果;有延迟不能用于实时应用;并不拥有整个OCR管道,只能用提供的一部分。

参考

如何识别作为光学字符识别 (OCR) 输出的文本中的实体?

】如何识别作为光学字符识别(OCR)输出的文本中的实体?【英文标题】:Howtorecognizeentitiesintextthatistheoutputofopticalcharacterrecognition(OCR)?【发布时间】:2019-07-2420:51:28【问题描述】:我正在尝试使用文本数据进行多类分类。我面临的... 查看详情

ocr(opticalcharacterrecognition,光学字符识别)

...过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高 查看详情

光学字符识别技术

...好的方式那就是利用与商业化。如何通过识别软件将图像中的信息提取或文字转换文本格式,或者解决除错和利用辅助信息提高识别的正确率,是OCR识别的最重要课题。下面就来详细了解一下OCR识别技 查看详情

非黑即白--谷歌ocr光学字符识别

...示深信不疑。今天研究一下前沿技术OCR光学识别庞大领域中的众多分支里的一个开源项目的一个包-tesseract。能让机器识别图片是无数工程师梦寐以求的事任何物体只有成功转为二进制才有可能被机器识别,而识别是做出一系列... 查看详情

ocr技术(光学字符识别)

什么是OCR?OCR英文全称是opticalcharacterrecognition,中文叫光学字符识别。它是利用光学技术和计算机技术把印在或者写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。文字识别是计算机视觉研究领域... 查看详情

用于屏幕文本的 OCR(光学字符识别)

】用于屏幕文本的OCR(光学字符识别)【英文标题】:OCR(OpticalCharacterRecognition)foron-screentext【发布时间】:2010-10-2803:05:50【问题描述】:我正在尝试创建一个软件,通过捕获屏幕截图来自动化PC,然后OCR(光学字符识别)它会寻... 查看详情

[译]opencv的基础光学字符识别(basicocrinopencv)(代码片段)

Github源码From:http://blog.damiles.com/2008/11/basic-ocr-in-opencv/在这个教程当中我们将完成一个基础的数字光学字符识别。这包括把一个手写的数字分类进它所属的类里。为了完成它,们我将要使用我们之前的教程里所有学到的东西... 查看详情

移动端车牌识别,ocr光学字符识别技术

移动端车牌识别技术,是在OCR光学字符识别技术的基础上研发的用来识别汽车号牌特征信息的图像识别技术。在国内,该项技术由北京易泊时代携手清华大学成功地将"国家863计划"项目成果——"文字图像识别技术TH-OCR"产业化,... 查看详情

光学字符识别中的表示是啥?

】光学字符识别中的表示是啥?【英文标题】:Whatisrepresentationinopticalcharacterrecognition?光学字符识别中的表示是什么?【发布时间】:2017-11-0720:48:05【问题描述】:我正在学习OCR并正在阅读这本书https://www.amazon.com/Character-Recognitio... 查看详情

光学字符识别。使用tesseract识别里程表

...布时间】:2016-08-0903:21:56【问题描述】:我想识别里程表中的数字。我找到了适用于iOS的本教程。https://www.raywenderlich.com/93276/implementing-tesseract-ocr-ios我的tesseract属性:funcperformIm 查看详情

在 OCR(光学字符识别)之前,您会推荐啥软件用于图像增强? [关闭]

】在OCR(光学字符识别)之前,您会推荐啥软件用于图像增强?[关闭]【英文标题】:WhatsoftwarewouldyourecommendforimageenhancementpriortoOCR(OpticalCharacterRecognition)?[closed]在OCR(光学字符识别)之前,您会推荐什么软件用于图像增强?[关闭... 查看详情

Android OCR(光学字符识别)[重复]

】AndroidOCR(光学字符识别)[重复]【英文标题】:AndroidOCR(OpticalCharacterRecognization)[duplicate]【发布时间】:2011-10-3008:25:27【问题描述】:我想开发一个从图像中读取文本的应用程序。我应该使用哪个库?【问题讨论】:开始使用co... 查看详情

带有 OpenCV 的光学字符识别 Android

】带有OpenCV的光学字符识别Android【英文标题】:OpticalCharacterRecognitionAndroidwithOpenCV【发布时间】:2012-03-1308:13:55【问题描述】:我目前正在从事一个项目,该项目涉及Android中的光学字符识别,确实需要一些在该领域有经验的人... 查看详情

PDF 上的光学字符识别 (python)

】PDF上的光学字符识别(python)【英文标题】:OpticalCharacterRecognitiononPDFs(python)【发布时间】:2020-12-2603:32:01【问题描述】:我正在使用ocrmypdf。我正在尝试对竞选财务pdf进行ocr。示例pdf:https://apps1.lavote.net/camp/comm.cfm?&cid=11我的... 查看详情

开发函数计算的正确姿势——ocr服务(代码片段)

...文字进行识别,并以文本的形式返回。Tesserocr:Tesserocr是python的一个OCR识别库,但其实是对tesseract做的一层pythonAPI封装,所以 查看详情

ocr识别要依赖于深度学习的进展吗?

这些年深度学习的出现,让光学字符识别(OCR)技术焕发第二春。现在光学字符识别(OCR)基本都用卷积神经网络来做了,而且识别率也是惊人的好,人们也不再需要花大量时间去设计字符特征了。在光学字符识别(OCR)系统中... 查看详情

是否有任何 Watson 或 Bluemix API 能够与 OCR(光学字符识别)一起使用? [关闭]

】是否有任何Watson或BluemixAPI能够与OCR(光学字符识别)一起使用?[关闭]【英文标题】:IsthereanyWatsonorBluemixAPItobeabletoworkwithOCR(OpticalCharacterRecognition)?[closed]【发布时间】:2017-03-1718:13:30【问题描述】:是否有任何Watson或BluemixAPI... 查看详情

实战|opencv+ocr实现环形文字识别实例(详细步骤+代码)

导读本文将介绍使用OpenCV+OCR实现环形文字识别的详细步骤和代码演示。(来源公众号:OpenCV与AI深度学习) 背景介绍  光学字符识别(OCR)场景中有很多特殊情况,比如噪声、脏污、倾斜、变形等,都会对识别造成影响... 查看详情