由于最近在接触一些OCR的工作,所以本期《晓说AI》和大家分享一下我的一些总结,先从基本的概念讲起。如有错误,还请指正,谢你3千遍。如有疑问,欢迎留言,我会第一时间答复。
以下部分插图来自于我在腾讯云大学上分享的视频课件PPT。
光学字符识别(英语:Optical Character Recognition,OCR)
OCR 是实时高效的定位与识别图片中的所有文字信息,返回文字框位置与文字内容。支持多场景、任意版面下整张图文字的识别,以及中英文、字母、数字的识别。
----小的不才,此段来自Wikipedia
通俗讲就是指对文本资料和图像文件进行分析识别处理,获取文字及版面信息的过程。
衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、产品的稳定性,用户界面的友好性,易用性及可行性等。
OCR的概念是在1929年由德国科学家Tausheck最先提出来,并申请了专利。后来美国科学家Handel也提出了利用技术对文字进行识别的想法。但是想法的实现还是在1946年2月14日,世界上第一台电脑ENIAC在美国宾夕法尼亚大学诞生之后才会有想法实现的条件。我国在OCR技术方面的研究工作起步较晚,在70年代才开始对数字、英文字母及符号的识别进行研究,70年代末开始进行汉字识别的研究。中国最早的OCR商业应用是由科学家王庆人教授在南开大学开发出来的,并在美国市场投入商业使用。日本在20世纪60年代开始研究OCR识别理论,开发了邮政编码识别系统。
从2012年开始,深度学习席卷了图像识别领域,在图像分类、目标检测、语义分割等领域秒杀了传统的方法。随着2013年创建MINST数据集,之后的技术都主要是使用深度学习的方法来做文字识别了。
2018年的5月23日,腾讯云公布了OCR免费接入,以及其它很多AI类的图像应用免费接入,不过现在不完全免费了,而是以每月都有部分免费体验次数的方式。这就意味着可以用手机移动终端或者任何的终端设备采集一些文字的图片后上传到云进行解析。
简单而言,识别数字是最简单了,毕竟要识别的字符只有0~9,而英文字母识别要识别的字符有26个(如果算上大小写的话那就52个),而中文识别,要识别的字符高达数千个(二级汉字一共6763个)!因为汉字的字形各不相同,结构非常复杂(比如带偏旁的汉字)如果要将这些字符都比较准确地识别出来,是一件相当具有挑战性的事情。
尽管目前工业界和学术界几乎都不再使用传统的方法做图像识别,在这里稍微回顾一下之前的方法吧,毕竟也曾经辉煌过,制霸了几十年的技术啊。
l 谷歌开源OCR引擎Tesseract
做过字符识别的同学应该都听说过Tesseract这个东西,这是谷歌于2006年赞助开发并一直维护至今的一个OCR引擎。Tesseract现在的版本已经支持识别很多种语言了,当然也包括汉字的识别。但是Tesseract作为一个舶来品,在汉字识别的精度上还不高在Tesseract在阿拉伯数字和英文字母上的识别还算OK,但是目前逐渐被摒弃掉,除非是只需要数字和英文的简单场景,由于其轻量级的部署环境要求而沿用至今。
l 暴力的字符模板匹配法
暴力的字符模板匹配法看起来很蠢,但是在一些应用上可能却很凑效。比如在对电表数字进行识别时,考虑到电表上的字体较少(可能就只有阿拉伯数字),而且字体规范又统一,清晰度也很高,所以识别难度不高。针对这种简单的识别场景,我们首先考虑的识别策略当然是最为简单和暴力的模板匹配法。我们首先定义出数字模板(0~9),然后用该模板滑动匹配电表上的字符,这种策略虽然简单但是相当有效。我们不需要左思右想去建模,训练模型,只需要识别前做好模板库就可以了。但是模板匹配法只限于一些很简单的场景,但对于稍微复杂的场景,那就不太实用了。
l 传统方法做字符的特征提取,输入分类器,得出OCR模型
在深度学习大行其道之前,OCR的方法基本都是“特征设计à特征提取à分类得出结果”三步走策略。其效果受图片的质量影响较深。在这里简单说一下这里常见的方法。第一步是特征设计和提取,特征设计是一件很烦人的事情,做过模式识别相关项目的童鞋也深有体会,我们现在识别的目标是字符,所以我们要为字符设计它独有的特征,来为后面的特征分类做好准备。字符有哪些特征呢?有结构特征,即字符的端点、交叉点、圈的个数、横线竖线条数等等,都是可以利用的字符特征。除了结构特征,还有大量人工专门设计的字符特征。最后再将这些特征送入分类器(SVM)做分类,得出识别结果。这种方式最大的缺点就是,人们需要花费大量时间做特征的设计,这是一件相当费工夫的事情,而且场景不同,特征也要做调整,使得没办法设计一个可以适用多种复杂场景的特征。通过人工设计的特征(例如HOG)来训练字符识别模型,此类单一的特征在字体变化,模糊或背景干扰时泛化能力迅速下降。而且过度依赖字符切分的结果,在字符扭曲、粘连、噪声干扰的情况下,切分的错误传播尤其突出。针对传统OCR解决方案的不足,学界业界纷纷拥抱基于深度学习的OCR。
这些年深度学习的出现,让OCR技术得以蓬勃发展。在OCR系统中,人工神经网络主要充当特征提取器和分类器的功能,输入是字符图像,输出是识别结果,省去了人工设计特征和训练分类器的步骤。当然用深度学习做OCR并不是在每个方面都很优秀,因为神经网络的训练需要大量的训练数据,那么如果我们没有办法得到大量训练数据时,这种方法很可能就不奏效了。其次,神经网络的训练需要花费大量的时间,并且需要用到的硬件资源一般都比较多,这几个都是需要考虑的问题。最后,还没有比较轻量级的模型出现,所以你们才要使用我们腾讯云的服务啊,哈哈哈~
链接在此,https://console.cloud.tencent.com/ocr/general
开通即用,超多种类超多免费额度,一口气说不完那种。
Right now,让我们荡起双桨,哦,不,是让我们继续今天的主题。
基于深度学习的OCR算法一般需要训练两个模型,一个是文本检测模型,一个是文字识别模型。
文本检测是从图片中尽可能准确地找出文字所在区域。
文本检测的算法技术是依赖于视觉领域常规物体检测方法(SSD, YOLO, Faster-RCNN等)而产生的,但是直接套用于文字检测任务效果并不理想, 主要原因如下:
1) 相比于常规物体,文字行的长度、长宽比例变化范围很大。
2) 文本行是有方向性的。常规物体边框BBox的四元组描述方式信息量不充足。
3) 自然场景中某些物体局部图像与字母形状相似,如果不参考图像全局信息将有误报。
4) 有些艺术字体使用了弯曲的文本行,而手写字体变化模式也很多。
5) 由于丰富的背景图像干扰,手工设计特征在自然场景文本识别任务中不够鲁棒。
针对上述问题根因,近年来出现了各种基于深度学习的技术解决方案。它们从特征提取、区域建议网络(RPN)、多目标协同训练、Loss改进、非极大值抑制(NMS)、半监督学习等角度对常规物体检测方法进行改造,极大提升了自然场景图像中文本检测的准确率。例如:
1) CTPN方案中,用BLSTM模块提取字符所在图像上下文特征,以提高文本块识别精度。
2) RRPN等方案中,文本框标注采用BBOX +方向角度值的形式,模型中产生出可旋转的文字区域候选框,并在边框回归计算过程中找到待测文本行的倾斜角度。
3) DMPNet等方案中,使用四边形(非矩形)标注文本框,来更紧凑的包围文本区域。、
4) SegLink,PixelLink等方案将单词切割为更易检测的小文字块甚至精细到像素点的范畴,再预测邻近连接将小文字块连成词。
5) TextBoxes等方案中,调整了文字区域参考框的长宽比例,并将特征层卷积核调整为长方形,从而更适合检测出细长型的文本行。
6) WordSup方案中,采用半监督学习策略,用单词级标注数据来训练字符级文本检测模型。
上面提到的OCR方法都有其优点和缺点,也正如此,他们也有各自特别适合的应用场景。不过,我还是期待通用场景算法的出现哈。
文本识别现在还没有什么惊天地泣鬼神的牛掰算法出现,一般都是基于这两大主流技术:CRNN OCR和attention OCR。其实这两大方法主要区别在于最后的输出层(翻译层),即怎么将网络学习到的序列特征信息转化为最终的识别结果。这两大主流技术在其特征学习阶段都采用了CNN+RNN的网络结构,CRNN OCR在对齐时采取的方式是CTC算法,而attention OCR采取的方式则是attention机制。
以后我们一起学习,再做分享。
以上叨叨了3192个字了,那就有同学就说了,OCR不就是识别文字么,有什么了不起,不就那点应用场景,比如:
通用文字识别:通用印刷体识别、通用手写体识别、英文识别,二维码识别等
卡证文字识别:提供身份证识别、银行卡识别、名片识别、营业执照等
票据单据识别:增值税发票识别、船票出租火车票识别、机票运单识别等
汽车相关识别:驾驶证识别、行驶证识别、车牌识别、车辆 VIN 码识别
行业文档识别:表单表格识别、体检报告识别、检验检查单识别、算式识别等
咳咳,全都答对了,目前就上线了“这么点”接口服务。
下面是API在线调用接口地址,快来腾讯云控制台点我啊
下期再见~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。