Electric Eye:Netflix的音視頻測試框架
作為一家北美視頻租賃供應商, 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開源電眼的目的則是希望更多測試者能夠直接受益或者從中獲得計算機視覺和音頻處理的測試方面的靈感和經驗。