2011-12-05 48 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

良好的信息。谢谢。 –