查看原文
其他

OCR技术在爱奇艺的应用实践及演进

随着人工智能的热度上升,图像识别这一细分领域也渐渐被人们所关注。在很多公司的业务中,有很多需要对图片进行识别的需求。为了帮助业务实现对这些图片、文档的识别和结构化,业界进行了一系列的实践和探索,最终确定了一些可行的方法,总结了在实践过程中可能遇到的问题和难点。
为了更好地了解OCR技术在爱奇艺的应用实践,最近,InfoQ“大咖说”栏目邀请爱奇艺智能平台部助理研究员——Harlon 进行了一场直播分享,结合目前的业务需求,为我们陈述了爱奇艺在探索OCR技术发展过程中遇到的痛点和难点,以及识别技术的一些细节,以下是采访实录。

嘉宾:Harlon
InfoQ:您好,非常开心有机会采访您,您方便简单介绍下过去几年 OCR 技术的整体发展吗?大致可以从哪几个维度来看? Harlon:随着互联网的发展和智能设备的普及,图像以及视频的产生速度大大加快,图像文字中包含的丰富的语义信息,也在人机交互中扮演着重要角色,从图像中提取文字的技术,也就是 OCR 技术得到了越来越多的关注。随着深度学习的发展,OCR 技术从基于传统的图像处理和机器学习转到了以深度学习为主,其主要包含如下两个步骤:
一是文字检测,用于检测图像中的文字位置,一般以矩形或四边形来表示,区别于常规的物体检测,文本行具有长短不一、长宽比例范围大,而且方向性较强的特点,也较易受到复杂背景的影响;二是文字识别,输入是文本检测得到的文本行图像,输出为图像对应的文本信息。传统的文字识别方法可以分为字符分割和单字符识别两个步骤,现在的文本识别算法大都是基于序列到序列的网络,一个网络里面可以同时进行分割和识别,这样做的好处是大大减少了数据标注量。另外,由于同时训练分割和识别算法,算法性能也得到了大幅提升,我们可以从以下几个方面来看 OCR 技术的发展:
首先是文字检测部分,借鉴物体检测技术的发展,文字检测技术也从检测单行、较规则的文字发展到了检测任意方向文本,典型算法包括:CTPN、EAST、PMTD、DB 等;文字检测的方法主要分为基于检测框和基于 Mask 两个大类,基于检测框的文本检测,其思路是先利用若干 Anchor 产生大量候选文本框,再经过 NMS 得到最终结果;基于 Mask 的文本检测,其思路是通过分割网络进行像素级别的语义分割,再通过后处理得到文本框,由于后处理比较复杂,这个步骤会直接影响基于 Mask 文本检测算法的性能。
其次是文字识别,主要有两类方法:一种是基于 CTC 的 CRNN;另一种是基于注意力机制的编码器 - 解码器结构,两类方法的流程非常相似,主要包括图像预处理、特征提取、序列建模、字符预测四个流程。
具体来说,CRNN 采用的是 CNN 加 RNN 的结构来提取基本特征,损失函数采用 CTC loss,CTC 最早应用在语音识别中,能够在不分割输入数据的条件下解决序列的预测问题,也就是输入一串语音信号,不需要做分割就可以直接输出语音信号对应的文本,CTC 最大的特点是输入和输出都是一个序列,移植到 OCR 领域以后,基于 CTC 的 CRNN 算法也取得了很好的效果。至于注意力机制模型,主要是编码器 - 解码器结构,文字识别算法解决的核心问题是将长度不匹配的图像特征和文本序列对应起来,编码器 - 解码器这种结构非常适用于解决这个问题,加入 Attention 模块以后,可以自动寻找到需要预测的文本区域,将注意力集中在图像中需要识别的字符附近,显著提升模型准确性。
然后是端到端 OCR,上面讲到的文本检测和文本识别都是串行流程,也就是文本检测完毕以后再进行文本识别。不同于这两个步骤分开进行的模式,端到端 OCR 是将文本检测和文本识别联合起来训练,共享特征提取网络,然后在训练阶段输入训练图像,以及对应的文本框信息和文本内容,损失函数定义为文本检测和文本识别误差的加权和,通过这种方式希望能达到联合优化的目的,预测阶段相当于少了一次特征提取的操作,预测阶段的资源开销也会更少。从实际效果来看,由于两个任务也就是检测和识别的特性不同,整个端到端算法的训练收敛难度会比较大。
最后就是基于 OCR 的信息提取技术,传统的 OCR 技术只解决了从图像中提取文字的需求,但是类似票据识别等场景,除了识别文字外,也需要识别文字之间的关系,判断哪些文字属于预打印的内容,哪些文字属于填写的内容,只有掌握了文字之间的对应关系,后续的业务才能顺利开展,这种基于 OCR 的信息提取技术对 OCR 的业务应用起到了很大的推动作用,近年来的研究也是比较多的。 InfoQ:您方便聊聊目前 OCR 技术在工业界的主流应用有哪些?技术层面还存在哪些瓶颈? Harlon:OCR 在工业界一直有很多应用场景,最著名的例子就是 LeCun 为美国邮政系统设计的支票号码识别算法,这个数据集后面演化成了 MNIST 公开数据集,可以说这是所有深度学习人员接触到的最早示例,基本上所有框架都会拿该数据集作为最初的学习。
早期,由于算法性能受限,OCR 主要是应用在特定场景下的文字识别,比如车牌识别、扫描文档识别以及银行卡卡号识别。整体来说场景是可控的,输入的图像质量相对来说也比较好。随着硬件条件的提升以及算法的发展,现在的 OCR 技术越来越多被应用于像网络图片文字识别、自然场景文字识别等通用领域。
现在,OCR 技术在业界有了很多应用,包括在线视频、在线教育以及智能交通分析等多个领域,只不过应用点可能并不相同,在线教育最核心的应用点是拍照搜题,拍照搜题的核心是需要 OCR 识别用户算法的题目;对于在线视频,因为影视剧的视频较多,需要识别视频里面的文字信息,提供给业务做应用。现在的 OCR 技术主要是根据具体任务设计的专用算法,对不同语种或者不同类型的文字识别效果差异很大,所以提升 OCR 技术的通用能力以及泛化能力是一个需要探索的问题。另外,像小样本或者无监督条件下的 OCR 算法现在的研究也比较少。最后,利用 NLP 以及单字符标注信息提升 OCR 算法的整体性能也是一个没有完全解决的问题。 InfoQ:过去一年,OCR 领域也出现了不少开源项目,对开发者选型而言,您认为可以从哪几个层面考虑? Harlon:事实上,深度学习本身就有很多框架可以选择,比如 PyTorch、Tensorflow 还有最近开源的 Paddle OCR。在 OCR 领域,同样有很多开源项目可以选择。对开发者而言,需要从自身需求出发进行选型,如果是科研目的,那么 PyTorch、Tensorflow 更加适合,二者提供了众多基础模块,还有很多项目及实践经验可以参考,便于大家复现论文,实践新的思路;如果是其他目的,我觉得可以考虑 Paddle OCR 框架,因为其提供了一整套 OCR 工具库,比如仿真数据生成、模型训练、测试以及模型调优等,包括最近又开源了一些 OCR 标注工具,提供了部署服务相关的接口,Paddle OCR 提供了很多经典算法的开源模型,工程人员可以快速实验各种模型,并用自己的数据微调模型,非常利于模型快速选型。
另外,我觉得 Paddle OCR 框架还有两个比较好的地方:一是该项目由百度开源,对中国的开发人员来说,直接用中文沟通更加便利;二是 Paddle OCR 有专门的人员负责更新文档和代码,用微信群进行沟通,我觉得对于专业的 OCR 人员来说,这是一个不错的选择。
最后,不同的 OCR 模型有不同的特点,就选型而言,开发者需要明确分析自己的任务特点,只有搞清楚业务特点,才能找到最合适的算法。 InfoQ:Paddle OCR 也是一个非常轻量级的框架,实现这样一个框架的难度大概是什么? Harlon:从算法角度来说,如果要实现一个轻量级的框架有很多手段,比如选择一些轻量化的模型,另外可能针对模型里面的具体层调小参数或者进行量化,这样或许可以很轻易的得到一个轻量化的模型,但是怎么让轻量化的模型达到比较好的效果是一条比较漫长的道路。 InfoQ:您方便介绍下爱奇艺内部主要有哪些场景应用到了 OCR 技术?用来解决哪些问题? Harlon:OCR 技术在爱奇艺内部得到了非常广泛的应用,对爱奇艺来说,影视剧是核心资产,但视频属于非结构化数据,不利于应用,如何更好地利用视频?为此,我们上线了智能台词分析功能,该功能以 OCR 为基础,可以实时提取影视剧、综艺等节目中的台词信息。
智能台词分析用于提取影视剧视频中的台词信息。同时,会利用 NLP 算法处理识别出来的台词,将用户可能感兴趣的信息提取出来作为标签数据,这些标签数据可以和其他视频信息构成视频的原始数据,然后提供给搜索或者推荐业务使用。
与此同时,我们还在扩大台词智能分析的业务范围,比如提供曲目板识别,广告权益识别、片尾检测等功能。另外一个应用场景就是视频文本 OCR,主要用于识别视频中出现的英文、数字、繁体中文、简体中文等文本,算法可以很好的适配复杂背景,精准识别视频画面中出现的关键文字,为视频分析提供更多数据。
除了上述两大应用外,我们还有一些专用 OCR,用于识别身份证、银行卡以及新闻标题等,这些 OCR 构成了我们的基本算法,被广泛应用于各个业务,既能提高员工效率,也可以改善用户体验。 InfoQ:您方便聊聊爱奇艺是什么时候开始打造 OCR 技术体系的?到现在经过了哪些阶段,有哪些重要的时间节点?每个阶段主要用于解决哪些问题? Harlon:事实上,OCR 算法一直是爱奇艺算法体系中的重要一环,主要经历了三个发展阶段:第一个阶段是基础阶段,主要完善 OCR 算法对基础业务的支持,比如图文分析、智能台词分析、新闻拆条等,这个阶段我们开发了多种 OCR 基础算法,提高编辑人员的效率。重要的时间点是 2017 年,这一年,我们结合爱奇艺自身影视剧库存量较大的特点推出了业内第一个台词搜剧功能,实现的主要功能是用户可输入感兴趣的台词信息搜索对应的视频点位,该功能的推出极大丰富了用户体验,同时让视频搜索更加便捷。 第二个阶段是发展阶段,主要优化算法速度。随着 OCR 业务的发展,我们整个后台需要处理的视频和图像数据量成倍增长,OCR 算法开始出现瓶颈,主要体现在随着数据量的增加,硬件资源消耗巨大,这个阶段基于成本等各方考量,我们使用了多种方法优化算法性能,包括替换轻量化网络、采用新的模型等,让算法运行速度更快,资源消耗量更少;工程层面,我们同样做了很多优化,包括优化算法的处理流程,合并冗余步骤,加入更多进程...... 通过一系列优化,智能台词分析的性能大大提升,40 分钟的影视剧视频只需要 5 分钟就可以完成台词识别,这个速度还是比较可观的,同时大大降低了对硬件的依赖程度。 最后一个阶段是优化阶段,我们从各方面优化算法的性能指标,并且扩大应用范围。横向来看,我们扩大业务的支持范围,挖掘更多业务的使用点,比如将智能台词分析服务从仅识别影视剧扩展到识别综艺节目等。从实践来看,这个阶段为业务方带来了更多便利。
纵向来看,随着场景的扩大以及业务的增长,算法需要更强的泛化能力,因为业务增长以后,算法看到的数据类型越来越多样,如果泛化性能不强,有可能就会出现很多 Bad Case。因此,我们后续开发了很多辅助算法,包括语种分类算法、竖向文字识别算法等,通过此丰富了整个 OCR 算法矩阵,并将相关算法集成到了爱奇艺的奇观中,可以解决用户不同层次获取信息的需求,欢迎大家体验。 InfoQ:在这个过程中,爱奇艺主要用到了哪些算法和模型?效果如何? Harlon:我们会根据不同的应用场景使用不同的算法和模型,然后对模型结构进行优化和改进,文字检测算法包括 CTPN、EAST、PMTD 等,CTPN 的特点是只能检测水平文字,而且对长文本和短文本都有很好的检测效果,不容易发生长文本丢失的现象,特别适合于影视剧的台词检测,但是 CTPN 对单个台词的检测效果不太稳定,可能会存在漏检的情况。
PMTD 其实是一个基于 Mask RCNN 的文本检测方法,可以预测整个文本的 Mask,通过 Mask 推测包含文本的四边形区域,这样就可以兼容横向、纵向、倾斜文本的检测,适用范围较广,但是对密集倾斜文本会发生文本区域检测混乱的情况。
DB 是去年推出的算法,基于分割检测,它在论文中提出了一个叫做 DB 的模块,也就是可微分模块,通过该模块替代分割的后处理部分,而且可以设定自适应阈值来提升网络性能,因为其把繁琐的后处理直接用 DB 模块来替代,相当于网络直接可以运行,DB 算法在水平以及倾斜文本检测上都可以达到很好的性能。
接下来介绍文字识别部分,现在主流的方法都是基于序列到序列的,比如 CRNN,或者基于注意力机制的编码器 - 解码器网络,相比传统的单字符识别算法,这两种方法都是以文本行为单位进行训练,最大的特点就是不需要单字符的标注信息,可以大大提升标注效率,而且将字符识别与字符分割同时放在一个网络中训练,大大提升了算法性能。对于粘连情况比较严重的文本行,效果是非常好的。从实践来看,以上两种文本识别方法的效果是相当的,注意力机制模型的特点就是对英文、数字以及长文本的识别效果较好,CRNN 解码很快且对中文识别效果较好。 InfoQ:我们都知道,识别率是衡量 OCR 识别是否精准的重要条件,你们是如何提升识别率的?其中的难点是什么?目前的准确率是多少? Harlon:首先介绍下 OCR 算法的整体评价指标:文字检测算法使用的评价指标类似于物体检测,根据 IOU 来判断检测框和标注框的重复程度得到召回率和准确率;文字识别算法使用的评价指标是整行识别率,也就是识别的文本串跟标注文本串完全一样才认为是正确的。
在算法研发的过程中,我们发现图像中的文本样式、字体、文本方向、语种、背景复杂多样,这些都给 OCR 技术带来了很大挑战。此外,不同场景的文本特点不同,如果为每个业务单独开发一套算法,重复的工作量也非常大。基于此,我们构建了 OCR 解决方案,根据不同的业务特点进行微调,我们也配套开发了 OCR 技术模块,比如文本仿真模块,训练、测试模块以及数据清洗模块。
针对不同的业务场景,我们会选择合适的算法。以智能台词分析为例,我们选择的是对中文识别效果较好的 CRNN 模型。在影视剧特别是综艺节目中,经常会出现不常见的字体及文字特效,比如《青春有你》、《热血新说唱》等节目会使用活泼且有个性的字体,我们开发了文本仿真引擎用以模拟各种文本的特效,包括台词常见的阴影、描边、发光体等效果,以及收集了 150 多种常用字体,用来生成各种样式的仿真台词,最终生成了千万级别的仿真数据用于强化模型的泛化能力。在下一阶段的训练中,我们又加入了一定量真实数据一起训练,这样得到的模型更加适用真实场景。最后,我们针对特殊情形做了很多优化,比如在双语电影的台词识别方面,由于英文台词的字符数量比中文台词多很多,如果强行使用一个识别模型的话,整个模型解码时对英文识别会出现预测长度偏小进而导致字符丢失的现象,针对这种情况,我们单独开发了语种检测算法,用于区分中文台词和英文台词,以及单独的英文识别算法,这样就可以保证整个台词识别算法的效果。
通过上述一系列优化,我们的台词智能分析服务在中文台词、英文台词上都得到了较优水平。同时,我们会根据算法的特点进行一些针对性优化,比如上述提到的 PMTD 算法,对比较密集的倾斜文本行检测效果不太好,通过实验发现这是由于生成的训练数据不准确导致的,因为倾斜的文本行虽然标注的时候是一个倾斜的四边形,但是最后训练的时候会转换成矩形,导致面积扩大,如果倾斜行文本行过密,矩形区域里面就会包含另外一个文本行,这样的训练效果是非常不好的,在这种情况下,我们通过限制倾斜文本行的长度以及对过长的倾斜文本行进行分段解决了这个问题,最后达到了比较好的效果。 InfoQ:接下来,爱奇艺还将做哪些事情提高 OCR 技术的整体效果? Harlon:未来的规划主要包括几个方面:一是视频中的文本识别和跟踪,爱奇艺本身有大量的视频数据,这些数据具有数据量大、时序性强的特点,如何在保证算法实时性的同时利用这些特点优化 OCR 算法的性能是值得关注的。
二是结合 NLP 技术优化整个 OCR 算法的性能。图像中的大部分文字都有很强的语义信息,如何结合 NLP 优化 OCR 算法对易错样本的识别效果。
三是 OCR 算法移植到手机端。随着爱奇艺业务的增长,整个 OCR 算法需要处理的数据量越来越大,如果将 OCR 算法移植到手机端,能缓解整个后台服务的压力,同时可以为用户带来更好的体验。 
QA 部分
端到端的 OCR 框架有哪些注意事项?有什么可以参考的吗?
:端到端的 OCR 框架,可以同时完成文字检测和文字识别,需要注意:文字检测和文字识别属于两个问题,训练过程中,需要保证共享的特征同时适用于两个算法才行,但是同时训练这两个任务,会导致 loss 震荡,整个网络不收敛,因此一般的步骤是先训练一个任务,稳定以后再把另一个任务加进去;参考:FOTS。 对于添加了水印或印章的图片,是否有比较好的识别方式?
:如果水印比较好去除,建议先去除水印,否则,可以生成一些带水印或印章的仿真样本,用于模型训练,能加强模型对这种图片的识别效果; east 文本监测的优缺点有哪些?
:优点:速度较快、支持任意方向文本检测;缺点:相比最新的一些方法,性能有差距,对倾斜文字的检测效果不太好 方便分享下模糊文本的识别吗?
:造成模糊样本的原因有很多,比如本身的拍照环境较差导致样本模糊等,可以用算法生成一部分模糊样本,将其与清晰样本结合起来进行训练。需要注意的是模糊样本的模糊程度,如果过于模糊可能文本信息已经没有了,此时用来进行训练可能就是脏数据了,这种情况是需要避免的。另外,模糊样本和清晰样本的比例需要掌握好,如果模糊样本过多会影响模型对清晰样本的识别效果。 从 0 到 1 搭建 OCR 有哪些坑可以绕开?
:1)字符集:确定任务需要的字符集,生成仿真样本时,查看字体是否包含所有需要的字符集,生成仿真样本后,对样本进行抽查;根据任务判断字符集中是否需要加入空格这个字符;2)标注数据:根据任务需要确定标注规则,比如:基于单词的检测方法,需要将空格两侧的单词分开标注;整行文字检测方法,可以将包含空格的整行文字一起标注;3)优化方法:多尝试优化方法,选择对当前任务最优的方法;4)标注样本数量:检测算法对样本的需求量较低,识别算法由于字符数较多,需要更多的样本; 嘉宾介绍:Harlon,爱奇艺智能平台部助理研究员,来自爱奇艺智能平台部 AI 服务组,从事 OCR 算法、视频内容分析、智能审核等研发工作。
end

也许你还想看
效能篇 | APP的自动化录制回放系统 全云化处理新体验
i技术会 | 如何用AI挖掘和生成视频广告点位


扫一扫下方二维码,更多精彩内容陪伴你!
本文授权转载自《InfoQ》 作者|钰莹

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存