在openCV中打开多个程序中的摄像头

时间:2015-11-14 16:23:26

标签: opencv parallel-processing webcam distributed-computing low-latency

如何在同时使用 openCV 编写的多个程序中打开单个网络摄像头。顺便说一句,我已经附加了3个网络摄像头,所有这些都在openCV的任何一个程序都正常工作,但为什么两个程序不能同时使用它们?

这是限制还是有解决方法?

1 个答案:

答案 0 :(得分:3)

是,这是一个限制

的意图

为什么呢?概念视图与硬件控制层有关。操作系统假定有一些外围设备可以按需使用,但保持其使用环境不可共享。

例如,可以假设USB鼠标。虽然它可以在几个过程中使用,但是一些推理告诉架构师,但不一定是一只鼠标应该将事件输入到多个 - ( window ) - 框架 -context (是,对,又称过程)

其他一些外设甚至是EventSENSOREventCOLLECTOR的实例,例如USB-Cameras可以接收和处理来自操作系统的信号以重新调整其物理状态(Pan-Tilt-以缩放为例。)

更明显的是1:1关系假设,这是我们有时可能希望不在那里硬编码的东西。另一方面,如果一个流程同时指示 go-left 和另一个 go-right ,那么穷人设备会做什么?

同样,如果一个USB鼠标将其动作和其他MMI交互事件发送到所有当前正在运行的进程,谁会很高兴?至少Drag& Drop UI导航政策将成为一个有趣的乐透。

是,有一个解决方法

最简单的“足够”方案包括 aCameraControllerPROCESS ,它与USB设备保持1:1的关系并具有视觉 { {1}} - 获取责任。这里纳秒很重要,因此除了将字节移动到缓冲区之外,不要在任何其他内容上花费data。所有其他处理应保留在CPU_CLK,其中 aVisualDataViewConsumerPROCESS 可能(并且花费数十和数百微秒它是自己的。

Multi-process distributed openCV processing of visual-<code>data</code>

此外,它还有一个通信/服务配置部分,它允许其他分布式进程以并行方式访问获取的可视化openCV(以非阻塞,并发查看方式,是分布式软实时处理的必要条件。)

如果一个人的架构需要更多功能或替代方案,这种分层方法允许用户添加功能,同时在可接受的信封内保留控制和性能开销。

如果使用 data 并使用零拷贝 {{1>,那么良好的实施可能会保持非常智能,快速,低延迟和纤薄(资源方面)几乎抽象的传输类,其中一个确实失去了几乎零延迟作为技巧的成本,但获得了强大,可大规模分发的强大功能< sub> one可以扩展到超过一,二,十,数千......,你可以命名为...免费主机