ocr识别技术哪家好;什么是 OCR 技 术,有哪些好用的 OCR 软 件推荐?( 四 )


下面介绍基于传统OCR框架处理身份证文字识别:
身份证识别技术流程与上述框架稍微有所差异 。对该问题,已知先验信息:a.证件长宽固定;b.字体及大小一致;c.文本相对于证件位置固定;d.存在固定文字 。因此,处理该问题的思路为:先定位目标物体(证件),矫正后提取文字进行识别,最后进行语义纠错,如下图:
目标物体定位并矫正 。基于现有的先验信息,定位最后的方法为采用模板关键点特征匹配的方法,并利用模板上特征点及目标图像特征点坐标之间的关系进行透视变换,以定位目标物体,如下图所示 。接着,基于四角的坐标,进行旋转、仿射、尺寸的变换,并提取出目标物体的俯视图 。
因文字位置相对固定,接着便分割出文字区域,二值化后,行列分割出单个字符 。这里的技术难点在于二值化,二值化效果的好坏直接影响字符分割,并最终影响识别结果 。受光照和拍摄质量的影响,全局二值化难以设置统一的阈值,而自适应二值化算法易受到阴影及模糊边界的干扰 。所以在这边尝试过许多方法,测试下来未发现在任何情形下效果都满足要求的方法 。
分割出单字后接着用分类器进行识别,并在这步基于统计上的先验信息定义了一个简单的优化函数,可看做1-gram语言模型 。先验信息为:2400(总共660273)汉字的使用频率之和为99%以上 。定义的优化函数为:
式中,Pi为该字出现的概率,confi为置信度值 。
下图给出了示例:
因上述的优化过程中假定各状态相互独立并与上一状态没有联系,故不可避免存在语义上的错误 。而如何基于现有的输出序列,对序列进行语义上的修正,那么最直观的想法就是用隐马尔可夫模型(Hidden Markov Model,HMM)解决这个问题,其基于观察序列,求出最优隐序列 。其可以抽象为如下图的过程 。在给定O序列情况下,通过维特比算法,找出最优序列S:
传统OCR冗长的处理流程以及大量人工规则的存在,使得每步的错误不断累积,而使得最终识别结果难以满足实际需求 。接下来讨论基于深度学习的OCR 。
基于深度学习的OCR识别框架
目前,从技术流程上来说,主要分为两步,首先是检测出图像中的文本行,接着进行序列识别 。可见,基于深度学习的OCR识别框架相比于传统OCR识别框架,减少了三个步骤,降低了因误差累积对最终识别结果的影响 。
文本行检测,其又可分为水平行文字检测算法与倾斜文字行检测算法 。这里主要介绍下Tian提出算法CTPN,其算法框架如下图 。主要思路是将文本行识别看做一个序列识别问题,不同于一般的目标检测问题,引入RNN来利用上下文的信息 。
具体流程为:
用VGG16的5个卷积层得到特征图(feature map,W*H*C);
在Conv5的feature map的每个位置上取3*3*C的窗口的特征,这些特征将用于预测该位置k个anchor(anchor的定义和Faster RCNN类似)对应的类别信息,位置信息;
将每一行的所有窗口对应的3*3*C的特征(W*3*3*C)输入到RNN(BLSTM)中,得到W*256的输出;
将RNN的W*256输入到512维的fc层;
fc层特征输入到三个分类或者回归层中 。第二个2k scores 表示的是k个anchor的类别信息(是字符或不是字符) 。第一个2k vertical coordinate和第三个k side-refinement是用来回归k个anchor的位置信息 。2k vertical coordinate表示的是bounding box的高度和中心的y轴坐标(可以决定上下边界),k个side-refinement表示的bounding box的水平平移量 。这边注意,只用了3个参数表示回归的bounding box,因为这里默认了每个anchor的width是16,且不再变化(VGG16的conv5的stride是16) 。回归出来的box如Fig.1中那些红色的细长矩形,它们的宽度是一定的;
用简单的文本线构造算法,把分类得到的文字的proposal(图Fig.1(b)中的细长的矩形)合并成文本线 。
上图为给出基于CTPN的例子,框线部分是算法识别出的文字行,可见在图片光照不均、人工合成及文字背景对比不明显的情形下均有很好的效果 。相比于传统文字定位方法,具有更好的鲁棒性及明显的优势 。
文字行识别 。近两年比较受关注的主要有两种,一种是CNN+RNN+CTC的方法,另外一种是用attention model+CNN+RNN的方法 。这里主要介绍下CNN+RNN+CTC,算法框架由图给出 。分为三层,CNN层、RNN层及解码(transcription)层 。在CNN层,用于提取图像特征,利用Map-to-Sequence表示成特征向量;在RNN层,用双向LSTM识别特征向量,得到每列特征的概率分布;在解码层,利用CTC和前向后向算法求解最优的label序列 。因此,该方法能够识别不定长的文字行 。


推荐阅读