sgcBiometrics を 5 分で

Windows Biometric Framework を通じた、Delphi での Windows Hello と指紋認証です。このページでは、センサーを起動し、その前にいるユーザーを検証し、その人が誰かを識別します。センサーを初期化した後は、メソッド呼び出しが 2 つだけです。

Windows Hello の顔認証と指紋認証
Windows 専用、winbio.dll を使用
1 つのビルドで、機能による階層なし

最初のチェックに必要なもの

コンポーネント 1 つ、センサーを起動する呼び出し 1 回、そして問いかける呼び出し 1 回です。事前に設定するものはありません。

顔認証

TsgcWinBioFacial は SGC Biometrics パレットページにあり、sgcBiometrics.pas で宣言されています。Windows Hello の顔認証コンポーネントです。

指紋認証

TsgcWinBioFingerPrint は同じユニット、同じパレットページにあります。API の形は同じで、さらに登録とテンプレート管理が加わります。

さらに 2 つのコンポーネント

TsgcWinBioStorageFile と TsgcWinBioUsersINI は、システムプールを使わずにテンプレートの独自データベースを保持する場合の、プライベートプール用のストレージです。

プラットフォーム

Windows 専用です。ライブラリは実行時に winbio.dll を読み込み、すべてのユニットは {$IFDEF SGC_WINBIO} で囲まれているため、他のターゲットではユニットが何もない状態にコンパイルされます。

要件とエディション

sgcBiometrics には機能による階層がないため、この表はエディションではなく、コンパイラーとオペレーティングシステムについてのものです。

項目 内容
IDE Delphi 7、および Delphi 2007 から RAD Studio 13、さらに対応する C++Builder バージョン。SGC_WINBIO は、バージョンマーカーのみを定義する Delphi 2006 を除くすべてのコンパイラーバージョンのブロックで定義されるため、Delphi 2006 では製品が何もない状態にコンパイルされます。
uses 句 デモは sgcBiometrics_WinBio_Types, sgcBiometrics, sgcBiometrics_WinBio_Storage, sgcBiometrics_WinBio_Storage_File, sgcBiometrics_Classes, sgcBiometrics_Client, sgcBiometrics_WinBio_Client, sgcBiometrics_WinBio_Client_Facial と記述しています。単純な検証であれば、はるかに少ない数で済みます。
エディション ありません。製品固有の sgcVer.inc はコンパイラーバージョンのマップにすぎず、SGC_EDT_* の define はどこにもありません。すべてのビルドにすべてのコンポーネントが含まれます。
使用する Windows API 従来の Win32 の Windows Biometric Framework で、winbio.dll から動的に読み込まれます。WinRT ではないため、WinRT バインディングによって課される最近の RAD Studio という下限はありません。
プラットフォーム Windows 専用です。すべての WinBio ユニットはインターフェースと実装を {$IFDEF SGC_WINBIO} で囲んでおり、そのすべてが uses 句に Windows を持っています。define がなければ、ユニットには型がまったく含まれません。
ハードウェア Windows がすでに認識している生体認証センサーです。設定アプリで Windows Hello が動作するなら、コンポーネントも同じセンサーを検出します。

顔認証コンポーネントが使用する在席監視のイベントは、API の Windows 10 世代のものです。マシンで Windows Hello の顔認証によるサインインが利用できるなら、コンポーネントに必要なものは揃っています。

インストールとパレットページの確認

デザイン時パッケージは実行時パッケージを参照するため、先に実行時パッケージをコンパイルしてください。

1. 展開

ダウンロードしたファイルをフォルダーに展開します。以下ではこのフォルダーを {$DIR} と呼びます。

2. ライブラリパス

ツール、オプション、環境オプション、ディレクトリの順に開きます。すべての RAD Studio バージョンに適用される {$DIR}\source を追加します。

3. lib フォルダーの追加

バージョン固有のフォルダーも追加します。たとえば RAD Studio 13 では {$DIR}\libD13\$(Platform)、最も古いコンパイラーではプラットフォームの接尾辞なしの {$DIR}\libD7 までです。

4. C++Builder のみ

lib フォルダーをシステムインクルードパスにも追加し、.bpi ファイルを含む dcp\$(Platform) フォルダーをライブラリパスに追加します。

5. パッケージのビルド

お使いの IDE バージョン用の Packages\sgcBiometricsD13.groupproj を開きます。最初に sgcBiometricsD13.dpk をコンパイルし、次に dclsgcBiometricsD13.dpk をインストールします。SGC Biometrics というページが表示され、4 つのコンポーネントが含まれます。

約 10 行でユーザーを検証する

センサーを起動してから、次の 2 つの問いのどちらかを投げかけます。想定した本人か、それとも、これは誰か。どちらも答えを直接返します。

FFacial.pas
uses
  SysUtils, Classes,
  // sgc
  sgcBiometrics, sgcBiometrics_WinBio_Client,
  sgcBiometrics_WinBio_Client_Facial;

