
什么是OCR?
OCR的全名是光学字符识别,在中文中称为光学字符识别. 使用光学技术和计算机技术将其打印或写在纸上
读取文本并将其转换为计算机可以接受并且人们可以理解的格式. 文本识别是计算机视觉研究的分支之一,
此外,这个主题还比较成熟,并且已经有许多着陆项目在业务中.
例如汉王OCR,百度OCR,阿里OCR等,很多公司
每个人都有能力使用OCR技术开始赚钱. 实际上,我们还可以感觉到OCR技术确实正在改变我们的生活: 例如手机APP
可以帮助扫描名片和,并识别其中的信息;进入停车场和收费站的汽车无需手动注册,它们都使用车牌识别技术;
当我们读一本书时,会看到一个我们不理解的问题. 扫描手机,APP可帮助您找到该问题的答案. 应用程序太多,OCR应用程序确实在这个时代蓬勃发展.
OCR的分类
如果要对OCR进行分类,我认为它可以分为两类: 手写识别和印刷识别. 当然,这两个可以被视为OCR领域的两个主要主题
打印识别比手写识别要简单得多,我们还可以直观地理解
大多数打印字体是常规字体,因为这些字体是由计算机生成的,然后通过打印技术打印在纸上. 它对印刷品的识别有其独特的干扰;
在打印过程中,字体可能会破裂或出现墨迹,从而使OCR识别极为困难.
当然ocr字符识别是什么,可以通过某些图像处理技术尽可能地还原这些图像,从而提高识别率.
通常,简单的打印识别在行业中可以很好地完成,但是绝对不可能说100%识别,但是可以说识别很好.
人们已经很好地认识了印刷品,但是手写呢?手写识别一直是OCR行业一直想要克服的难题,
但是直到今天,我仍然感到这一困难尚未克服,许多学者和公司仍在研究中.
为什么手写识别这么难识别?由于人类手写字符通常具有个人特征,因此每个人的书写风格都基本不同,尽管人类可以阅读您写的文字,
但是很难缺少机器. 那为什么机器可以读取印刷品呢?因为印刷体是由机器制造的,
当然,机器可以读取自己制作的字体,哈哈〜实际上,如上所述,打印的字体通常更规则.
基本上有几十种字体. 机器学习这几十种字体不是一项艰巨的任务,而是手写,
如果每个人都有字体,则机器应学习多少种字体?这就是困难所在.
如果根据识别的内容(即根据识别的语言的分类)进行分类,
然后要识别的内容将是所有人类语言(中文,英语ocr字符识别是什么,德语,法语等).

仅根据我们人民的需要,识别的内容包括: 汉字,英文字母,阿拉伯数字和通用标点符号.
根据要识别的内容,识别的难度有所不同. 简而言之,识别数字是最简单的
毕竟,只有0到9个字符可以识别,对于英文字母识别,只有26个字符可以识别(如果计算为大写,则为52),
要进行中文识别,需要识别数千个字符(总共6763个二级中文字符)!因为汉字的字形是不同的,
结构非常复杂(例如带有部首的汉字). 如果您想更准确地识别这些字符,
这非常具有挑战性. 但是,并非所有的应用程序都需要识别如此大量的汉字.
例如,对于车牌识别,我们的识别目标只是中国几十个省市的缩写,
难度大大降低. 当然,在某些自动文件识别应用中,需要识别整个汉字集,因此要确保对识别的整体识别仍然很困难.
OCR流程
现在让我们整理一下常见的OCR流程. 为了便于描述,我们以文档中的字符识别为例进行说明.
如果输入系统的图像是一页文字,
那么识别的第一件事就是确定页面上文本的方向,
由于我们在此页面上获得的文档通常不完美,因此可能会倾斜或弄脏
我们要做的第一件事是执行图像预处理,角度校正和去噪.
然后,我们需要分析文档的布局,逐行划分,并剪切文本的每一行.
最后,每行文本被分成几列以切出每个字符,
将字符发送到经过训练的OCR识别模型以进行字符识别并获得结果.
但是模型识别结果通常不是很准确,我们需要校正和优化识别结果,
例如,我们可以设计一个语法检测器来检测字符的组合逻辑是否合理.
例如,考虑单词“因为”,因为我们设计的识别模型将其识别为8ecause,
然后我们可以使用语法检查器纠正此拼写错误,并用B替换8并完成识别纠正.
这样,整个OCR过程就完成了.
从大模块的摘要来看,一组OCR流程可以分为:
布局分析->预处理->行和列切割->字符识别->后处理识别和校正

从上面的流程图可以看出,不需要字符识别
可以实现一个简单的OCR模块(如果是一个简单的OCR模块,识别率会很低),
必须组合所有模块以确保较高的识别率. 上面的过程比较粗糙,
每个模块下还有许多更详细的操作,每个操作都与最终识别结果的准确性有关.
所有完成了OCR的童鞋都知道发送到OCR模块的图像越清晰(也就是说,预处理效果越好)
识别效果趋于更好. 现在,我将总结此过程中最重要的字符识别技术.
识别方法
现在我们只想简单地识别字符,有哪些方法?我列出了一些您可以采取的策略:
①,使用Google的开源OCR引擎Tesseract
②,使用大公司(例如百度)的OCR开放平台并使用其字符识别API
③. 传统方法是提取字符特征,输入分类器,得到OCR模型
④. 暴力人物模板匹配方法
⑤. 大杀手: 基于深度学习的CNN字符识别
上面提到的OCR方法有其优点和缺点,因此,它们也有自己的特别适合的应用场景.
首先,让我们谈谈开源OCR引擎Tesseract.
从事角色识别的童鞋应该听说过Tesseract.
这是Google维护的OCR引擎. 历史悠久.
当前的Tesseract版本已经支持多种语言的识别,当然包括汉字的识别.
毕竟,Tesseract是外国人制造的东西,因此仍然无法将汉字识别的准确性放在桌子上.
但是我仍然需要提高自己. 但是Tesseract仍然可以识别阿拉伯数字和英文字母,
如果您的应用程序是要识别英语或数字,请考虑使用Tesseract,毕竟,您可以获得良好的结果.
当然,要获得所需的识别率,您必须在以后的微调或优化中加倍努力.
接下来,我们来谈谈借用OCR开放平台进行文本识别的问题.
现在许多大公司已经开放OCR API供开发人员调用,

