OpenCV - 如何在我的局域网中的单独主机中处理视频的每一帧? [关闭]

Posted

技术标签:

【中文标题】OpenCV - 如何在我的局域网中的单独主机中处理视频的每一帧? [关闭]【英文标题】:OpenCV - How to process each frame of a video in a separate host in my LAN? [closed] 【发布时间】:2016-04-24 06:22:16 【问题描述】:

我必须大量处理视频的每一帧以提取信息。

为了加快处理速度,我想使用本地网络中的所有 PC。

如何安装允许在我的 LAN 的单独主机中处理每个帧的分布式系统?

【问题讨论】:

【参考方案1】:

您可以查看当今可用的各种分布式平台,无论是开源(如 Swarm、DistCC 或 IceCream,可能需要根据您的特定要求进行调整)还是商业和通用分布式计算平台,如 IncrediBuild为您提供远程节点上的分发和进程虚拟化(可能不需要您更改或调整您的代码)。

根据您稍后关于如何使用 IncrediBuild 执行此操作的问题:

无论何时在 C/C++ 中使用 OpenCV,您都可以以多进程方式编写代码(这是大多数分布式\集群系统的要求)。 一旦您这样做了,IncrediBuild 将能够通过将它们分发到网络上的远程计算机来加速您的流程执行。 IncrediBuild 使您能够通过网络将进程无缝分发到远程计算机,为了正确使用它,您的执行流应该能够并行执行多个进程(无论是执行该操作的批处理脚本还是生成多个进程的应用程序)并行进程)——IncrediBuild 然后将能够获取这些进程并远程执行它们。 我正在添加一个小样本,其中包含一个批处理脚本,该脚本并行执行多个进程,其中每个进程都是一个程序,它捕获单帧视频文件并将其保存为图像文件。当我使用我的机器和远程主机并行执行许多进程来执行这个场景时,结果是:这些进程同时使用我的本地内核和远程机器的内核并行执行。 您可以从以下位置下载示例流程的源代码和可执行文件: https://github.com/adish869/CaptureFrames 我还放置了 IncrediBuild 监控应用程序的打印屏幕文件,显示我的 OpenCV 进程在两台机器上并行执行。 您可以在 ReadMe.txt 文件中找到有关如何执行命令的更多信息。

免责声明,此答案的作者在 IncrediBuild 工作。

【讨论】:

谢谢,+1。如何在 IncrediBuild 中实现这一点? 我已经扩展了我的原始帖子以回答您关于如何使用 IncrediBuild 加速和分发 OpenCV 流程的问题。我还添加了一个示例链接,该示例展示了如何利用 IncrediBuild 通过利用远程机器的额外内核来加速 OpenCV 处理 感谢您提供的提示。【参考方案2】:

在规划分布式处理系统时需要考虑一个重要的权衡:延迟与吞吐量。

大多数现有的分布式平台都经过优化,可在延迟范围内实现更高的吞吐量。

如果您的系统需要一个大型视频文件并且最终只需要生成一些输出,那么您需要针对吞吐量进行优化,并且您可以为分布式处理平台选择任何现有的解决方案。 (我故意避免宣传特定品牌)。

如果您的系统需要一个视频流并且必须以低延迟实时输出另一个视频流,那么您应该避免使用任何现有产品并考虑自行实现计算分发。

【讨论】:

谢谢,+1。我是 OpenCV 方面的专家,但不是分布式计算方面的专家。虽然这是一个很好的答案,但初学者并不了解现有的平台和方法。可以明确指定存在的不同方法和工具。我相信很多 opencv 开发者都会喜欢它。 然后你会想在你的网络节点上安装一个集群软件并学习一些API,比如openMPI、mapReduce和任何其他适合你需要的分布式编程API。

以上是关于OpenCV - 如何在我的局域网中的单独主机中处理视频的每一帧? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从局域网中的不同设备访问虚拟主机

在 PHP 中处理货币值的最佳实践?

如何将opencv中的库函数提取出来单独使用

让局域网中的其他计算机都能连接上我的电脑virtualbox虚拟出来的ubuntu

如何在我的 OpenCV iOS 应用程序中捆绑/存储应用程序图像数据?

虚拟机总是访问不了主机