2011-12-05 88 views
6

建議[注:這是一個earlier question的重寫被認爲是不恰當的,封閉的。]電視的實時像素級分析(電視)視頻

我需要做的一些像素級分析電視(電視)視頻。這種分析的確切性質並不相關,但它基本上涉及從MPEG-2傳輸流開始查看每個電視視頻幀的每個像素。主機平臺將是服務器級的多處理器64位Linux機器。

我需要一個庫,可以處理傳輸流的解碼並實時呈現圖像數據。 OpenCV和ffmpeg是我正在考慮進行這項工作的兩個庫。 OpenCV很吸引人,因爲我聽說它具有易於使用的API和豐富的圖像分析支持,但我沒有使用它的經驗。過去我使用ffmpeg從文件中提取視頻幀數據進行分析,但缺乏圖像分析支持(儘管英特爾的IPP可以補充)。

除了對方法一般建議對這個問題(不包括實際的圖像分析),我有這將有助於我開始了一些更爲具體的問題:

  1. 是ffmpeg的或OpenCV的工業上常用的實時視頻分析的基礎,還是我應該看到的其他內容?
  2. OpenCV能否實時解碼視頻幀,並且仍然留下足夠的CPU來實現非平凡的圖像分析,也是實時的?
  3. 足夠使用ffpmeg進行MPEG-2傳輸流解碼,或者 是否最好直接使用MPEG-2解碼庫(如果是,哪一個)?
  4. 是否有輸出幀的特定像素格式ffmpeg 或OpenCV在生產時特別有效(如RGB,YUV或YUV422等)?
+0

您問到的很多與性能相關的問題僅取決於您使用的硬件。 – karlphillip

+0

@karlphillip我意識到平臺的選擇會影響性能,但它不會平等地影響所有的圖書館選項嗎?如果沒有,並且您可以談論如何選擇一個平臺會比另一個更有利於一個圖書館,請分享。硬件還沒有被購買,所以這些信息是有價值的。 –

+0

我已經使用C++封裝完成了opencv的實時攝像頭幀分析。它循環遍歷每個像素並檢查顏色,速度非常快,因爲我能夠運行其他應用程序,如opera和3d視口應用程序。在linux上工作。 –

回答

6


我肯定會推薦OpenCV進行 「實時」 圖像分析。我實時假定您指的是跟上電視幀速率(例如,NTSC(29.97 fps)或PAL(25 fps))的能力。當然,正如評論中提到的那樣,它當然取決於您可用的硬件以及圖像尺寸SD(480p)與HD(720p或1080p)。 FFmpeg肯定有它的怪癖,但你很難找到一個更好的免費選擇。它的力量和靈活性相當可觀;我相信這是OpenCV開發者決定將其用作OpenCV視頻解碼/編碼後端的原因之一。

2.
我還沒有看到使用OpenCV解碼的高延遲問題。你的系統有多少延遲?如果您需要提高性能,請考慮使用單獨的線程進行捕獲/解碼和圖像分析。由於您提到擁有多處理器系統,因此應該更好地利用您的處理能力。我肯定會推薦使用最新的英特爾Core-i7(或者至少相當於Xeon)架構,因爲這樣可以爲您提供當今最好的性能。

我在幾個嵌入式系統上使用了OpenCV,所以我非常熟悉您對峯值性能的渴望。我發現很多次,沒有必要處理全幀圖像(特別是在試圖確定掩模時)。如果您對獲取的視頻流進行了難以處理,我強烈建議對圖像進行下采樣。這有時會立即給你一個4-8倍的加速(取決於你的下采樣因子)。同樣在性能方面,我肯定會推薦使用英特爾的IPP。由於OpenCV最初是一個英特爾項目,因此IPP和OpenCV很好地融合在一起。

最後,因爲圖像處理是那些「令人尷尬的並行」問題領域之一,所以不要忘記在需要時使用GPU作爲硬件加速器來解決問題的可能性。 OpenCV最近在這方面做了很多工作,所以如果需要的話,你應該有這些工具。

3.
我覺得FFmpeg是一個很好的起點;我可以想到的大部分替代方案(手剎,mencoder等)都傾向於使用ffmpeg作爲後端,但是看起來如果您願意,您可以使用IPP的Video Coding庫自己推出。

4.
的OpenCV的顏色內部表示BGR除非你使用類似cvtColor將其轉換。如果你想看到的是由FFmpeg的支持的像素格式的列表,你可以運行

ffmpeg -pix_fmts 

,看看它可以輸入和輸出。

+0

真正有用的見解,@mevatron。非常感謝。 –

3

僅適用於第4問題:

視頻流在422格式編碼:YUV,YUV422,的YCbCr等將它們轉換爲BGR和背面(重新編碼)消耗了大量的時間。因此,如果您可以編寫算法在YUV上運行,您將獲得即時性能提升。

注1.雖然OpenCV本身支持BGR圖像,但您可以使其處理YUV,並對其內部進行一些關注和了解。

舉例來說,如果您想檢測視頻中的某些人,只需將解碼視頻緩衝區的上半部分(包含圖像的灰度表示)進行處理即可。

注2.如果你想訪問opencv中的YUV圖像,你必須直接在你的應用程序中使用ffmpeg API。 OpenCV強制在其VideoCapture API中將YUV轉換爲BGR。

+0

良好的信息。謝謝。 –