OCR的应用场景
根据识别场景,可大致将OCR分为识别特定场景的专用OCR和识别多种场景的通用OCR。比如现今方兴未艾的证件识别和车牌识别就是专用OCR的典型实例。通用OCR可以用于更复杂的场景,也具有更大的应用潜力。但由于通用图片的场景不固定,文字布局多样,因此难度更高。根据所识别图片的内容,可将场景分为清晰且具有固定模式的简单场景和更为复杂的自然场景。自然场景文本识别的难度极高,原因包括:图片背景极为丰富,经常面临低亮度、低对比度、光照不均、透视变形和残缺遮挡等问题,而且文本的布局可能存在扭曲、褶皱、换向等问题,其中的文字也可能字体多样、字号字重颜色不一的问题。因此自然场景中的文字识别技术,也经常被单列为场景文字识别技术(Scene Text Recognition, STR),相关内容可回顾往期SigAI的文章。
OCR的技术路线
典型的OCR的技术路线 所示:
其中影响识别准确率的技术瓶颈是文字检测和文本识别,而这两部分也是OCR技术的重中之重。
在传统OCR技术中,图像预处理通常是针对图像的成像问题进行修正。常见的预处理过程包括:几何变换(透视、扭曲、旋转等)、畸变校正、去除模煳、图像增强和光线校正等
文字检测即检测文本的所在位置和范围及其布局。通常也包括版面分析和文字行检测等。文字检测主要解决的问题是哪里有文字,文字的范围有多大。
文本识别是在文本检测的基础上,对文本内容进行识别,将图像中的文本信息转化为文本信息。文字识别主要解决的问题是每个文字是什么。识别出的文本通常需要再次核对以保证其正确性。文本校正也被认为属于这一环节。而其中当识别的内容是由词库中的词汇组成时,我们称作有词典识别(Lexicon-based),反之称作无词典识别(Lexicon-free)
图像预处理
传统OCR基于数字图像处理和传统机器学习等方法对图像进行处理和特征提取。常用的二值化处理有利于增强简单场景的文本信息,但对于复杂背景二值化的收效甚微。
传统方法上采用HoG对图像进行特征提取,然而HoG对于图像模煳、扭曲等问题鲁棒性很差,对于复杂场景泛化能力不佳。由于深度学习的飞速发展,现在普遍使用基于CNN的神经网络作为特征提取手段。得益于CNN强大的学习能力,配合大量的数据可以增强特征提取的鲁棒性,面临模煳、扭曲、畸变、复杂背景和光线不清等图像问题均可以表现良好的鲁棒性。[1]
基于CNN(LeNet-5)的文字识别[1]
文字检测
对于文字检测任务,很自然地可以想到套用图像检测的方法来框选出图像中的文本区域。常见的一些物体检测方法:
Faster R-CNNFaster R-CNN采用辅助生成样本的RPN(Region Proposal Networks)网络,将算法结构分为两个部分,先由RPN 网络判断候选框是否为目标,再经分类定位的多任务损失判断目标类型,整个网络流程都能共享卷积神经网络提取的的特征信息,节约计算成本,且解决Fast R-CNN 算法生成正负样本候选框速度慢的问题,同时避免候选框提取过多导致算法准确率下降。对于受限场景的文字检测,Faster R-CNN的表现较为出色。可以通过多次检测确定不同粒度的文本区域。[2]
Faster R-CNN的网络结构[2]
FCN相较于Faster R-CNN 算法只能计算ROI pooling 层之前的卷积网络特征参数,R-FCN 算法提出一种位置敏感分布的卷积网络代替ROI pooling 层之后的全连接网络,解决了Faster R-CNN 由于ROI Pooling 层后面的结构需要对每一个样本区域跑一次而耗时比较大的问题,使得特征共享在整个网络内得以实现,解决物体分类要求有平移不变性和物体检测要求有平移变化的矛盾,但是没有考虑到候选区域的全局信息和语义信息。[3]所以当面对自然场景的通用OCR,适于多尺度检测的FCN较之Faster R-CNN有着更好的表现。当采用FCN时,输出的掩膜可以作为前景文字的二值图像进行输出。