提到文本检测与识别,大家可能会立即联想到 OCR (Optical Character Recognition,光学字符识别),即对输入的扫描文档图像进行分析处理,识别出图像中的文本信息。随着智能手机的普及,文本检测与识别被更多地应用在自然场景下,甚至在近几年诞生了诸如下图这样的拍照搜题的应用 (妈妈再也不用担心我的学习了!)。在自然场景下,文本识别的难度比传统的 OCR 要大很多,因为自然场景下的文本更加复杂,主要体现在:
OCR 一般假设图片几乎都由文本构成,而自然场景中文本往往只占整幅图片的一小部分;
字符的大小,字体,颜色都有可能不同,而且多种语言还可以混合;
文本排版的样式比较多,可以是横向、竖向、弯曲或者旋转;
自然场景下图像的背景比较复杂,会出现和文本比较相似的纹理,比如栅栏,草丛,砖墙。

为了能够识别自然场景图片里的文本,一方面我们要知道文本在图片的哪个部分,也就是文本检测,另一方面当我们知道哪里有文本后,需要知道这些文本是什么,也就是文本识别。今天我们主要介绍如何在自然场景下去做文本检测。
1. 基于物体检测的方法
文本检测可以划入物体检测的范畴,所以我们可以用物体检测的方法去做文本检测。从图像分类的角度看,物体检测就是在图像上枚举不同大小不同位置,用滑动窗的方式去判断每个位置是否有某个物体,如下图所示。

物体检测经典的网络结构之一为 SSD (Single Shot MultiBox Detector) ,基于这个想法,对于图像中的每个位置,预先设定了一些锚窗口 (Anchor),这些窗口有不同的大小和长宽比,然后对这些窗口里的内容进行分类,从而完成物体检测的任务。值得注意得是,为了检测不同尺度的物体,SSD 在不同尺度的特征层上做了对应尺度的检测,如下图所示。

在 SSD 的基础上,TextBoxes: A Fast Text Detector with a Single Deep Neural Network [1] 的作者提出了 TextBoxes,网络结构如下图所示。考虑到文本行一般为水平方向,而且长度变化比较大,所以作者将原有的最大宽高比由 1:2 增加到了 1:10,而且把方形的卷积核改为矩形去适应文本的这个特性。

TextBoxes 提出的方法只能用于检测水平文本,无法检测有倾斜方向的文本。这个缺陷被 Arbitrary-oriented scene text detection via rotation proposals [3] 所提出的 RRPN 方法所改进。RRPN 基于两阶段的物体检测方法 Faster R-CNN,作者提出了 Rotate RPN(RRPN) 和 Rotate ROI Pooling 去检测倾斜的文本。在原来的 RPN 中,锚窗口都是和轴对齐的矩形,所以对于每个锚窗口,作者又添加了 6 个旋转角度,去检测倾斜方向不同的文本,同时也修改了锚窗口的宽高比,如下图所示。由于这时候的侯选框是倾斜的,所以作者也修改了原来的 ROI Pooling,把大小,倾斜角度不同的候选框对应的特征映射到相同的尺寸。相比于原来的 Faster R-CNN,由于考虑了倾斜文本的情况,正样本的锚窗口不仅要考虑传统检测框架中与标注文本的大小与位置,还需考虑了它们倾斜角度的匹配。

2. 基于几何变换的方法
由于在自然场景下,大部分文本都可以划入仿射变换的范畴,也就是可以通过平移,旋转和尺度变化去得到,所以在 Geometry-aware scene text detection with instance transformation network (ITN) [6] 中,对于一个文本,作者从常规的采样点出发,即下图中的黄色点,去学习和真实文本对应的采样点,即下图中的蓝色点的仿射变换。作者通过最小二乘法去计算黄色点到蓝色点仿射变换的真值,通过有监督的方式显示地学习它们之间的变换,把文本检测转化为仿射变换参数的学习。但是对于不同尺度的文本,文中却使用了相同大小的采样点,使用神经网络强行去拟合,这点有待改进。

3. 基于子文本块的方法
尽管文本可以认为是通用物体的一个特例,但是文本也有它的特别之处,即很强的局部性 (Locality),比如我们用手遮住只观察一行文字的一部分,虽然我们可能已经无法读出原文的内容,但仍有很大的概率我们知道这是文字的一部分。这给我们提供了一个检测文本的新思路: 先检测子文本块,然后把多个子文本块聚合在一起形成一个完整的文本。
在Detecting text in natural image with connectionist text proposal network (CTPN) [7] 中,作者把水平的文本块看成是由宽度固定的小矩形框构成,如下图所示,然后使用 RPN 去预测小矩形框竖直方向上的位置和高度。同时考虑到图片中书写的文本是一维的,所以使用了双向的 LSTM 去对这种结构建模。在获得这些小矩形框后,通过比较它们水平方向的距离和竖直方向上的重叠度,把它们聚合起来得到一个完整的文本。

