OpenCV - 如何在我的 LAN 中的单独主机中处理视频的每一帧?

OpenCV - How to process each frame of a video in a separate host in my LAN?

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

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

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

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

大多数现有的分布式平台都针对延迟范围内的更高吞吐量进行了优化。

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

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

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

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

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

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