linux – 用于电视(TV)视频的实时像素级分析的建议

[注意:这是对 earlier question的重写,被认为是不恰当和关闭的.]

我需要对电视(电视)视频进行像素级分析.这种分析的确切性质并不相关,但它主要涉及从MPEG-2传输流开始查看电视视频每帧的每个像素.主机平台将是服务器级,多处理器64位Linux机器.

我需要一个可以处理传输流解码的库,并实时向我提供图像数据. OpenCV和ffmpeg是我正在考虑进行这项工作的两个库. OpenCV很吸引人,因为我听说它具有易于使用的API和丰富的图像分析支持,但我没有使用它的经验.我过去曾使用ffmpeg从文件中提取视频帧数据进行分析,但它缺乏图像分析支持(尽管英特尔的IPP可以补充).

除了针对此问题的方法的一般建议(不包括实际的图像分析),我还有一些更具体的问题可以帮助我开始:

> ffmpeg或OpenCV通常在工业中用作实时的基础
视频分析,还是我还应该关注其他什么?
> OpenCV可以实时解码视频帧,还能留下足够的空间
CPU留下来进行非平凡的图像分析,也是实时的?
>足以使用ffpmeg进行MPEG-2传输流解码,或者
是否最好直接使用MPEG-2解码库(如果是,哪一个)?
> ffmpeg的输出帧是否有特定的像素格式
或OpenCV在制作时特别有效(如RGB,YUV或YUV422等)?

解决方法

1.
我肯定会推荐OpenCV进行“实时”图像分析.我假设您实时指的是能够跟上电视帧速率(例如,NTSC(29.97 fps)或PAL(25 fps)).当然,正如评论中所提到的,它当然取决于您可用的硬件以及SD(480p)与HD(720p或1080p)的图像大小. FFmpeg肯定有它的怪癖,但你很难找到一个更好的免费替代品.它的力量和灵活性令人印象深刻我确信这是OpenCV开发人员决定将其用作OpenCV视频解码/编码后端的原因之一.

2.
在使用OpenCV进行解码时,我没有看到高延迟问题.您的系统有多少延迟?如果需要提高性能,请考虑使用单独的线程进行捕获/解码和图像分析.由于您提到了多处理器系统,因此这应该会更好地利用您的处理能力.我肯定会建议使用最新的Intel Core-i7(或者可能是Xeon等效)架构,因为这将为您提供当今最好的性能.

我在几个嵌入式系统上使用过OpenCV,所以我非常熟悉你对最佳性能的渴望.我已经多次发现没有必要处理全帧图像(特别是在尝试确定蒙版时).如果您难以处理获取的视频流,我强烈建议您对图像进行下采样.这有时可以立即为您提供4-8倍的加速(取决于您的下采样因子).同样在性能方面,我肯定会推荐使用英特尔的IPP.由于OpenCV最初是一个英特尔项目,IPP和OpenCV很好地融合在一起.

最后,因为图像处理是那些“令人尴尬的并行”问题领域之一,所以不要忘记在需要时使用GPU作为硬件加速器的可能性. OpenCV最近在这方面做了很多工作,所以如果需要你应该可以使用这些工具.

3.
我认为FFmpeg将是一个很好的起点;我能想到的大多数替代品(Handbrake,mencoder等)都倾向于使用ffmpeg作为后端,但如果你愿意的话,看起来你可能会使用IPP的Video Coding库.

4.
OpenCV的颜色内部表示是BGR,除非你使用像cvtColor这样的东西进行转换.如果您想查看FFmpeg支持的像素格式列表,您可以运行

ffmpeg -pix_fmts

看看它可以输入和输出什么.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...