OCR定义和起源
OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。
OCR的概念是在1929年由德国科学家Tausheck最先提出来的,后来美国科学家Handel也提出了利用技术对文字进行识别的想法。
中国在OCR技术方面的研究工作起步较晚,在70年代才开始对数字、英文字母及符号的识别进行研究,70年代末开始进行汉字识别的研究,到1986年,我国提出“863”高新科技研究计划,汉字识别的研究进入一个实质性的阶段,清华大学的丁晓青教授和中科院分别开发研究,相继推出了中文OCR产品,现为中国最领先汉字OCR技术。
最早的OCR应用是信封上的邮政编码识别。这种技术被使用在了一个非常窄的场景里面,只是要求把填在空格里的数字稳定的有效的检索、识别出来。当时的识别概率能达到92%-93%。这解决一个很大的问题,当时邮寄信都是通过识别码来进行投递的。传统领域内的OCR识别其实与早期的邮政编码识别还是有非常大的相似性,在限定区域内识别文字,比如银行卡、票证、证件(身份证、行驶证、驾驶证)等。
OCR的作用
套用腾讯云戴永楠的话,“OCR就是为了让机器看懂文字”,他说的看懂指的是初步理解文字,并非是识别文字。
OCR的3个步骤,让机器看到文字---让机器认识文字----让机器看懂文字(理解)。目前市面上的很多应用都还局限于让机器认识文字,比如这个字是一还是二或者是3等等。但如果OCR结合NLP,那就能够将机器认识文字带入到机器看懂文字。
OCR应用
基于OCR的应用非常多,比如名片识别、车牌识别、VIN码识别、pdf文档转word、图片转文字等等。有作业帮的拍图搜题,还有曾经法院通过OCR识别文字后自动判卷等等。
目前的OCR应用已经从传统领域的文字识别变为开放场景的文字识别,前者指特定的印刷文本,比如书本、名片、票据、银行卡、证件等等,后者指的是开放场景下的商店招牌、logo、交通指示牌(自动驾驶)等等。局限场景内的文字识别目前不少公司还是采用传统的模式识别,辅以深度学习。但是开放场景内的文字识别,却必须要用到深度学习。
传统领域应用
传统领域内的OCR识别基本涉及裁切及图像矫正、文本行定位、文字识别等等。
边缘检测通常用于银行卡、名片、票据、证件等物件识别。比如名片管家等,打开手机应用之后会显示一个框用于框选证件。用户体验好的会自动去寻找边缘,用户体验差的APP,只能将框与被拍的物件重合之后才能进入到识别。
图像预处理
图像定位
用户在用手机拍摄银行卡、证件、名片时,拍摄的图片中不仅包含主体还有背景,背景是噪声,会对识别产生干扰;用户提供的图片中,主体可能是倾斜的。如下图所示,背景是木制的桌面,主体(身份证)是倾斜的。
为了解决这种问题,需要首先对图像进行定位然后做图像矫正。定位主体的算法非常多,比如边缘检测和基于深度学习。
图像定位的技术在计算机视觉领域中应用的非常广泛,人脸识别和物体识别其实都运行了图像定位的技术。
边缘检测法
首先介绍什么是边缘。在数字图像中,边缘是指图像局部变化最显著的部分,边缘主要存在于目标与目标,目标与背景之间,是图像局部特性的不连续性,如灰度的突变、纹理结构的图标、颜色的图标等。尽管图像的边缘点产生的原因各不相同,但他们都是图形上灰度不连续或灰度几句辩护的点,图像边缘分为阶跃状、斜坡状和屋顶状
基于边缘检测的分析不易受整体光照强度变化的影响,同时利用边缘信息容易凸显目标信息和达到简化处理的目的,因此很多图像理解方法都以边缘为基础。边缘检测强调的是图像对比度。对比度从直观上的理解就是差异的大小,若对于灰度图像来说就是灰度值(亮度值)的差别,对于二值化图就是黑盒白的区别,若对于彩色图像则是颜色的差异了。这些差异可以增强图像中的边界特征,因为这些边界就是图像对比度较大的体现。
如果图像主体和背景比较接近,此时边缘检测算法可能会失效。比如将身份证放置于浅色桌面或其它物体上,此时采用边缘检测算法就很难检测到证件边缘进而无法裁切图像导致无法识别。
图像矫正
图像矫正常用的是透视变换,下图左这样的是很难进行识别的,必须换成右图所示才能进行识别。
下图是来自于CSDN Wei_Leng的博客,实际操作中,可能只能够找到图像的3个点,那么根据这三个点是能够确定第4个点的位置,从而进行裁切和透视变换。
其它预处理
二值化:
对摄像头拍摄的图片,大多数是彩色图像,彩色图像所含信息量巨大,对于图片的内容,我们可以简单的分为前景与背景,为了让计算机更快的,更好的识别文字,我们需要先对彩色图进行处理,使图片只前景信息与背景信息,可以简单的定义前景信息为黑色,背景信息为白色,这就是二值化图了
噪声去除:
对于不同的文档,我们对噪声的定义可以不同,根据噪声的特征进行去噪,就叫做噪声去除
版面分析
将文档图片分段落,分行的过程就叫做版面分析,由于实际文档的多样性,复杂性,因此,目前还没有一个固定的,最优的切割模型。比较常见的有行切割和列切割。
字符识别
将切割好的字符交给识别引擎识别。
版面恢复
人们希望识别后的文字,仍然像原文档图片那样排列着,段落不变,位置不变,顺序不变,的输出到word文档,pdf文档等,这一过程就叫做版面恢复。
这一步不是必须的,如果是pdf转文字或者图片转文件,那么需要尽可能的恢复原样。可能某些公文系统或者图书扫描领域会用到。
后处理及校对
根据特定的语言上下文的关系,对识别结果进行较正,就是后处理。
后处理的方式也很多,比如语义、数组、纠正库等等。后处理和校对可以是自动的也可以是辅助的。比如word文档里面的提示,就属于辅助的,需要人工选择。在一些证件识别领域,后处理可以是自动的,比如如果别克牌的车识别成别克掐,那么可以自动校准为别克牌。
语义后处理的方式较为高级
开放场景应用
开放场景OCR识别的两大步骤是文字检测和文字识别。
相比传统领域的文字检测,开放场景下的文字检测面临的挑战更多。人眼可以在强光、弱光条件下找到文字,甚至能够根据周边环境找到可能的文字(模糊情况下),但是机器目前就很难做到这些。此外,开放场景下的文字类型种类非常多,有各国语言、各种字体,甚至还有颜色及其它物体干扰。
文本检测技术
来源于:http://www.cnblogs.com/skyfsm/p/9776611.html
文本检测不是一件简单的任务,尤其是复杂场景下的文本检测,非常具有挑战性。自然场景下的文本检测有如下几个难点:
- 文本存在多种分布,文本排布形式多样;
- 文本存在多个方向;
- 多种语言混合。
交通标志识别
在自动驾驶场景中,交通标志的检测和识别对行车周围环境的理解至关重要。精确的检测对后续识别,辅助定位和导航起着决定性的作用。例如,通过交通标志检测识别限速标志来控制当前车辆的速度;将交通标志嵌入到高精度地图中,对定位导航起到关键的辅助作用等。
交通标志数据集
开发者可以使用德国交通标志识别基准数据集进行训练和测试。如果是在国内进行自动驾驶,那么需要收集国内的交通标志进行训练和测试。CSDN和github上有不少如何用德国交通标识数据集的进行训练的文章或项目。
交通标识识别的难点
交通标志的种类众多,大小、角度不一,本身就很难做到精确检测,并且在真实的行车环境中,拍摄到的交通标志还存在着很多的问题。例如在场景较为复杂的十字路口,存在着很多密集的交通标志,也可能存在很多颜色、形状与交通标志相似的物体,它们会干扰交通标志的精确检测;交通标志的颜色还会受到光照和天气的影响,白天强烈的光照会影响交通标志的检测,夜晚也会受到路灯、车尾灯光反射的影响;拍摄到的交通标志还会受到建筑物、树木、行人等的遮挡;交通标志长期暴露在自然环境下,经受风吹日晒雨淋,与空气中的污染物质发生化学反应,会使交通标志褪色变形。拍摄的图片中存在大量较小的交通标志。如何检测到图片中大量小且密集的交通标志是一个重点,也是一个难点。
参考链接:https://new.qq.com/omn/20180810/20180810A1EZHT00