最近参加了百度Paddle的动手学OCR课程,特此做一个学习总结。
1. 简介
OCR(Optical Character Recognition,光学字符识别)是计算机视觉重要方向,传统的OCR一般面向扫描文档类对象,现在的OCR是指场景文字识别(Scene Text Recogntion,STR)主要面向自然场景。
2. 前沿算法
2.1 文本检测
文本检测是定位出输入图像中的文字区域。可以将文本检测作为目标检测中的一个特定场景,基于通用目标检测算法进行改进适配,如TextBoxes基于SSD算法,CTPN是基于Faster RCNN算法。同时,由于文件检测任务在文本的特殊性,衍生了许多专用的算法,例如,EAST、PSENet,DBNet等。
目前较为流行的文本检测算法可以大致分为基于回归和基于分割的两大类文本检测算法,也有一些算法将二者相结合。基于回归的算法借鉴通用物体检测算法,通过设定anchor回归检测框,或者直接做像素回归,这类方法对规则形状文本检测效果较好,但是对不规则形状的文本检测效果会相对差一些,比如CTPN对水平文本的检测效果较好,但对倾斜、弯曲文本的检测效果较差,SegLink对长文本比较好,但对分布稀疏的文本效果较差;基于分割的算法引入了Mask-RCNN,这类算法在各种场景、对各种形状文本的检测效果都可以达到一个更高的水平,但缺点就是后处理一般会比较复杂,因此常常存在速度问题,并且无法解决重叠文本的检测问题。
2.2 文本识别
文本识别是识别出图像中的文字内容,一般输入是来自文本检测得到的文本框截出的图像文字区域。文本识别一般可以根据识别文本形状分为规则文本识别和不规则文本识别。规则文本主要指印刷字体、扫描文本等,文本大致处在水平线位置;不规则文本往往不在水平位置,存在弯曲、遮挡、模糊等问题。不规则文本场景具有很大的挑战性,也是目前文本识别领域的主要研究方向。
- (1960s-2015):过分割+单字识别
连通域分析 ,寻找潜在的文字切分位置---->切分片段组合+集束搜索
- (2016-2021)文本行识别时代
单个模型识别整个文本行--->基于CTC解码/分割/注意力额编码-解码结构/并行注意力解码(四种方法)
规则文本识别的算法根据解码方式的不同可以大致分为基于CTC和Sequence2Sequence两种,将网络学习到的序列特征 转化为 最终的识别结果 的处理方式不同。基于CTC的算法以经典的CRNN为代表。
不规则文本的识别算法相比更为丰富,如STAR-Net等方法通过加入TPS等矫正模块,将不规则文本矫正为规则的矩形后再进行识别;RARE等基于Attention的方法增强了对序列之间各部分相关性的关注;基于分割的方法将文本行的各字符作为独立个体,相比与对整个文本行做矫正后识别,识别分割出的单个字符更加容易;此外,随着近年来Transfomer的快速发展和在各类任务中的有效性验证,也出现了一批基于Transformer的文本识别算法,这类方法利用transformer结构解决CNN在长依赖建模上的局限性问题,也取得了不错的效果。
2.3 文档结构化识别
有一些应用场景是获取结构化信息,例如身份证、发票的信息抽取,表格的结构化识别等,可以采用OCR结果+后处理的方案。常用场景有
- 版面分析
版面分析(Layout Analysis)主要是对文档图像进行内容分类,类别一般可分为纯文本、标题、表格、图片等。
- 表格识别
表格识别(Table Recognition)的任务就是将文档里的表格信息进行识别和转换到excel文件中。
- 关键信息抽取
关键信息提取(Key Information Extraction,KIE)是Document VQA中的一个重要任务,主要从图像中提取所需要的关键信息,如从身份证中提取出姓名和公民身份号码信息,这类信息的种类往往在特定任务下是固定的,但是在不同任务间是不同的。
关键信息提取通常分为两个子任务进行研究:
- SER: 语义实体识别 (Semantic Entity Recognition),对每一个检测到的文本进行分类,如将其分为姓名,身份证。如下图中的黑色框和红色框。
- RE: 关系抽取 (Relation Extraction),对每一个检测到的文本进行分类,如将其分为问题和的答案。然后对每一个问题找到对应的答案。如下图中的红色框和黑色框分别代表问题和答案,黄色线代表问题和答案之间的对应关系。
3. 细节
3.1. 语种和标注
英文:识别单个字符,共有36个字符
中文:识别单个汉字,有6623个常用汉字
单词校正字典:将识别的结果进行遍历,未在字典中发现,则返回较相近的结果。
3.2. 常见数据集
(1)合成数据集:Synth90k & Synth Text
(2)自然场景数据集:水平文本
(3)自然场景数据集:不规则文本
4. 面临的挑战
- 算法层:
- 应用层
5. 结论
该章节只是初步了解OCR的常见任务、数据集和面临的问题,具体细节在后续博客中更新