Kinect设备与摄像头冲突



我正在做一个涉及kinect设备和另一个USB网络摄像头的项目。kinect部分和网络摄像头部分是分开构建的,并按预期工作,但只有在集成步骤中,我才发现我的网络摄像头不能每次将我的kinect设备插入同一台计算机。

Kinect设备使用Microsoft Kinect SDK运行,网络摄像头使用OpenCV连接,OpenCV使用DirectShow来方便连接。

我试过用virtualdub等其他程序和其他方式通过Directshow访问网络摄像头,每次它在拔掉Kinect时都能工作,而在插上Kinect时就停止工作了。

我认为这可能与网络摄像头电源不足有关,但Directshow能够在无法获得视频流的情况下识别网络摄像头。网络摄像头和kinect设备位于电脑的两端,这样它们就不会互相产生电流。摄像头没有外部电源,只能通过USB线运行,但我也尝试过使用外部供电的USB集线器运行摄像头,问题仍然存在。

是什么导致Directshow在每次连接Kinect设备与网络摄像头同时连接时弄乱了网络摄像头连接?有什么方法可以让我检查Directshow关于网络摄像头的问题吗?

以下是部分答案。问题是你的电脑有一组USB主机控制器。您可以在"通用串行总线控制器"树的设备管理器中看到该列表。您的PC将只有一个"USB2增强型主机控制器"和几个"USB通用主机控制器"条目。当一个设备被加载时,Windows内核决定什么主机控制器是需要的,并且适合于这个设备。例如,打印机对带宽的需求很低,通用主机就可以了。所有摄像头和Kinect设备都需要一个增强主机,因此网络摄像头和Kinect最终都在同一个主机上。即使没有明显的进程使用它,Kinect LED也会闪烁,所以我怀疑Kinect驱动程序正在使用一些(或大量)USB带宽。在连接USB数据包监控应用程序之前,我无法确定。如果Kinect正在使用带宽,这就解释了为什么你的DirectShow应用程序可以访问网络摄像头。

那么该怎么办呢?

我这里有两个旧的双XEON工作站(惠普和戴尔),它们使用相同的英特尔88201芯片组,带有一个增强型主机和多个通用主机。不可能在通用主机上加载增强驱动程序。一台较新的宏碁笔记本电脑有多个增强主机,我可以同时从网络摄像头传输视频,并显示Kinect的视频。

唯一的解决方案是另一个PCI或PCI-e USB2或USB3卡支持增强驱动程序。我正在我的网站上准备一份技术说明,提供更多细节。

S DPiXCL Automation Technologies, Canada.

最新更新