procedure TFRMFacial.btnFacialRecognizeClick(Sender: TObject);
begin
  if not Facial.SessionIsOpen then
  begin
    if Facial.InitializeSensors(10000) then
    begin
      if Facial.FacialRecognize then
        DoLog('#Recognized');
    end;
  end
  else
  begin
    if Facial.FacialRecognize then
      DoLog('#Recognized');
  end;
end;

InitializeSensors は Boolean を返し、ミリ秒単位のタイムアウトを取ります。SessionIsOpen は、すでにセッションがあるセンサーで 2 つ目のセッションを開くことを防ぎます。FacialRecognize は、カメラの前の人が一致した場合に True を返します。

FFacial.pas
procedure TFRMFacial.btnFacialIdentifyClick(Sender: TObject);
begin
  if not Facial.SessionIsOpen then
  begin
    if Facial.InitializeSensors(10000) then
      DoLog('#Identified: ' + Facial.FacialIdentify)
  end
  else
    DoLog('#Identified: ' + Facial.FacialIdentify);
end;

2 つの呼び出しの違いは、問いかけの内容です。FacialRecognize は「想定した本人か」を問い、Boolean を返します。FacialIdentify は「これは誰か」を問い、アカウント識別子を string として返し、誰も認識されなかった場合は空になります。どちらも、既定値 10 秒の任意のタイムアウトを取ります。

FFacial.pas
// Three parameters, and the third has a default.
// There is no OnCapture: the capture event is OnCaptureSample.
procedure TFRMFacial.FacialError(Sender: TObject; const aError: string;
  const aCode: Integer);
begin
  DoLog('Error: ' + aError + ' [' + IntToStr(aCode) + ']');
end;

他のイベントは Windows Biometric Framework の構造体を受け取るため、パラメーターリストが一般的な Delphi のイベントより長くなります。OnVerify は 6 つ、OnIdentify は 4 つのパラメーターを取ります。手入力せずに、オブジェクトインスペクターから生成してください。

3 つのタブはすべて、同梱のデモ Demos\Facial\FFacial.pas から取っており、何が起きたかを確認する手段であるため、ログの呼び出しは残しています。2 つ目のデモ Demos\FingerPrint では、登録、テンプレート管理、プライベートセンサープールを扱います。

呼び出しが返す答えを読み取る

どちらの問いも値を直接返すため、コードの最初のバージョンにはイベントハンドラーがまったく必要ありません。

InitializeSensors

センサーでセッションが開いた場合に True を返します。ここで False が返る場合は、通信する相手がなく、以降のどの呼び出しも動作しません。

FacialRecognize

その人が一致した場合に True を返します。認証プロンプトにとっては、この 1 つの真偽値が答えのすべてです。

FacialIdentify

認識された人のアカウント識別子を返し、誰も認識されなかった場合は空の文字列を返します。一致したかどうかではなく、誰なのかを知る必要があるときに使用します。

OnError

procedure(Sender: TObject; const aError: string; const aCode: Integer = 0)。コードは Windows Biometric Framework のエラーで、メッセージだけでは足りないときに役立ちます。

初回によくあるつまずき

最初の試行で起きる問題のほとんどは、6 つのいずれかです。

何も起きず、エラーも表示されない

センサーのセッションが開かれていません。InitializeSensors は Boolean を返し、デモは他の何よりも先にこれを確認しています。SessionIsOpen は、セッションがすでに有効かどうかを示すので、2 つ目を開くことはありません。

呼び出しがユーザーインターフェースをブロックする

検証はセンサーの前にいる人を待ち、タイムアウトの既定値は 10 秒です。より短い値を渡すか、Asynchronous を設定して、代わりにイベントで結果を処理してください。

OnCapture イベントを探している

その名前のイベントはありません。キャプチャのイベントは OnCaptureSample で、センサーが拒否したサンプル用に、対になる OnCaptureSampleReject があります。

イベントのシグネチャが一致しない

これらのイベントは Windows Biometric Framework の構造体を受け取るため、想像以上に多くのパラメーターがあります。OnVerify は、ID、サブファクター、拒否の詳細を含む 6 つを取ります。ハンドラーは手入力せずに、IDE に生成させてください。

他のプラットフォームではコンパイルできない

できません。すべての WinBio ユニットは {$IFDEF SGC_WINBIO} で囲まれ、それは Windows のコンパイラーブロックでのみ定義されるため、Windows 以外ではユニットに型が含まれません。これは Windows のライブラリです。

プライベートプールには管理者権限が必要

システムプールではなく独自のテンプレートデータベースを扱うのは特権操作であり、指紋のデモにはそのための別のタブがあります。

最初のチェックの先へ

4 つの方向があり、いずれも同じライブラリの中にあります。

独自のユーザーを登録する

指紋コンポーネントには、開始、繰り返しのキャプチャ、そしてコミットという、登録の全サイクルが備わっています。イベントはスワイプ回数と、テンプレートが新規かどうかを報告します。

sgcBiometrics の機能

独自のテンプレートデータベースを保持する

