Python,OpenCV中的光学字符识别(OCR Optical Character Recognition)
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python,OpenCV中的光学字符识别(OCR Optical Character Recognition)相关的知识,希望对你有一定的参考价值。
Python,OpenCV中的光学字符识别(OCR Optical Character Recognition
这篇博客将介绍什么是光学字符识别OCR,介绍OCR发展的简短历史,了解OCR真实的应用场景,了解OCR与方向和脚本检测(OSD)之间的区别。并了解图像预处理和后处理对于提高OCR结果的重要性。
- OSD是任何OCR系统的基本组件。
- 图像预处理和OCR结果后处理步骤,通常用于提高OCR精度。
1. 什么是OCR?
光学字符识别(Optical Character Recognition)简称OCR,是用于描述将文本图像转换为机器编码文本的算法和技术。主要包括以下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部分内容:
- 探索世界上最流行的OCR软件包——Tesseract OCR引擎;
Tesseract OCR引擎是一个OCR软件包,最初开发于20世纪80年代,经历了多次修订和更新,现在是世界上最流行的OCR系统。
几乎每种流行编程语言(Java、C/C++、php等)都有Tesseract绑定。
- 了解Python和 PyTesseract 模块如何使用Tesseract进行推理
PyTesseract库是一个Python包,它是与tesseract命令行进行交互的二进制文件。只需使用一个或两个函数调用,就可以轻松地将Tesseract OCR应用于OCR项目。
- 了解计算机视觉和图像处理算法对OCR准确性的影响
为提升OCR的准确性,基于计算机视觉和图像处理,使用OpenCV或者Keras, TensorFlow, scikit-learn 对图像进行预处理或者后处理。
- scikit学习库是使用Python训练机器学习模型时使用的标准包。
- Keras和TensorFlow在一个易于使用的API中提供了所有深入学习的能力。
- 基于云的OCR API调用
当Tesseract从未训练过图像中的某种字体;或者经过预先训练的“现成”模型均不能够正确定位图像中的文本;或者开发自定义OCR可能需要花费太多的精力,可以考虑使用基于云的OCR API,例如微软Azure认知服务、Amazon RekGoNeNoint和谷歌云平台(Google Cloud Platform GCP)API。
缺点是付费使用;需要网络连接才可以提交图像并获取识别结果;有延迟不能用于实时应用;并不拥有整个OCR管道,只能用提供的一部分。
参考
以上是关于Python,OpenCV中的光学字符识别(OCR Optical Character Recognition)的主要内容,如果未能解决你的问题,请参考以下文章
[译]OpenCV的基础光学字符识别(Basic OCR in OpenCV)
Python+OpenCV+Tesseract实现OCR字符识别
通过字段识别和光学字符识别(OCR)进行数据输入自动化,用于预定义表格上的手写