【问题标题】:How to analyse video frames in parallel using Matlab?如何使用 Matlab 并行分析视频帧?
【发布时间】:2017-07-05 11:46:49
【问题描述】:

我正在逐帧处理大型视频文件。每个帧的处理独立于其他帧(解压缩时)并且计算量也很大,因此我认为并行处理将是加快分析速度的好方法。虽然我已经自学了使用并行循环的基础知识,但我在将 parfor 的细节与 VideoReader 对象结合起来时遇到了问题。在我的脑海中,我想象代码是这样运行的

 video = VideoReader('video.mp4'); 
 parfor ii = 1 : 90000
     frame = read(video, ii);
     ...analysis on frame...
 end

但是,这警告我不要使用 read(),因为它将在未来的版本中删除,所以我知道的唯一替代方法是使用 frameRead()。但是 frameRead 使用 VideoReader 对象的 CurrentTime 属性,每次调用 frameRead 时,它都会增加自身(根据 fps)。这适用于在正常循环中读取帧,但它使 parfor 不高兴,因为每个帧都依赖于根据最后一个增加 CurrentTime。有没有办法使用 readFrame 或其他方式访问并行循环中的独立帧?我尝试通过使用循环索引和帧速率来设置每个循环中的 CurrentTime 值,如下所示:

 video = VideoReader('video.mp4');
 fps = video.FrameRate
 results = cell(totalFrames, 1);
 parfor ii = 1 : 900000
     video.CurrentTime = ii/fps;
     frame = readFrame(video);
     results{ii} = customAnalysisFunction(frame)
 end

在此示例中,parfor 带有下划线/标记,原因在此消息中提供:

MATLAB runs loops in parfor functions by dividing the loop iterations into
groups,and then sending them to MATLAB workers where they run in parallel.
For MATLAB to do this in a repeatable, reliable manner, it must be able to
classify all the variables used in the loop. The code uses the indicated
variable in a way that is incompatible with classification

我可以采取哪些步骤才能并行读取兼容的视频帧?

我应该只使用读取功能吗?我不应该这样做的原因是什么? Matlab 还有其他的视频工具吗?

我经常建议的一个解决方案是,为什么不将视频分成单独的剪辑?我不想这样做,因为它非常慢并且需要很多额外的步骤和文件处理。很难相信在 Matlab 中没有解决此问题的方法,所以我期待您的回答!

【问题讨论】:

    标签: matlab video parallel-processing parfor


    【解决方案1】:

    我不希望并行读取帧可以在 MATLAB 中工作。视频阅读器是一个对象,它具有关于其位置的内部状态。您可能会尝试使用该对象的副本。看看这个: http://mathworks.com/help/matlab/ref/matlab.mixin.copyable-class.html

    【讨论】:

    • 嗨,Laleh,感谢您的回答。我以前看过那个副本页面,但真的不明白发生了什么。您能否简单解释一下它的作用以及为什么它适用于视频对象?
    • 免责声明:我要解释的更像是一个黑客,如果你没有得到你正在做的事情,请避免它!如果您希望能够使用 VideoRead 对象,则需要在每次迭代时对其进行复制。为了能够做到这一点,类定义必须将“matlab.mixin.Copyable”作为其超类。现在,VideoReader 具有“hgsetget”和“matlab.mixin.CustomDisplay”作为超类,因此您需要添加“matlab.mixin.Copyable”以便您可以制作 VideoRead 的副本。打开你安装matlab的toolbox\matlab\audiovideo\,需要管理员账号修改。
    • 谢谢拉莱,我会调查的。
    • 我没有管理“黑客”,所以我认为这个问题已经结束
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2016-12-22
    • 1970-01-01
    相关资源
    最近更新 更多