相机驱动程序调用指南

本主题讨论如何为红外 (IR) 相机启用人脸身份验证,适用于希望在其设备中提供此功能的原始设备制造商 (OEM) 和独立硬件供应商 (IHV)。

FrameServer

下图显示了人脸身份验证如何通过 FrameServer 与新的驱动程序堆栈一起工作:

Windows Hello 和 FrameServer。

人脸身份验证 DDI

在 Windows 10 1607 版本中,有两种新的人脸身份验证 DDI 构造可用于支持 Windows Hello:

  • KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE

    此属性 ID 用于使用以下标志在驱动程序中打开和配置人脸身份验证:

    • KSCAMERA_EXTENDEDPROP_FACEAUTH_MODE_DISABLED

    • KSCAMERA_EXTENDEDPROP_FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION

    • KSCAMERA_EXTENDEDPROP_FACEAUTH_MODE_BACKGROUND_SUBTRACTION

    有关此控件以及如何使用位标志设置人脸身份验证模式的详细信息,请参阅 KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE 主题。

  • MF_CAPTURE_METADATA_FRAME_ILLUMINATION

    IR 相机的此元数据属性指定帧使用主动 IR 照明。 有关详细信息,请参阅捕获统计信息元数据属性主题中的必需元数据属性表。

USB 相机支持

若要为设备上的红外相机启用人脸身份验证,必须提供正确配置的 DeviceMFT 组件和 USB 视频类 (UVC) 扩展单元。

配置 DeviceMFT 组件

作为在设备上构建支持人脸身份验证的 DeviceMFT 组件的起点,可以使用 sampledevicemft 示例。

若要修改驱动程序示例,请对示例源代码进行以下更改:

  1. 在 DeviceMFT 组件中添加源类型信息

  2. 在 DeviceMFT 组件中标记照明标志

  3. 将 DeviceMFT 组件中的 IKSControl 转换为与将在下一节中生成的 UVC 扩展单元通信:

生成 USB 视频类 (UVC) 扩展单元

若要为设备生成 UVC 扩展单元,请按照生成扩展单元示例控件中的说明进行操作。 本主题包含有关创建所需项目文件的信息,并提供指向以下主题中的示例代码的链接:

UVC 扩展单元的示例接口(包含 Interface.idl

示例扩展单元插件 DLL(包含 Xuproxy.hXuproxy.cpp

UVC 扩展单元的示例注册表项(包含 Xusample.rgs

UVC 扩展单元应用示例(包含 TestApp.cpp

支持扩展单元的自动更新事件

示例扩展单元描述符

提供 UVC INF 文件

有关示例代码模块如何协同工作的详细信息,请参阅扩展单元插件体系结构主题。

INF 文件条目

若要在 KSCATEGORY_SENSOR_CAMERA 下注册 UVC 设备,应指定传感器相机促销标志:

HKR,,SensorCameraMode,0x00010001,0x00000001

若要从常规相机应用中隐藏此相机,因为它没有 RGB 流,请使用跳过枚举标志,如下所示:

HKR,,SkipCameraEnumeration,0x00010001,0x00000001

这会从 KSCATEGORY_VIDEO中删除相机,这会阻止它通过常规相机应用通过旧枚举进行枚举。

SkipCameraEnumerationSensorCameraMode 条目都应放在 INF 文件的 DDInstall.HW 节中。

用于 KSCATEGORY_SENSOR_CAMERA 的 HLK 测试以帮助驱动程序测试

IR 和 RGB 相机模块都需要硬件徽标工具包 (HLK) 测试。 此测试验证用于 Windows Hello 人脸身份验证的 RGB 和 IR 相机的基本功能。 RGB 相机要求已在 HLK 测试套件中指定。

IR 相机模块需要通过以下测试才能启用:

  1. 枚举所有 KS 传感器类别相机:

    • 支持 IR 流的设备必须属于 SENSOR_CAMERA 类别。

    • 支持 RGB 流的设备属于 VIDEO_CAMERA 类别。

    • 仅适用于支持 IR 和 RGB 流的单个相机设备,应同时在 KSCAMERA 类别下注册该设备:SENSOR_CAMERA 和 VIDEO_CAMERA。

  2. 查找定义了 MF_DEVICESTREAM_ATTRIBUTE_FACEAUTH_CAPABILITY 属性的流:

    • 如果没有流定义了 MF_DEVICESTREAM_ATTRIBUTE_FACEAUTH_CAPABILITY 属性,则跳过测试。

    • 如果多个流定义了 MF_DEVICESTREAM_ATTRIBUTE_FACEAUTH_CAPABILITY 属性,则测试失败,因为只有一个流才支持 Windows Hello。

    • 如果此流的 MF_DEVICESTREAM_ATTRIBUTE_FRAMESOURCE_TYPES 未设置为 IR,则测试失败,因为此流上不能有 RGB 媒体类型。

    • 选择此流并验证媒体类型是否支持 Windows Hello (MJPG/L8/NV12),以及分辨率是否大于或等于 320 x 320 像素:

      1. 如果支持人脸身份验证配置文件,请针对配置文件媒体类型验证此流。

      2. 如果不支持人脸身份验证配置文件,请验证此流的默认媒体类型。

    • 检查人脸身份验证 DDI 中某个属性的支持:照亮/未照亮或环境减法。

    • 将 KS 属性设置为受支持的属性。

    • 启动流式处理

  3. 检查运行时属性:

    • 验证时间戳精度(使用元数据进行人脸身份验证预览测试)。

    • 验证启动时间是否小于500毫秒(使用元数据进行人脸身份验证预览测试)。

    • 使用以下参数验证以最小帧率进行流式处理:15 FPS 照明和 15 FPS 环境或 15 FPS 环境减法,分辨率大于或等于 320 x 320 像素,媒体类型 L8/NV12,样本上的正步幅:

      1. 如果已启用照明属性,请检查帧上的元数据(15 FPS 为照亮/非照亮对帧)。

      2. 如果启用了环境减法属性,请检查帧上是否没有元数据(环境帧为 15 FPS)。

  4. 停止流式处理

  5. 取消设置 KS 控件

  6. RGB + IR 的并发性:如果在相机配置文件中定义,则进行测试

如果未通过上面列出的 HLK 测试,Microsoft 将不会向 OEM 颁发签名驱动程序,并且 Windows Hello 也将无法运行。

使用 MediaCapture 捕获照片和视频

Windows.Media.Capture 命名空间