如何在同时使用 openCV
编写的多个程序中打开单个网络摄像头。顺便说一句,我已经附加了3个网络摄像头,所有这些都在openCV
,的任何一个程序都正常工作,但为什么两个程序不能同时使用它们?
这是限制还是有解决方法?
答案 0 :(得分:3)
为什么呢?概念视图与硬件控制层有关。操作系统假定有一些外围设备可以按需使用,但保持其使用环境不可共享。
例如,可以假设USB鼠标。虽然它可以在几个过程中使用,但是一些推理告诉架构师,但不一定是一只鼠标应该将事件输入到多个 - ( window )
- 框架 -context (是,对,又称过程)
其他一些外设甚至是EventSENSOR
和EventCOLLECTOR
的实例,例如USB-Cameras可以接收和处理来自操作系统的信号以重新调整其物理状态(Pan-Tilt-以缩放为例。)
更明显的是1:1关系假设,这是我们有时可能希望不在那里硬编码的东西。另一方面,如果一个流程同时指示 go-left
和另一个 go-right
,那么穷人设备会做什么?
同样,如果一个USB鼠标将其动作和其他MMI交互事件发送到所有当前正在运行的进程,谁会很高兴?至少Drag& Drop UI导航政策将成为一个有趣的乐透。
最简单的“足够”方案包括 aCameraControllerPROCESS
,它与USB设备保持1:1的关系并具有视觉 { {1}} - 获取责任。这里纳秒很重要,因此除了将字节移动到缓冲区之外,不要在任何其他内容上花费data
。所有其他处理应保留在CPU_CLK
,其中 aVisualDataViewConsumerPROCESS
可能(并且将)花费数十和数百微秒它是自己的。
此外,它还有一个通信/服务配置部分,它允许其他分布式进程以并行方式访问获取的可视化openCV
(以非阻塞,并发查看方式,是分布式软实时处理的必要条件。)
如果一个人的架构需要更多功能或替代方案,这种分层方法允许用户添加功能,同时在可接受的信封内保留控制和性能开销。
如果使用 data
并使用零拷贝 {{1>,那么良好的实施可能会保持非常智能,快速,低延迟和纤薄(资源方面)几乎抽象的传输类,其中一个确实失去了几乎零延迟作为技巧的成本,但获得了强大,可大规模分发的强大功能< sub> one可以扩展到超过一,二,十,数千......,你可以命名为...免费主机