当然,小电话不收费,大电话不收费.
最近,我还在百度开放平台上调用了OCR API来做一些识别工作,
说实话,我们的中国公司的技术在汉字识别方面仍然是一流的,
汉字识别的准确性非常令人满意. 例如,我想识别一些文本并自己编写一个python脚本,
调用开放平台的服务,返回的是识别结果. 这种模式有什么缺点吗?
第一个是您需要钱(当然,您每天都不需要钱来识别小批量产品),第二个是您的控制力不足.
我们要提高识别的准确性,我们无法通过OCR识别进行改进(毕竟,其他人的东西,我们无法更改),
只能做预处理和后期校正,只能做些有限的事情.
但是,如果您不想花很多时间在OCR模型上并且有钱,这种识别方法仍然可以.
上面提到的所有东西都是别人做的,所以我们想自己做,应该怎么做?
然后自己动手!首先讨论字符模板的匹配方法.
暴力字符模板匹配方法看起来很愚蠢,但在某些应用程序中可能非常有效.
例如,在识别电表的数字时,考虑到电表上的字体较少(也许只有阿拉伯数字),
此外,字体统一而且清晰度也很高,因此识别起来并不困难.
对于这种简单的识别方案,我们考虑的第一个识别策略当然是最简单和暴力的模板匹配方法.
我们首先定义数字模板(0〜9),然后使用该模板滑动并匹配仪表上的字符,
此策略很简单,但很有效. 我们不需要考虑建模和训练模型,
只需在识别之前制作模板库即可.
模板匹配方法仅限于一些非常简单的情况.
但是对于稍微复杂一些的场景,这不是很实用.
这时,我们可以采用OCR的通用方法,
计算机视觉在特征设计,特征提取和分类方面的一般技能.
在深入学习之前,OCR方法基本上就是这种方法,它的效果是
不太好. 这里简要讨论一下这里的常用方法. 第一步是特征设计和提取,

功能设计是一件非常烦人的事情. 进行过模式识别相关项目的童鞋也有丰富的经验.
当前识别的目标是字符,因此我们必须为字符设计其独特功能,以为后续的特征分类做准备.
有什么特点
个字符?具有结构特征,即字符的端点,交点,圆圈数,水平线和垂直线的数量等,
是所有可用的字符功能. 例如,字符“品”的特征是3个圆圈,6条水平线和6条垂直线.
除了结构特征外,还有大量经过特殊设计的字符特征,据说效果很好.
最后,将这些特征发送到分类器(SVM)进行分类,并获得识别结果.
此方法的最大缺点是,人们需要花费大量时间来设计功能,
这是一个非常耗时的任务. 字符识别模型由人为设计的功能(例如HOG)训练而成. 如此单一的功能会改变字体,
当模糊或背景干扰时,泛化能力迅速下降. 而且过分依赖字符分割的结果,
在字符失真,粘附和噪声干扰的情况下,分割的错误传播尤为突出.
鉴于传统OCR解决方案的缺点,学术界和工业界已经接受了基于深度学习的OCR.
近年来,深度学习的出现使OCR技术有了第二弹. 现在,OCR基本上是用卷积神经网络完成的,识别率非常好. 人们不再需要花费大量时间来设计角色特征. 在OCR系统中,人工神经网络主要充当特征提取器和分类器. 输入是一个字符图像,而输出是识别结果. 在这里,我将不进一步描述卷积神经网络. 如果您想了解详细信息,请参阅我在“卷积神经网络CNN摘要”之前写的博客. 当然,使用深度学习进行OCR并不是在每个方面都出色,因为神经网络的训练需要大量的训练数据,因此,如果我们无法获得大量的训练数据,则此方法可能行不通. 其次,神经网络的训练要花费很多时间,而且通常需要使用的硬件资源更多,这些都是需要考虑的问题.
在下一个博客中,我将在项目中逐个实现上述OCR识别方法~~
OCR的开发
在某些简单环境中,OCR的准确性相对较高(例如电子文档),但在某些复杂环境中,字符识别则是
没有人敢说他们今天可以做得很好.
现在,每个人都很少关注如何进一步提高电子文档的文本识别的准确性.
因为他们将目光投向更具挑战性的领域. 传统的OCR方法无法处理复杂图形场景中的文本识别.
越来越多的人致力于研究如何在复杂的场景中阅读文本,并将其作为研究主题准确阅读,
在学术上,它是场景文本识别(文本检测+文本识别).
从上图可以看出,自然场景中的文本识别比简单场景中的文本识别困难得多. 尽管已经产生了许多结果,但仍然离理想结果还很远.
当然,除了上述场景文本识别之外,具有悠久历史的笔迹识别仍然是一个具有挑战性的话题.
在深度学习浪潮中,手写识别已迈出了一大步,但尚未达到可以将印刷识别用于商业用途的地步. 因此,OCR研究必须继续.
OCR技术(光学字符识别)
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-285942-1.html
没办法