马文华,博士。毕业于中国科学院自动化研究所模式识别与人工智能专业。主要从事图像识别、目标检测与跟踪等方面的理论与应用研究,在该领域重要学术会议和期刊发表论文4篇,申请相关专利2项。工作期间从事OCR和自然场景OCR应用研究,提出了基于文本背景区域检测和自适应层次聚类的文本检测方法。研究成果申请美国专利2项,日本专利2项,中国专利5项。目前主要从事文档识别和自然场景文字识别的研究工作。研究背景随着便携拍摄设备的普及和自媒体、网络直播平台的兴起,数字视频迎来了爆发式增长。对视频进行有效的编目和检索已成为迫切需要。但是,视频源种类繁多,其中很多都没有标准化的描述信息(如字幕文件)。基于纯图像识别技术理解视频内容需要跨越从图像理解到语义理解的鸿沟,目前的技术还不完善。另一方面,视频中的字幕往往带有非常准确和关键的描述信息,从识别字幕的角度来理解视频内容已经成为一种比较可行的方式。识别字幕文本通常需要两个步骤:字幕定位和文本识别。字幕定位就是找出字幕在视频帧中的位置。通常,字幕是水平或垂直排列的。定位结果可以用最小的边界框表示,如图1所示。字幕文字识别,即通过提取字幕区域的图像特征,识别其中的文字,最后输出文字串。图1:视频字幕识别的一般流程技术路线字幕定位字幕定位需要区分字幕区域和背景区域。有效的区分特征包括以下几点:字幕的颜色和字体比较规则,与背景有比较明显的色差;字幕区笔画丰富,角、边特征更加明显;字幕中的字符间距是固定的,排版多为水平或垂直方向;同一个视频中字幕的位置是比较固定的,同一个字幕一般会停留几秒。其中,前三点是字幕外观特征,第四点是时间冗余特征。利用这些特点,一种可行的字幕定位方案如下:图2:基于边缘密度的字幕定位首先,对视频帧的灰度图进行边缘检测,得到边缘图。然后对边缘图进行水平和垂直投影分析,通过投影直方图的分布粗略确定字幕的候选区域。如果有多个候选区域,则根据字幕区域的大小和宽高比范围,过滤掉不合理的检测结果。最后通过多帧检测结果的比较融合,进一步去除不稳定的检测区域。这样基本就可以得到可信的检测结果。在一些复杂的场景中,上述方法检测到的区域可能存在字幕边界检测不准确的情况,尤其是垂直和字幕方向边界。这时可以进一步使用连通域分析的方法,找到字幕所在的线条区域的连通域,通过连通域的颜色和规律性对检测结果进行微调。字幕文字识别字幕文字识别常用的方法是先根据线条区域的灰度直方图投影对词区域进行分割,然后进行灰度图像归一化、梯度特征提取、多模板匹配和MCE(最小分类误差)分类。然而,这种传统的基于特征工程的分类识别方法难以处理视频本身复杂的背景纹理、噪声和低分辨率等问题。一个改进的思路是使用一种基于深度学习的端到端字符串识别方案:CRNN(ConvolutionalRecurrentNeuralNetwork)。方法流程如图3所示:图3:CRNN实现端到端的单词识别首先,输入一张固定高度,不限宽度的单词图像(不需要单词区域信息),在训练过程中,图片统一缩小为32*100;然后通过CNN层提取图像特征,利用Map-to-Sequence形成特征向量,输出为特征图。这里,和与输入图像的大小成正比。论文中featuremap的大小为:.这相当于对图像进行过分割,将其划分为26个条带区域,每个条带区域由一个512维的特征表示。其中,26被认为是英文单词长度的上限。值得一提的是,由于卷积的性质,这里的条状区域是“软边界”并且重叠,其宽度对应最后一层卷积的感受野。然后通过RNN层提取带状区域的上下文特征,得到类别概率分布。这里使用了双层双向LSTM,LSTM的单元数与LSTM相同。RNN的输出是一个概率矩阵,其中,对应类别数,考虑26个英文字母+10个数字+1个负类(对应字母间的模糊区域),类别数为37。最后,概率矩阵通过CTC层转化为某个字符串对应的概率输出。CTC层本身没有参数。它使用前向后向算法求解最优标签序列,使得理论上庞大的穷举计算成为可能。从以上分析可以看出,CRNN的亮点主要在于:将分割和识别合二为一,避免了错误积累;端到端的训练。在我们早期的实践中,我们发现它的性能确实比传统方法有了明显的提升,主要表现在它对艺术字体、手写字体等难分割情况的识别性能非常好。但是实际应用场景的分析让我们放弃了这个方案。原因有二:时效性:根据我们对英文单词的实验对比,CRNN的耗时大约是传统方法的2到3倍,不能满足视频处理的需要。实时要求;performance:CRNN擅长处理难分词的字符串,字幕文字间距和字体比较规整,字间粘连的情况很少,所以没有体现CRNN的优势。综上所述,我们最终采用笔画反应加投影统计的方法进行分词,并在单词识别环节使用CNN来提高复杂场景下的识别性能。下面简单介绍一下流程:分割过程包括三个步骤:获取字幕区域图像的笔划响应图;统计笔画响应图水平方向的灰度投影直方图;根据字幕区域的高度估计单个字符的宽度,并以此为基础,在投影直方图上找到一系列最优切点。图4:字幕区域的分割分割链接给出了单个字符区域。对于这个领域,CNN模型用于提取特征以进行单词识别。这里需要考虑两点:模型选择:经过实验,一个包含3-5层卷积-池化单元的简单CNN模型可以将传统识别方法的性能提高约10个百分点。当然,更深的网络,比如resnet,会进一步提升性能。在实际场景中,模型选择需要根据需求在速度和性能之间进行权衡。数据来源:基于深度学习的方法,性能的关键在于海量可靠的训练样本集。在训练过程中,我们使用的样本集是百万量级的,人工收集和标注这些样本显然是不现实的。因此,在深度学习的很多应用中,我们都采用了合成样本训练和实际样本验证的模型,并证明了其可行性。以合成字幕文字为例:我们分析字幕文件的格式,将要生成的文字写入字幕文件,播放视频时自动加载字幕,将文字叠加在视频上。这样就可以同时完成数据的生成和标注。我们还根据需要定制了不同的字体,并添加了阴影和模糊等额外效果。这样,理论上我们可以得到无限多的合成样本。图5:字幕文本样本的合成虽然识别模块的性能很强,但是对于相似的字符还是难免会出现识别错误。这就是语言模型发挥作用的地方。语言模型也称为n-gram模型。通过统计词在词库中的共现概率,可以判断哪个词序列更有可能出现。N-gram中的n表示统计词(字符)序列的长度,n越大,模型越复杂。在字幕识别系统中,我们使用了最简单的2-gram模型,将最终的识别准确率提高了2个百分点。图6:基于语言模型修正结果汇总我们使用上述系统在实际视频样本上进行测试,词识别准确率达到99%,CPU单个词识别耗时2ms,基本满足实际需求.作为深度学习方法在实际业务中应用的肤浅尝试,我们有两个体会:关于方法的选择,应该从问题出发,详细分析难点,选择最简单有效的方法,切忌贪心新事物本末倒置;在数据合成方面,合成数据用于训练,实际数据用于微调和测试,可以说是训练深度学习网络性价比最高的方式。当然,不需要考虑时间和人力消耗的土豪是免费的。在操作过程中,一定要注意使合成样品与实际样品尽可能相似,可以通过多次验证调整来选择最佳的合成方法。原文链接:http://t.cn/R0w2Z6L作者:马文华【本文为专栏作者《腾讯云技术社区》原创稿件,转载请联系原作者获得授权】点此查看更多好文该作者的文章