在检测倾斜的文本方面,Detecting oriented text in natural images by linking segments (SegLink) [9] 的作者提出了基于子文本块的解决方法。 在 SegLink 中,对于一个特定尺度的特征层,从对应大小的默认框开始,去预测组成文本的带有倾斜角度的子文本块 (Segment) 以及和 8 邻域内的子文本块的层内连接关系 (Within-Layer Links)。考虑到一个文本块的不同子文本块可能在不同尺度的特征层被检测到,所以对于相邻的两个不同尺度的特征层检测到的子文本块,也预测它们之间的跨层连接关系 (Cross-Layer Links),这两种不同的连接关系如下图所示。当得到预测的子文本块以及它们之间的连接关系后,使用不同的阈值过滤掉其中错误的部分,然后将子文本块和连接关系分别看作图 (Graph) 的节点 (Node) 和边 (Edge),使用深度优先搜索 (DFS) 获得构成一个文本的不同子文本块,然后再后处理得到对应的文本矩形框。

4. 基于分割的方法
设想我们如果知道一幅图中每一个像素是否属于文字,那么根据这个信息,可以容易得出文本的整体位置信息。PixelLink: Detecting Scene Text via Instance Segmentation (PixelLink) [10] 的作者就利用了该思想,通过语义分割去预测某个像素是否属于一个文本,同时也预测当前像素和 8 邻域内的像素的连接关系,判断它们是否属于同一个文本,通过这样的方式将不同的文本区分开来。当得到属于文本的像素,以及像素间的连接关系后,就可以得到属于一个文本的所有像素,然后使用 OpenCV 的 minAreaRect 函数得到对应的文本矩形框。PixelLink 完整的流程如下图所示。

上述提到的一些改进方法并非完全互斥,很多技巧可以结合使用,并可以结合具体应用的计算资源限制,选择合适的方法。另外,在文本检测任务中,原始的标注信息一般是矩形框或者四边形,对于上面介绍的方法,由于检测的出发点不同,大多需要对原本的标注信息进行修改以满足需求,这也是这些方法很有意思的一个方面。
相信随着标注数据的增加和模型结构的改进,文本检测及识别任务会快速走向成熟,广泛应用到大家的生活中。2019 年,许下心愿,希望出现比拍照搜题更加激动人心的应用!

参考文献
[1] Liao, Minghui, et al. "TextBoxes: A Fast Text Detector with a Single Deep Neural Network." AAAI 2017.
[2] Liu, Wei, et al. "Ssd: Single shot multibox detector." European conference on computer vision. Springer, Cham, 2016.
[3] Ma, Jianqi, et al. "Arbitrary-oriented scene text detection via rotation proposals." IEEE Transactions on Multimedia (2018).
[4] Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." Advances in neural information processing systems. 2015.
[5] Girshick, Ross. "Fast R-CNN." Proceedings of the IEEE international conference on computer vision. 2015.
[6] Wang, Fangfang, et al. "Geometry-aware scene text detection with instance transformation network." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.
[7] Tian, Zhi, et al. "Detecting text in natural image with connectionist text proposal network." European conference on computer vision. Springer, Cham, 2016.
[8] Hochreiter, Sepp, and Jürgen Schmidhuber. "Long short-term memory." Neural computation 9.8 (1997): 1735-1780.
[9] Shi, Baoguang, Xiang Bai, and Serge Belongie. "Detecting oriented text in natural images by linking segments." arXiv preprint arXiv:1703.06520 (2017).
[10] Deng, Dan, et al. "PixelLink: Detecting Scene Text via Instance Segmentation." arXiv preprint arXiv:1801.01315(2018).
• end •
招人啦
前面都是前言,这里才是正文!
我们是一个来自牛津大学、哥伦比亚大学、UIUC、北京大学等的团队.我们刚诞生不久,每一个毛孔都是新的,等着和你一起来建设.
技术产品总监
希望你有在知名互联网/软件公司有带领技术团队完成产品开发的经验,能够有兴趣和我们一起设计AI落地的产品,切实提高行业效率.
机器学习工程师
希望你对机器学习有热情有基础,对算法原理而不仅仅是调用库有所了解,希望真正作出有用的AI产品.
简历投递邮箱:hr@metasota.ai


