移动端OCR文字识别框架设计
1. 简介
文字识别是研发人员研究的热点问题,应用广泛。近年来越来越完善的算法被提出,基于深度学习的方案,已经能够帮助大家较好的识别自然场景。但是在一些场合,我们需要识别特定文字,通过算法的优化与技巧,能够帮助我们降低算法的复杂度,将算法应用于移动端。
目前基于深度学习的方法,存在模型大,速度慢,内存占用高。移动端文字识别,大多采用将图片传输到服务器进行识别,获取返回的结果。自然场景的文字识别,泛华能力强,但是很多时候,对于特定的场景的文字识别,例如身份证识别,驾照,护照,发票等,有些大材小用的感觉。这里我们主要考虑将识别算法放进移动平台。近期智云视图也会开源一套移动端文字识别框架。
2. 相关工作
首先我们回顾一些文字识别的主要步骤与主流方法。传统的文字识别,通常对输入图片,进行预处理,包括亮度,对比度等。然后进行文字检测,接下来进行文字分割,对分割出来的文字逐一分类识别。传统方式的算法,对文字的分割方法要求较高,如果文字分布不规范,增加分割难度,很多时候导致识别不准确。
目前主流的算法大多基于深度学习,通过神经网络对图片中的文字进行定位,然后利用ctc loss端到端的进行识别。这种方式首先提高了定位的精度,另外由于不需要对文字进行分割,直接识别定位的文字,能够提高算法的适应性。
近几年提出的较好的定位算法包括:CTPN,TextBoxes, pixel-anchor, PSENET 等等。CTPN算法的提出,对后续研究帮助很大,但是算法计算量较大;TextBoxes采用SSD思想,速度快,文字定位不够精确,anchor的尺寸选择是一个难点。 PSENET算法效果不错,同样存在模型大的问题,可以考虑将主干网络修改为小型网络进行训练,降低计算量。
识别算法包括CRNN,CNN-LSTM,DenseNet-CTC等等,在开源的识别框架中,受限于数据的种类,通常算法在识别白底黑字文字效果不错,但是在识别反色图像,如黑底白字,蓝底白字等,效果不理想。我们一方片可以通过丰富数据进行提升,另外可以利用彩色图片进行训练,而不是采用灰度图像。
3. 我们的框架
我们最近设计了一款移动端基于特定模板的文字识别框架。对于移动端的文字识别应用,通常场景固定,不是对自然场景识别,另外识别文字较为固定,这些条件为我们进行准确率的优化与算法的加速提供了提升的途径。
这里我们以身份证、发票为例,简要概述一下我们的框架。
对于这种身份证样例,我们首先对输入图片进行定位,找到合适的四边形,进行定位校准。
因为身份证中,姓名、性别、住址等文字信息是固定的,使用者可以在使用之前,对模板进行标定,将固定文字部分框出来,这部分信息作为我们定位的辅助信息,然后我们利用改进的SSD算法进行文字定位,与辅助信息进行匹配,确定真实文字位置,最后将定位出来的文字送到识别网络,识别网络采用小型的分类网络,保证速度。同时,我们的文字识别,训练常用的一级字库中3700多个中文,确保算法在绝大多数的情况下可用。增加可识别文字数目也是可以的,但是有时会导致模型计算量的提升。
4. 后记
近期我们将该框架完善后,会开放出来与大家共享,同时欢迎大家能够帮助我们一起完善这个框架。