目录
2.2 字符切分(Character segmentation)
2.3 字符识别(Character recognition)
一、问题简介
OCR即光学字符识别(Optical Character Recognition),是指通过光学仪器将纸质材料中的文字抽象成黑白点矩阵的形式存入计算机中,再通过软件处理将文字识别出来,并转换成计算机中字符格式的过程。
而图片文字识别(Photo OCR),是指从给定的图片中识别出文字完成OCR的过程。与一般的文档识别相比,文字在图片中的位置,大小和明暗程度等都很不同,所以更难处理。
二、实现方案
当遇到一个工程问题时,如何将问题进行分解,设计合理的流水线(pipline)将决定整个工程的实现效果和效率。
图片文字识别问题一般可分为三个步骤解决即:文字检测,字符切分和字符识别。在某些系统中还会有拼写纠错的步骤,但这里不加以讨论。
在具体工程实践中,可将每个步骤分别安排于一个团队去完成。接下来分别讨论这三个步骤。
2.1 文字检测(Text detection)
文字检测即为将图片中的有文字的区域全部识别出来。需要注意的是,此时只是识别出了有文字的区域。
这里应用滑动窗口(Sliding Windows)技术,该技术是计算机视觉中用于检测物体的对象的方法,顺便说一句,计算机网络和操作系统中也有同名的概念,注意区分。
其核心思想是:①用固定大小的图片训练集去训练一个分类器,用于判别固定大小的图片中是否有需要识别的对象。②使用不同大小的窗口,在需要进行识别的图片中进行全局搜索,③将搜索出的窗口统一调整到指定大小,再交由分类器判别是否有对象,并对有对象的区域在原图中进行标记。
分类器可由之前学过的逻辑回归,神经网络,SVM等算法构造,现在比较流行的应该是卷积神经网络CNN。训练数据即为标记是否有字符的图片。
在图片OCR问题中,其效果可如图18-3左下所示,其中各个像素的明暗程度即为其可能包含字符的概率,越亮表明可能性越大。在具体应用中还需要用到放大算子(expansion operator),将可能性大的像素周围像素的可能性扩大,使得一些区域联通;同时还需要进行一定程度的剪枝,例如去掉或断开一些不可能的形状的连接块,最终达到右侧效果。
2.2 字符切分(Character segmentation)
字符切分即为将已图片中字词按单个字符为单位划分出来。
这里采用的实现方法依然是滑动窗口,只是由于之前的工作,这里只需要进行一维的窗口滑动,即左右滑动即可。相应的,分类器的训练数据也是有标记的图片,只是分类器的目标是识别出需要断开图片进行分割的位置,图片的标记是是否需要继续分割。具体如图18-3。
2.3 字符识别(Character recognition)
字符识别即为将图片中的内容识别为具体的字符。这是一个简单的多分类问题,只需要训练一个精确的多分类的分类器即可。
通过以上模块,即可等等一个完整的图片OCR系统。
三、工程经验
3.1 获取数据
在实际工程中常需要考虑,如何得到足够多的数据?之前讨论过,如果通过学习曲线发现模型是低方差的,则获得更多的数据对模型更加有利。
总的来说,数据的获取方法可分为三类:
1. 手动收集并标记。即为自己去收集真实存在的数据,并手动贴上标记。一般而言用问卷调查,走访和做实验等形式。在OCR问题中,可以去各种字体网站下载不同的字体,再抽选一些图片,将文字随机的嵌入到图片中作为新样本。
2.人工合成数据。即在已有的数据上进行微调,最终得到同标签但内容有所变换的数据。这种数据增强方法在图像处理中经常被使用,如图18-6所示。在本例中,也可改变已有图片的色彩,亮度等方式构造新数据。
3.众包。简单说就是花钱请一些专门收集和标记数据的公司购买一些数据。
3.2 上限分析
本章强调了流水线的概念,在很多工程实践中,都会将任务划分成几个模块,并分别实现。那么哪一个模块最值得重视和花费精力去改善就是一个很重要的问题。这里介绍两个衡量的标准,分别从性能和准确率上进行衡量。
Amdahl定理(Amdahl's law)是计算领域的先锋Gene Amdahl在观察计算机系统中提升某一部分性能对总体所带来的效果后所总结出来的。其核心思想可公式化为:
(公式18.1)
(公式18.2)
其中 α是指某模块的运行时间在整体系统运算时间的占比,k为该模块改进后性能提升的比值。假设一个模块在整体运行时间中的占比60%,形状将其性能提升了3倍,带入公式可计算出S=1.67,即最终性能提升为原来的1.67倍。
上限分析(Ceiling Analysis)是对准确率改进的重要性的衡量,即假设某模块及之前模块均100%正确,则系统整体性能提升多少?
如图所示,假设目前整个系统的准确率为72%。
若目前拥有一个100%准确的文字检测模块(人工实现),则整体准确率提升17%。
若再拥有一个100%准确的字符切分模块(人工实现),则会在原先的基础上整体准确率提升1%。
若再拥有一个100%准确的字符模块(人工实现),则会在原先的基础上整体准确率提升10%。
由以上结果可知,该情况下应该重点完善文字检测模块。
四、总结
本章的具体内容有。
- 介绍了图片文字识别系统,并介绍了一种实现方案。
- 介绍了流水线的概念,并引入了两种性能的分析方法。
(注:本章大部分图片来自吴恩达机器学习课程第十八章,侵删。)