ストレージとユーザーのコンポーネントはプライベートプールを実装しているため、テンプレートは Windows のシステムプールではなく自分のファイルに保存されます。管理下にある複数のマシンで同じ ID を使う必要がある場合に適しています。

sgcBiometrics の機能

プロンプトだけでなく在席を監視する

顔認証コンポーネントは、カメラの前にいる人を継続的に監視し、人が到着したとき、認識されたとき、立ち去ったときにイベントを発生させます。操作者が席を離れた瞬間に画面をロックするのは、この方法です。

sgcBiometrics の機能

マシンにあるものを列挙する

誰かにプロンプトを表示する前に、生体認証ユニット、データベース、既存の登録を一覧できます。そのため、分かりにくい失敗を、ハードウェアがないという明確なメッセージに変えられます。

エディションとパッケージ

リファレンス、デモ、ドキュメント

2 つのデモプロジェクトがダウンロードに含まれており、1 つは顔認証用、もう 1 つは指紋認証用です。

sgcBiometrics の機能 指紋コンポーネントと顔認証コンポーネントがそれぞれ公開しているものです。
エディションとパッケージ 製品のライセンス方法と、各パッケージに含まれるものです。
製品概要 sgcBiometrics の用途と、その位置付けです。
体験版のダウンロード 製品版と同じインストーラーで、期間限定です。
サポートへのお問い合わせ コードを書いた開発者からの、直接のメールサポートです。
すべての製品 eSeGeCe のすべてのライブラリの価格を 1 つの表にまとめています。

sgcBiometrics は Delphi と C++Builder 専用で、.NET 版はありません。各製品にはそれぞれクイックスタートがあり、はじめにのページに一覧があります。

sgcBiometrics クイックスタートに関するよくある質問

Windows Hello の顔認識には TsgcWinBioFacial、指紋認証には TsgcWinBioFingerPrint です。どちらも sgcBiometrics.pas で宣言され、SGC Biometrics パレットページにあり、プライベートプールのストレージにのみ必要な TsgcWinBioStorageFile と TsgcWinBioUsersINI も同じページにあります。つまり、1 つではなく合計 4 つのコンポーネントです。
顔認証コンポーネントでは、FacialRecognize が Boolean を返し、カメラの前の人が一致した場合に true になります。FacialIdentify は string、つまり認識された人のアカウント識別子を返し、誰も認識されなかった場合は空の文字列です。どちらも既定値 10 秒の任意のタイムアウトを取り、どちらもセンサーのセッションが必要で、それは InitializeSensors で開きます。
いいえ。すべての WinBio ユニットは、インターフェース全体と実装全体を {$IFDEF SGC_WINBIO} で囲んでおり、その define は製品固有の sgcVer.inc の Windows のコンパイラーブロックにのみ現れ、すべてのユニットが uses 句に Windows を持っています。define がなければ、ユニットには型がまったく含まれません。sgcBiometrics は Windows のライブラリです。
いいえ、従来の Win32 の Windows Biometric Framework です。ライブラリは winbio.dll を動的に読み込み、直接呼び出します。これには 2 つの意味があります。WinRT バインディングによって課される最新の RAD Studio という下限がないこと、そして API の範囲が WinRT のものではなく、Microsoft が Windows Biometric Framework として文書化しているものであることです。
Delphi 7、および Delphi 2007 から RAD Studio 13、さらに対応する C++Builder バージョンです。SGC_WINBIO は、Delphi 7 以降のすべてのコンパイラーバージョンのブロックで定義されますが、1 つだけ例外があります。Delphi 2006 のブロックはバージョンマーカーのみを定義し、SGC_WINBIO は定義しないため、そのコンパイラーに限り、製品は何もない状態にビルドされます。
コード上にエディションはありません。製品の sgcVer.inc はコンパイラーバージョンのマップであり、SGC_EDT_* の define はまったくなく、階層によって制限されるものもないため、すべてのビルドにすべてのコンポーネントが含まれます。価格ページに表示される階層は、異なるライブラリではなく、商用のパッケージです。
3 つより多くあります。顔認証コンポーネントは 12 個、指紋コンポーネントは 18 個を公開しています。Windows Biometric Framework の構造体を受け取るため、パラメーターリストは一般的な Delphi のイベントより長くなります。OnVerify は 6 つ、OnIdentify は 4 つ、OnError は 3 つのパラメーターを持ちます。ハンドラーは IDE に生成させてください。OnCapture はなく、キャプチャのイベントは OnCaptureSample であることに注意してください。
Windows がすでに認識している生体認証センサーが必要で、実際には設定アプリで Windows Hello が動作することを意味します。システムプールに対する検証には、昇格は不要です。TsgcWinBioStorageFile を通じて独自のテンプレートデータベースを保持するプライベートプールを扱うには管理者権限が必要で、同梱の指紋デモではそのために別のタブに分けています。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

アプリに Windows Hello を追加する準備はできましたか?

体験版をダウンロードして、Hello がすでに設定されているマシンで顔認証のデモを実行してみてください。