在给定播放列表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%的图像被裁剪,以便我们确保在训练数据上手动添加的字幕不与原始字幕重叠。这也确保了非字幕部分来自高度相似的色彩空间分布。