カメラ ドライバー構築ガイド

このトピックでは、赤外線 (IR) カメラについて顔認証を有効にする方法について説明します。これは、デバイスでこの機能を提供する元の機器メーカー (OEM) および独立系ハードウェア ベンダー (IHV) を対象としています。

FrameServer

次の図は、FrameServer を介した新しいドライバー スタックでの顔認証のしくみを示しています。

windows hello と frameserver。

顔認証 DDI

Windows 10 バージョン 1607 では、Windows Hello をサポートするために、 2 つの新しい顔認証 DDI コンストラクトが利用できます。

  • 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 ストリームがないためにこのカメラを通常のカメラ アプリから非表示にするには、次のように skip 列挙フラグを使用します。

HKR,,SkipCameraEnumeration,0x00010001,0x00000001

これにより、カメラがKSCATEGORY_VIDEOから削除されます。これにより、通常のカメラ アプリによるレガシ列挙によって列挙されなくなります。

SkipCameraEnumeration エントリと SensorCameraMode エントリの両方を 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 属性が定義されている場合は、1 つのストリームのみが Windows Hello 対応である必要があるため、テストに失敗します。

    • MF_DEVICESTREAM_ATTRIBUTE_FRAMESOURCE_TYPESこのストリームの IR に設定されていない場合は、このストリームに RGB メディアの種類を指定できないので、テストに失敗します。

    • このストリームを選択し、メディアの種類が Windows Hello 対応 (MJPG/L8/NV12) であり、解像度が 320 x 320 ピクセル以上であることを確認します。

      1. 顔認証プロファイルがサポートされている場合は、プロファイル メディアの種類に対してこのストリームを検証します。

      2. 顔認証プロファイルがサポートされていない場合は、このストリームの既定のメディアの種類を検証します。

    • 顔認証 DDI のプロパティの 1 つ (照明付き/非照明またはアンビエント減算) のサポートを確認します。

    • KS プロパティをサポートされているプロパティに設定します。

    • ストリーミングを開始する

  3. 実行時のプロパティを確認します

    • タイムスタンプの精度を確認します (メタデータを使用した顔認証のプレビュー テスト)。

    • 起動時間が 500 ミリ秒未満であることを確認します (メタデータによる顔認証のプレビュー テスト)。

    • 以下のパラメータで、最小フレームレートでのストリーミングを検証します。照明下 15FPS、アンビエント 15FPS、またはアンビエント減算 15FPS: 解像度 320 × 320 ピクセル以上、メディアタイプ L8/NV12、サンプル上で正のストライド。

      1. 照明プロパティが有効になっている場合は、フレーム (15 FPS で照明付き/非照明ペア フレーム) のメタデータをチェックします。

      2. アンビエント減算プロパティが有効になっている場合は、フレーム (15 FPS のアンビエント フレーム) にメタデータがないことをチェックします。

  4. ストリーミングを停止します

  5. KSコントロールの設定を解除します

  6. RGB + IR のコンカレンシー: カメラ プロファイルで定義されている場合にテストされます

上記の HLK テストに合格しなかった場合、Microsoft は署名されたドライバーを OEM に発行せず、Windows Hello は動作しません。

MediaCaptureで写真やビデオをキャプチャする

Windows.Media.Capture namespace