您当前的位置: 首页 > 

阿里云云栖号

暂无认证

  • 0浏览

    0关注

    5305博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

这款神秘的移动端OCR引擎,如何做到“所见即所得”?

阿里云云栖号 发布时间:2019-04-03 10:54:32 ,浏览量:0

阿里妹导读:随着深度学习,尤其是CNN和RNN等技术的飞速发展,文字识别技术(OCR)近几年得到了迅速的提升。与此同时,在智能化终端的大趋势下,本地化智能识别凭借更高效快捷的体验以及高度的隐私保护和零流量消耗等优势备受瞩目和亲睐,越来越多的应用算法开始倾向终端化完成,OCR也不例外。接下来,蚂蚁金服的算法专家亦弦为我们剖析这个轻量而精准的移动端OCR引擎——xNN-OCR。

背景及概述

移动端OCR的优势

受算法效率和算法模型大小的限制和约束,目前大部分的OCR端上应用都是上传图片到服务端识别再将识别结果回传到客户端。虽然满足了部分业务需求,但一方面,对一些实效性要求较高的业务场景来说用户体验无疑是一个巨大的损失,尤其是弱网环境下。另一方面,在面临大促业务并发请求量过大的情况下,服务端不得不采用降级方案,而如果端上也具备识别能力的话,便可以极大地减少服务端的压力。此外,涉及到身份证、银行卡等重要私人证件采用OCR进行信息提取的时候,端上“识完即焚”这种方式,对这种敏感数据和隐私保护来说是天然的堡垒。因此,具备终端OCR识别能力有着极其重要的业务价值和意义。

移动端OCR的难点

OCR采用深度学习技术使得识别精度在特定的场景下面有了一定的保障,但模型大小和速度问题在端上依然是一大难题。目前大部分的后台OCR模型通常几十M或者上百M,可能比整个App安装包都要大,是不可能直接放到移动端的,而如果走实时下载的办法,模型过大也会造成下载失败率高、等待时间长、App占用空间大、流量消耗大等问题。另外,现在很多OCR算法在云端GPU上运行尚且需要几十到上百毫秒,要在手机CPU上保持较高的运行效率是一个极大的挑战。

我们做了什么?——xNN-OCR

xNN-OCR是专门针对移动端本地识别研发的的高精度、高效率、轻体量文字识别引擎,目前支持场景数字、场景英文、场景汉字以及特殊符号的识别。xNN-OCR针对移动端开发和优化了一套基于深度学习的文字检测和文字行识别算法框架,结合xNN的网络压缩和加速能力,检测和识别模型可以压缩到数百K级别,在中端及以上手机CPU上达到实时(最高15FPS),可结合“扫一扫”的模式在视频流中做到所见即所得。

移动端OCR识别技术

移动端OCR技术主要分为二个方面,一是OCR算法框架的研究和优化,主要目标是探索高精度且轻量级的检测和识别框架,确保在压缩之前模型的大小和速度在一个适当的范围以内,二是利用xNN对模型进行剪枝和量化压缩到实际应用需要的大小。下图是我们以银行卡检测和识别模型为例子展示整个压缩流程精度和模型的变化,其他OCR场景识别均是类似流程。

银行卡检测/识别模型压缩

轻量级OCR算法框架的探索

目前大部分的移动端OCR技术都是以传统算法为主,在复杂自然场景下识别率相对较低,而基于深度学习的方案可以很好的解决这一类问题,识别率和稳定性远超传统算法。目前主流的深度学习OCR主要分为文字行检测和行识别两大块,下面我们分别介绍下:

文字行检测

在检测方面,我们将物体检测的Region-CNN框架与FCN的图像分割框架融合在一起,保留了FCN的简单框架以适应端上对模型尺寸和预测时间的要求,同时又在模型中加入了目标检测的位置回归模块,实现了对任意形状文本的检测能力。在基于FCN的整体框架中,为了在精简模型的同时不降低检测效果,我们采用了各种模型精简结构(例如Separable Convolution、Group Convolution + Channel Shuffle等,如下图),模型的尺寸虽然不断减小,精度并未随之下降,在满足端上对模型的苛刻限制的同时取得了较好的检测效果。

Group Convolution + Channel Shuffle

文字行识别

在识别方面,我们在CRNN(CNN+LSTM+CTC)框架基础上进行了优化改进,在Densenet的基础上结合Multiscale Feature、Channel-wise Attention等技术设计出了一套专门用于移动端文字行识别的轻量级CNN网络,同时对LSTM内部参数采用Project技术、全连接层采用SVD、BTD等降维技术进一步减少参数数量(如下图),在ICDAR2013数据集(NOFINETUNE)上,模型大小下降约50%的前提下识别率高出CRNN近4个点,这一改进优化点为上端打下了强有力的基础。

LSTM Projection

xNN模型压缩

目前我们的OCR算法模型都是基于tensorflow开发的,xNN已经增加了对TFLite模型的支持,并且在性能上已经远超TFLite。xNN对于我们OCR算法的模型压缩比在10-20倍之间,不同的场景稍微有些区别,与此同时,压缩后模型的精度基本保持不变。由于OCR是一个较复杂的识别任务,算法模型通常都非常大,并且目前大部分的后台OCR算法都是在GPU上运行,要想在端上运行,除了需要在算法层次上做很多优化外,更需要xNN强大的模型压缩和加速能力。

移动端OCR应用

OCR技术是信息提取和场景理解极其重要的技术手段之一,应用领域非常广泛。目前移动端本地OCR应用从技术角度可以分为2大类,一类是印刷体文字识别,主要是针对字体变化不大、背景单一的场景,例如身份证识别、名片识别、车牌识别等等,另一类是场景类文字识别,主要是针对字体变化大且背景复杂的场景,例如银行卡识别、燃气表/水表识别、门头名识别、场景英文识别(AR翻译)等等,这两类场景中后者识别难度较大,面临的挑战性更多。我们将xNN-OCR用于这些场景并根据场景的特点做了各种优化,取得了一系列的成果,特别是在复杂环境下面识别依然可以保持高效和精准,具体的数据如下表。下面简介了几个比较重要和常见的应用场景。

OCR部分业务场景数据指标

  • 银行卡识别:银行卡识别是金融类行业非常重要的一项技术,是场景数字类识别的一个典型代表。目前大部分银行卡识别均是采用端上识别的方案,因为端上识别不仅能带来更好更快的体验,同时由于不需要数据上传也能一定程度保护用户的隐私数据。基于xNN-OCR开发的银行卡识别在中端手机上耗时
关注
打赏
1664438436
查看更多评论
立即登录/注册

微信扫码登录

0.0650s