Electric Eye:Netflix的音视频测试框架

jopen 9年前

 

作为一家北美视频租赁供应商, Netflix 还研发了从拇指大小的电视棒到超大屏幕的曲面高清电视等各种各样的设备。如何能够更好的实现这些设备上视频、音频以及字幕的正确同步一直是Netflix专注的问题。近日,Netflix推出了一个自动化的计算机视觉和音频测试框架—— 电眼(Electric Eye) ,以辅助在这些设备上进行的同步测试。

提起电眼,首先需要说到美国的 二十一世纪通信和视频辅助行动(Twenty-First Century Communications and Video Accessibility Act,CCVA) 。CCVA行动由美国国会提出,主要为残疾人在通信和视频方面提供特殊的帮助。 隐藏式字幕(Closed Caption,CC) 就是在这种背景下诞生的一种特殊字幕。其最初设计的目的是将节目中的音频或对白等通过文字在屏幕上显示出来,为有听力障碍的人理解电视节目提供帮助。CC一般采用 Timed Text Markup Language(TTML) 进行编写,详细描述了字幕的内容、出现的时间和位置以及消失的时间等等。以往,Netflix都是采用人工方式来将CC和视频结合起来,确定其内容和显示方式。但是,这种方式效率低下,且容易出错。此外,设备多样性也使得该问题不易解决。同步显示还需要考虑到各个设备的特点。由此,电眼项目诞生。

作为该项目的第一步,Netflix采用 OpenCV 建立了一个针对平面电视的模型,并将问题切分为了两个子问题——获得一个针对电视的可以测试的框架,然后从该框架提取出字幕进行对比。OpenCV本身已经内置了 在平面上探测棋盘模式的功能 ,并能够 产生透视角修正矩阵(perspective-correction matrix)基于该矩阵封装图像的代码 。这样,大概的功能已经实现。

但是,接下来还有很多小问题。最主要的就是电视本身是会发射光线的。这就导致摄像机摄录电视中视频时容易出现模糊、鬼影等问题。而视频内容如果为全黑屏又无法显示视频和字幕是否同步。因此,Netflix选取了一段水流的画面作为测试视频,将其亮度降低了50%,然后在其上覆盖字幕。屏幕上部显示的是应该正确出现、已经内嵌在视频中的字幕,而下部显示的是经过解析显示出的字幕。通过比较这两个字母,系统就可以知道CC字幕是否正确显示。此外,测试环境中的灯光还容易引起水面反光太强,影响到字幕显示。针对这些问题,Netflix结合环境矫正技术、传统的OpenCV图像清理技术以及CV等提出了解决方案。最终,原型系统可以在66ms级别可靠的探测delta,从而引入第二个原型系统的创建。

在第一个系统的基础上,第二个系统加入了一些额外的要求:处理过程要实时进行和系统要能够处理音频。但是, OpenCV并没有提供音频接口 ,且性能有限。为此,Netflix团队采用了 创造性的编码框架——Cinder 。作为知名的C++库,Cinder还提供了能够桥接OpenCV的CinderBlock模块和音频DSP库。因此,音视频同步测试也加入到了原型系统中。而测试内容也采用了 Archimedia 专门为Netflix设计的、用于音视频测试的 Test Pattern 。测试过程包含以下步骤:小球到达底部之前在英语2.0轨道播放1250Hz的声音,过程持续400ms;一旦小球到达底部,声音转变为1000Hz,持续200ms。这些模式每6秒钟重复一次。

为了鉴别正在播放的声音,Netflix采用了Cinder的 MonitorSpectralNode 类。这样,系统就可以抓取第一帧和最后一帧,并感知声音频率变化的时刻,从而进行简单的音视频同步测试。接下来,系统就需要识别小球的位置,实现测试过程的自动化。为了排除屏幕发光、摄像机延迟和像素反应时间等带来的影响,Netflix采用了图像处理、直方图均衡化以及图像阈值等技术。最终,系统能够取得大约33ms的精度和每次测量正负33ms的误差。

此外,测试过程中还遇到音频频率不一致的问题。其中,电脑中音频为44.1kHz,通过HDMI后变为48kHz,而并非所有的摄像机都同时支持 44.1kHz和48kHz。因此,Netflix花费了5个月的时间来解决这些问题,最终搭建成功了电眼系统。现在,电眼1.0版本正式亮相。 Netflix也在计划尽快开源其绝大部分代码。Netflix的高级软件工程师 Michael Russel表示 ,公司接下来会继续对电眼进行额外的测试,并寻找更多的应用场景。而且,Michael透露,Netflix开源电眼的目的则是希望更多测试者能够直接受益或者从中获得计算机视觉和音频处理的测试方面的灵感和经验。