UVC彩色摄像头与红外(IR)摄像头相机
常见的UVC摄像头叫彩色相机,是通过摄像头镜头将捕捉的彩色画面进行感光,数据压缩,再通过USB线缆传递给我们的主机,通过我们普通的相机应用软件打开该彩色相机,就可以实时的查看它的彩色画面了。我们经常见到的UVC摄像头基本上全是这类相机。
不过,现实中还有一种特殊的相机,它不是捕捉彩色画面的,而是通过红外镜头或其它传感器捕捉的是某种信息的对比度,如温度。它们采集到的数据是对这种信息的量化值,其一般是通过灰度进行显示。这种相机一般叫做非颜色传感器相机,也叫灰度,红外(IR)或深度相机。
从Windows10开始,其UVC驱动对UVC当前的3个版本(UVC1.0,UVC1.1,UVC1.5)在支持颜色相机的基础上,额外扩展开始支持这种非颜色相机或者叫传感器相机。
UVC规范规定了符合UVC相机的数据传输规范,所以从理论上来讲,这种红外(IR)摄像头相机也应该是符合UVC规范的,但应又有所区别。这种区别应该是基于UVC规范的一些扩展信息上,这种扩展信息应是普通彩色机机所不俱有,但红外机所独有的,并且系统以此来区别两种相机。
Windows系统通过USB二进制设备对象存储(BOS)来获取的信息来进行两种相机的区分。
当然,一个相机从接入电脑开始枚举后,就指明了其是否支持非颜色传感器相机的功能。如果不支持,即是颜色相机,会注册在
KSCATEGORY_VIDEO_CAMERA下,如果是非颜色相机,其会注册在KSCATEGORY_SENSOR_CAMERA下,如果两者都支持,需要在KSCATEGORY_VIDEO_CAMERA和KSCATEGORY_VIDEO_CAMERA下都注册。
- KSCATEGORY_VIDEO_CAMERA :{E5323777-F976-4f5b-9B55-B94699C46E44}
- KSCATEGORY_SENSOR_CAMERA :{24E552D7-6523-47F7-A647-D3465BF1F5CA}
而以上的GUID为设备在Windows驱动中通过IoRegisterInterface注册的链接名。
由于本人电脑中暂没有红外摄像头,故这里我们以KSCATEGORY_VIDEO_CAMERA为例,打开注册表:
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{e5323777-f976-4f5b-9b55-b94699c46e44}
展开某个项:
可以看到,这个注册表路径下注册了我们系统中所有的彩色相机,并且包含这些相机的惟一实例名。
由于彩色相机与非彩色相机注册的目录不同,故针对不同的相机的应用程序会过滤掉并不属于其类中的相机。比如彩色相机的应用程序如我们常见的Potplayer这类程序,并不能枚举到非彩色机。同理亦然。当然如果一个相机同时注册在KSCATEGORY_VIDEO_CAMERA和KSCATEGORY_VIDEO_CAMERA下,会被2类相应机应程序同时发现并可使用。
Windows系统使用SensorCameraMode 和 SkipCameraEnumeration的给合来指定相机的属性类型,上述2个属性的值可通过BOS指定也可以通过注册表来指定。
SensorCameraMode | SkipCameraEnumeration | 注册分类 |
---|---|---|
1 | 1 | KSCATEGORY_SENSOR_CAMERA |
2 | 未指定 | KSCATEGORY_VIDEO_CAMERA和KSCATEGORY_VIDEO_CAMERA |
未指定 | 未指定 | KSCATEGORY_VIDEO_CAMERA |