之前没有接触过OCR文字识别,本文主要对使用深度学习算法完成文字识别的整体步骤进行一下梳理。
一般来说,OCR文字识别是检测+识别,首先将可能在文字的区域检测出来,然后在进行识别。本质是识别图片中的文字,即在复杂的图片背景下对所需目标文字进行识别提取。
1、文字识别基础步骤
① detection:检测存在文字的区域,得到proposal。
② recognation:识别proposal中的文字。
2、文字区域 detection
对文字存在区域的detection方法,与目标检测领域的常用检测方法相当,分为one-stage和two-stage方法,(后续也可以考虑使用anchor free的方法对文字propsal进行检测)。
(1) 在文字识别领域,常用的two-stage方法为faster rcnn,one-stage方法主要有yolo系列方法。相比之下,前者的精度更好,后者速度更快。
(2)在文字识别领域,与传统目标检测的不同还在于文字的方向、扭曲程度等。
① 对于水平文字的检测。水平文字文本框是规则的四边形(四个自由度),类似于物体检测。水平文字检测效果较好的算法为CPTN:Detecting Text in Natural Image with Connectionist Text Proposal Network, ECCV, 2016。
② 文本框是不规则的四边形,拥有八个自由度,倾斜文字检测较好的算法有cvpr2017提出的EAST和Seglink。一般的检测套路为:检测文本框 --> 采用Radon Hough变换等方法进行文本矫正 --> 通过投影直方图分割单行文本图片 --> 对单行文本进行OCR。
3、文字recognation:classification model,可以对字符进行分割后单独识别,也可以进行序列识别,容易想见的是,序列识别才是真正有意义的。
(1)定长文字,各个字符之间看作是独立的,需事先选定可预测的sequence的最大长度,比较适用于门牌检测或车牌号码检测。典型算法In Goodfellow2013年提出的multi-digit number classification,[1312.6082] Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks。
(2)不定长文字,可以产生任意长度的文字
① CNN+RNN/LSTM/GRU+CTC,CRNN算法描述较清楚 链接 bgshih/crnn
CTC详解: Framewise and CTC Training of Neural Networks for Handwriting Recognition
②引入注意力机制(CNN+RNN+Attention),其中attention可以分为hard attention和soft attention。其中hard attention能够直接给出hard location,通常是bounding box的位置 (https://arxiv.org/pdf/1412.7755.pdf), 想法直观,缺点是不能直接暴力bp。soft attention通常是rnn/lstm/gru encoder-decoder model (https://arxiv.org/abs/1603.03101), 可以暴力bp。
这两种模型均不需要对文字进行预先分割(end-to-end)。
以前的文字识别算法将检测和识别分为两个阶段来训练,现在较火的方向是将文字检测和识别放到一个网络中进行联合训练joint train。ICCV2017文章Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks,在水平文字检测中,将检测和识别进行端到端训练,这个方向会是未来一两年的热点。
4、 文字识别常用数据集:https://blog.csdn.net/u011489887/article/details/79804498
(1)、[英文] ICDAR 2017 Robust Reading Competiton,主页有11年至今的所有竞赛。
[非中文数据集] 参考:https://www.cnblogs.com/lillylin/p/6893500.html
(2)、[中文] CTW data(Chinese Text in the Wild),超大街景图片中文文本数据集,包含 32,285 张图像和 1,018,402 个中文字符。
资源链接:https://ctwdataset.github.io/ 。在相关论文《Chinese Text in the Wild》中,清华大学的研究人员以该数据集为基础训练了多种目前业内最先进的深度模型进行字符识别和字符检测。这些模型将作为基线算法为人们提供测试标准。这些图像源于腾讯街景,从中国的几十个不同城市中捕捉得到,不带任何特定目的的偏好。由于其多样性和复杂性,使得该数据集的收集很困难。它包含了平面文本、凸出文本、城市街景文本、乡镇街景文本、弱照明条件下的文本、远距离文本、部分显示文本等。对于每张图像,数据集中都标注了所有中文字符。对每个中文字符,数据集都标注了其真实字符、边界框和 6 个属性以指出其是否被遮挡、有复杂的背景、被扭曲、3D 凸出、艺术化,和手写体等。
(3)、[中文] 华中科技大学中文数据集 http://www.icdar2017chinese.site:5080/dataset/
icdar2017比赛结果分析https://blog.csdn.net/rabbithui/article/details/79107208
(4)、[中文] ICPR WTMI2018中文数据集(天池比赛数据集)
https://tianchi.aliyun.com/competition/entrance/231685/information
(5)、[中文] ICDAR2019 数据集 http://rrc.cvc.uab.es/?ch=12
5、文字识别模型资源
https://github.com/bear63/sceneReco
Crnn中文end-to-end识别 : http://blog.csdn.net/u01329375
6、当前图像文本检测和识别领域研究热点
白纸黑字的扫描文档识别技术已经很成熟;
自然场景图像文本识别效果不是很理想。倾斜字、艺术字、变形字、模糊字、形似字、残缺字、光影遮蔽、多语言混合文本等应用落地面临的技术难题还没被彻底解决。
(本图摘自新浪微博《光学字符识别技术:让电脑像人一样阅读》)
7、OCR(Optical Charactor Recognition)文字识别和STR(Scene Text Rcognition)场景文字识别
当前较多的认为OCR文字识别泛指所有的图像文字检测和识别技术,包括传统的OCR文档图像分析和场景文字识别技术。场景文字识别技术可以看作传统OCR技术的自然演进与升级换代。
传统解决方案:分别训练文字检测和文本识别两个模型,然后再服务实施阶段将这两个模型串联到数据流水线中组成文字识别系统。
当前流行的技术解决方案:用一个多目标网络训练出一个端到端模型。
(1)训练阶段
模型输入:训练图像、图像中文本座标、文本内容;
模型优化目标:输出端文本边框座标预测误差,文本内容预测误差,二者加权和。
(2)服务实施阶段(测试)
原始图片流经训练好的端到端模型,直接输出预测文本信息。
总结:文本检测和识别是CV和NLP两个领域的交叉,即需要使用CV技术来提取图像中文字区域的图像特征向量,也需要借助NLP技术来解码图像特征向量为文字结果。
参考文章: