找回密码
 立即注册
搜索

实际案例:如何有效地搜集语音辨认数据?

森sam 2018-12-15 11:42:29 显示全部楼层 阅读模式

点击上方关注,All in AI中国

作者:黄功详(Steeve Huang

随着机器学习的迅速发展,尤其是深度学习的提高,语音辨认技术得到了分明的提高。这种技术依赖于大量高质量的数据。但是,为非盛行言语构建的模型比盛行言语(英语等)的表现还要差。这是由于只要多数可用的训练数据集,并且很难有效地搜集高质量的数据。这篇文章将向大家展现如何有效地搜集任何言语的语音辨认数据。

虽然Mozilla公司推出了一个名为Common Voice的开源项目,这个项目鼓励人们发表本人的意见,但大多数人或者不了解这个项目,或者不情愿参与其中。下图显示了Common Voice中不同言语的小数据搜集进度。




Common Voice的小数据搜集进度(https://voice.mozilla.org/en/languages) 由于视频网站Youtube上提供了丰富的电视节目和电视剧,因此可以高效地搜集语音辨认数据,通常经过人工参与来实施。


流星花园(https://www.youtube.com/watch?v=DsuN185H58I)



如上图所示,这些戏剧或节目中的一些嵌入了字幕,可以经过OCR提取。然后,提取的文本连同剪辑的音频可以构成语音辨认数据的样本。

概述

下图显示了包含多个模块的整个数据搜集管道的概述。我们首先运用Youtube V3 API搜索下载与指定的电视节目称号相关的视频。应用FFMPEG将视频分割成帧,每个帧由自我训练的Mask-RCNN处理(稍后更详细叙说)以仅保留图像的字幕区域。然后,处理后的图像将发送到Google Vision API,以获取预测的文本和置信度。运用Pandas库,我们按工夫戳对结果停止排序,然后将它们聚合在一同,为每个视频生成一个SRT文件。以下内容将向大家展现如何完成这些模块。




先决条件
    Python==3.6 FFMPEG joblib==0.12.0 numpy==1.13.3 pandas==0.23.3 tensorflow-gpu==1.4.0 keras==2.1.3 google-cloud-vision==0.32.0 pafy==0.5.4 youtube-dl==2017.12.2 tqdm==4.23.4 editdistance==0.4

实施

此部分由数据搜集管道中的模块划分,每个子部分对应一个模块。

下载视频和提取音频

转到Youtube搜索你感兴味的电视剧。确保你可以找到该节目的播放列表,由于播放列表中的视频质量往往是一致的。检查第一个视频能否包含嵌入的字幕,我们可以假设整个播放列表都是字幕嵌入的。


播放列表中的Youtube视频






下面的代码显示了如何搜索Youtube播放列表。你需求央求API密钥才能运用Youtube V3 API客户端。在第27行




字面上执行Youtube搜索,查询是戏剧称号,并前往第一个结果的播放列表ID。运用播放列表ID,我们可以获取此播放列表中一切视频的视频ID。




异样,在第15行,




在给定播放列表ID的状况下,搜索最多50个视频的ID(受API限制)。然后,我们可以末尾下载视频了。




Pafy Python包用于下载可用的最高分辨率的视频。下载视频后,我们应用FFMPEG从每个视频中提取音频。

由于FFMPEG不支持python SDK,我们需求在shell中调用它。经过触发subprocess.call()函数,可以执行参数中指定的shell命令。如今,已成功下载指定电视节目的视频和音频。

拆分视频

然后,我们将下载的视频拆分为运转OCR的帧。




只要中间60%的部分视频被分割成帧,由于第一部分和最后20%的部分能够包含收场或结尾的歌曲,不能用于语音辨认。

异样,在子进程的shell中调用FFMPEG。分割视频的参数描画如下:
    ss:以秒为单位的末尾工夫 t:以秒为单位分割视频的工夫跨度 r:采样率

采样率越高,预测的字幕工夫跨度越准确。但是,需求在工夫和准确性之间停止权衡。在这里,我把它设置为2。

训练和评价Mask-RCNN

如今,你已从每个视频中获得了帧。假如你在Google Vision API官方网站上试用一些图像停止OCR()(文档文本检测,由于字幕是键入的字符)。就会发现结果并不令人称心,由于这些图像的背景非常复杂。

这是Mask-RCNN发挥作用的时分。Mask-RCNN是2017年发布的用于对象检测和实例分割的RCNN系列的一部分。它可以在像素级别停止分类。


Mask-RCNN演示(https://github.com/matterport/Mask_RCN



我们的目的是训练Mask-RCNN,以协助我们辨认哪些像素是字幕。

为了确保训练有素的模型足够广泛以顺应各种视频,我从十几个电视剧和动画中下载视频。运用不同的字体大小,字体类型和字体垂直地位以丰富训练数据集。底部40%的图像被裁剪,以便我们确保在训练数据上手动添加的字幕不与原始字幕堆叠。这也确保了非字幕部分来自高度相似的颜色空间分布。




下面的代码应用Python PIL包将文本添加到图像上。由于Mask-RCNN将每个衔接的组件视为一个实例,因此在某些言语中,一个字符可以由不同的实例组成。例如,字符"把"包括左和右两个分量。要查找衔接的组件,我们可以在skimage包中运用label()函数,如以下代码所示。




生成的训练数据如下图所示。左侧显示输入图像,右侧显示地面实况。正如你可以从右侧某些字符的颜色差异中看到的那样,单个字符可以包含多个实例。


生成的Mask-RCNN训练数据



为了训练Mask-RCNN,我在这个Github Repo中运用了Keras和Tensorflow的优秀完成。我们需求做的是指定Training模型的配置,如下所示。










你只需求设置NUM_CLASSES=1+1(字幕+背景),并指定IMAGE_MIN_DIM以及IMAGE_MAX_DIM,这取决于你的训练数据的分辨率。需求手动计算MEAN_PIXEL才能在预处理阶段停止标准化。然后,你可以末尾加载数据和训练。

评价

经过100个周期的训练后,让我们末尾在一些图像上运转训练有素的模型。





不同电视节目的评价结果



顶部显示左侧显示输入图像,而右侧显示输入图像。您可以看到字幕已被清楚地辨认出来。虽然下面有一些噪音,但在运转OCR时对下面的字幕预测没有影响。次要成绩是有时Mask-RCNN太严厉了,它删除了文本的某些部分。在下面的第二个例子中,第二个字符"难"被部分删除,这能够会降低OCR的功能。为了恢复这个错误,我决议运用Ensemble。


单一模型预测



集合是指运用多个模型停止预测。我没有运用单个模型停止预测,如上图所示,而是运用不同的配置训练另一个模型。输入图像被输入这两个模型,最终结果将是这两个模型预测的结合。


集合预测



由Mask-RCNN处理的结果帧如下所示。左下角是原始输入图像,右下角是仅有一个模型的预测,左上角是全体结果。 (右上角是测试工夫加强结果,已被当前管道中的全体取代)


Mask-RCNN处理过的图像。左下角:原创。右下:单一模型。左上角:合成。右上:测试工夫添加(未讨



运转OCR

运用Mask-RCNN模块处理图像后,我们就可以在这些图像上运转OCR。与Youtube API密钥不同,你需求在谷歌云平台上央求Vision API凭据,并将其存储在本地磁盘中。




下面的代码对你的图像文件停止编码,发送到OCR API并接收呼应。呼应包含预测字符,每个字符的边界框坐标以及每个字符的置信度。你可以决议本人的阈值来过滤低置信度结果。最终结果写入CSV文件,每行代表每个帧。




生成SRT最终结果

最后,这是管道的最后一个模块!通常一段字幕持续2-3秒,这意味着大约有4-6个延续帧包含相反的字幕。成绩照旧是我们如何将不同帧的结果合并为一个,决议语音的末尾工夫、结束工夫和副标题。我们只需求检查当前字幕能否与最后一个字幕婚配。一个次要应战是有时两个帧具有相反的字幕,但OCR预测不同的结果。你需求确定两个字幕能否相反的算法应该可以处理这些状况。




下面的代码基于启示方法的。假如来自当前帧和最后一帧的这两个字符串中的字符与70%相反,则前往True,而不管每个字符的顺序如何。

结论

假如你正确遵照上述阐明,则表明你已成功构建自动语音辨认数据集搜集管道。你可以根据FFMPEG指定的工夫轻松分割音频,但有一个小成绩,由于字幕出现的工夫和相应语音的工夫能够有些不同,因此语音和文本之间能够存在一些没有对齐的状况。这可以经过言语模型来处理,以基于语音稍微调整每个字幕的工夫。

有关更多信息和详细信息,请参阅此https://github.com/khuangaf/ITRI-speech-recognition-dataset-generation

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

大神点评3

啊优 2018-12-15 12:38:49 显示全部楼层
分享了
回复

使用道具 举报

报告!别开枪,我就是路过来看看的。。。
回复

使用道具 举报

3380126 2018-12-16 10:54:36 显示全部楼层
这帖子写的不错
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies