动态获取奥比UVC设备索引号的方法
2023-09-27 14:25:47 时间
问题:获取UVC流的方式有多种,openCV或者DShow,WMF等。
而通过openCV的方式比较常用,但是采用opencv接口获取UVC流时,采用的索引号的方式。在连接了多个不同UVC设备时,系统的索引号不一样,能否动态的获取到奥比的UVC流?
解决办法:
利用奥比的usb的vid,利用DShow枚举设备,获取到的vid跟奥比设备比较,相同就记录下设备的索引号。再利用openCV打开UVC流。
注意:该种处理办法,在连接多个奥比UVC设备时,无效。目前没有找到绑定RGB模组和depth模组绑定的方法。
枚举UVC设备,并检测奥比RGB模组,返回索引号截图如下:
int GetOrbUvcDevIdx(void)
{
ICreateDevEnum *pDevEnum = NULL;
IEnumMoniker *pEnum = NULL;
int deviceCounter = 0;
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,
reinterpret_cast<void**>(&pDevEnum));
int idx = -1;
int flagi= -1;
if (SUCCEEDED(hr))
{
// Create an enumerator for the video capture category.
hr = pDevEnum->CreateClassEnumerator(
CLSID_VideoInputDeviceCategory,
&pEnum, 0);
if (hr == S_OK)
{
//printf("SETUP: Looking For Capture Devices\n");
IMoniker *pMoniker = NULL;
while (pEnum->Next(1, &pMoniker, NULL) == S_OK)
{
//get device idx
flagi++;
TCHAR szBuf[512];
WCHAR *wszDisplayName = NULL;
if (SUCCEEDED(pMoniker->GetDisplayName(0, 0, &wszDisplayName)))
{
if (wszDisplayName)
{
wcscpy(szBuf, wszDisplayName);
CoTaskMemFree(wszDisplayName);
if (wcsstr(szBuf, L"vid_2bc5"))
{
//printf("------find 2bc5\n");
idx = flagi;
}
//wprintf(L"%s\n", szBuf);
}
}
pMoniker->Release();
pMoniker = NULL;
deviceCounter++;
}
pDevEnum->Release();
pDevEnum = NULL;
pEnum->Release();
pEnum = NULL;
}
}
return idx;
}
备注:
点击下面链接,进入奥比中光开发者社区,了解更多3D视觉技术信息:
https://developer.orbbec.com.cn/
或扫描下方二维码,进入奥比中光开发者社区:
相关文章
- 使用Spacedesk实现扩展主机屏幕到联网设备
- 暗渡陈仓:用低消耗设备进行破解和渗透测试2.2.2 BeagleBone
- 《HTML5移动应用开发入门经典》—— 1.5 在iOS和Android设备中使用HTML5
- 《可穿戴创意设计:技术与时尚的融合》一一1.3 可穿戴设备和艺术
- 移动端 H5 分屏页面适配问题--设计稿比例与设备宽高比例不同
- 大数据驱动五大智能连接 构建设备+云服务完美体验
- 【正点原子MP157连载】第三十五章 设备树下的platform驱动编写-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
- 从设备配置上优化数据中心能耗的三种方法
- 图尔克推行户RFID设备控制器TBEN-L-DCC,可进行数据控制
- GNS3路由器设备间ping不通的排查方法
- 北京公交wifi开启1个月 仍有车辆未安装设备
- 延长数据中心设备使用年限?这些策略来助攻
- 逆天闪存设备 居然能将数据保存至少百年