sgcBiometrics を 5 分で
Windows Biometric Framework を通じた、Delphi での Windows Hello と指紋認証です。このページでは、センサーを起動し、その前にいるユーザーを検証し、その人が誰かを識別します。センサーを初期化した後は、メソッド呼び出しが 2 つだけです。
Windows Biometric Framework を通じた、Delphi での Windows Hello と指紋認証です。このページでは、センサーを起動し、その前にいるユーザーを検証し、その人が誰かを識別します。センサーを初期化した後は、メソッド呼び出しが 2 つだけです。
コンポーネント 1 つ、センサーを起動する呼び出し 1 回、そして問いかける呼び出し 1 回です。事前に設定するものはありません。
TsgcWinBioFacial は SGC Biometrics パレットページにあり、sgcBiometrics.pas で宣言されています。Windows Hello の顔認証コンポーネントです。
TsgcWinBioFingerPrint は同じユニット、同じパレットページにあります。API の形は同じで、さらに登録とテンプレート管理が加わります。
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 の顔認証によるサインインが利用できるなら、コンポーネントに必要なものは揃っています。
デザイン時パッケージは実行時パッケージを参照するため、先に実行時パッケージをコンパイルしてください。
ダウンロードしたファイルをフォルダーに展開します。以下ではこのフォルダーを {$DIR} と呼びます。
ツール、オプション、環境オプション、ディレクトリの順に開きます。すべての RAD Studio バージョンに適用される {$DIR}\source を追加します。
バージョン固有のフォルダーも追加します。たとえば RAD Studio 13 では {$DIR}\libD13\$(Platform)、最も古いコンパイラーではプラットフォームの接尾辞なしの {$DIR}\libD7 までです。
lib フォルダーをシステムインクルードパスにも追加し、.bpi ファイルを含む dcp\$(Platform) フォルダーをライブラリパスに追加します。
お使いの IDE バージョン用の Packages\sgcBiometricsD13.groupproj を開きます。最初に sgcBiometricsD13.dpk をコンパイルし、次に dclsgcBiometricsD13.dpk をインストールします。SGC Biometrics というページが表示され、4 つのコンポーネントが含まれます。
センサーを起動してから、次の 2 つの問いのどちらかを投げかけます。想定した本人か、それとも、これは誰か。どちらも答えを直接返します。
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 を返します。
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 秒の任意のタイムアウトを取ります。
// 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認識された人のアカウント識別子を返し、誰も認識されなかった場合は空の文字列を返します。一致したかどうかではなく、誰なのかを知る必要があるときに使用します。
OnErrorprocedure(Sender: TObject; const aError: string; const aCode: Integer = 0)。コードは Windows Biometric Framework のエラーで、メッセージだけでは足りないときに役立ちます。
最初の試行で起きる問題のほとんどは、6 つのいずれかです。
センサーのセッションが開かれていません。InitializeSensors は Boolean を返し、デモは他の何よりも先にこれを確認しています。SessionIsOpen は、セッションがすでに有効かどうかを示すので、2 つ目を開くことはありません。
検証はセンサーの前にいる人を待ち、タイムアウトの既定値は 10 秒です。より短い値を渡すか、Asynchronous を設定して、代わりにイベントで結果を処理してください。
その名前のイベントはありません。キャプチャのイベントは OnCaptureSample で、センサーが拒否したサンプル用に、対になる OnCaptureSampleReject があります。
これらのイベントは Windows Biometric Framework の構造体を受け取るため、想像以上に多くのパラメーターがあります。OnVerify は、ID、サブファクター、拒否の詳細を含む 6 つを取ります。ハンドラーは手入力せずに、IDE に生成させてください。
できません。すべての WinBio ユニットは {$IFDEF SGC_WINBIO} で囲まれ、それは Windows のコンパイラーブロックでのみ定義されるため、Windows 以外ではユニットに型が含まれません。これは Windows のライブラリです。
システムプールではなく独自のテンプレートデータベースを扱うのは特権操作であり、指紋のデモにはそのための別のタブがあります。
4 つの方向があり、いずれも同じライブラリの中にあります。
指紋コンポーネントには、開始、繰り返しのキャプチャ、そしてコミットという、登録の全サイクルが備わっています。イベントはスワイプ回数と、テンプレートが新規かどうかを報告します。
ストレージとユーザーのコンポーネントはプライベートプールを実装しているため、テンプレートは Windows のシステムプールではなく自分のファイルに保存されます。管理下にある複数のマシンで同じ ID を使う必要がある場合に適しています。
顔認証コンポーネントは、カメラの前にいる人を継続的に監視し、人が到着したとき、認識されたとき、立ち去ったときにイベントを発生させます。操作者が席を離れた瞬間に画面をロックするのは、この方法です。
誰かにプロンプトを表示する前に、生体認証ユニット、データベース、既存の登録を一覧できます。そのため、分かりにくい失敗を、ハードウェアがないという明確なメッセージに変えられます。
2 つのデモプロジェクトがダウンロードに含まれており、1 つは顔認証用、もう 1 つは指紋認証用です。
| sgcBiometrics の機能 指紋コンポーネントと顔認証コンポーネントがそれぞれ公開しているものです。 | 開く | |
| エディションとパッケージ 製品のライセンス方法と、各パッケージに含まれるものです。 | 開く | |
| 製品概要 sgcBiometrics の用途と、その位置付けです。 | 開く | |
| 体験版のダウンロード 製品版と同じインストーラーで、期間限定です。 | 開く | |
| サポートへのお問い合わせ コードを書いた開発者からの、直接のメールサポートです。 | 開く | |
| すべての製品 eSeGeCe のすべてのライブラリの価格を 1 つの表にまとめています。 | 開く |
sgcBiometrics は Delphi と C++Builder 専用で、.NET 版はありません。各製品にはそれぞれクイックスタートがあり、はじめにのページに一覧があります。
TsgcWinBioFacial、指紋認証には TsgcWinBioFingerPrint です。どちらも sgcBiometrics.pas で宣言され、SGC Biometrics パレットページにあり、プライベートプールのストレージにのみ必要な TsgcWinBioStorageFile と TsgcWinBioUsersINI も同じページにあります。つまり、1 つではなく合計 4 つのコンポーネントです。
FacialRecognize が Boolean を返し、カメラの前の人が一致した場合に true になります。FacialIdentify は string、つまり認識された人のアカウント識別子を返し、誰も認識されなかった場合は空の文字列です。どちらも既定値 10 秒の任意のタイムアウトを取り、どちらもセンサーのセッションが必要で、それは InitializeSensors で開きます。
{$IFDEF SGC_WINBIO} で囲んでおり、その define は製品固有の sgcVer.inc の Windows のコンパイラーブロックにのみ現れ、すべてのユニットが uses 句に Windows を持っています。define がなければ、ユニットには型がまったく含まれません。sgcBiometrics は Windows のライブラリです。
winbio.dll を動的に読み込み、直接呼び出します。これには 2 つの意味があります。WinRT バインディングによって課される最新の RAD Studio という下限がないこと、そして API の範囲が WinRT のものではなく、Microsoft が Windows Biometric Framework として文書化しているものであることです。
SGC_WINBIO は、Delphi 7 以降のすべてのコンパイラーバージョンのブロックで定義されますが、1 つだけ例外があります。Delphi 2006 のブロックはバージョンマーカーのみを定義し、SGC_WINBIO は定義しないため、そのコンパイラーに限り、製品は何もない状態にビルドされます。
sgcVer.inc はコンパイラーバージョンのマップであり、SGC_EDT_* の define はまったくなく、階層によって制限されるものもないため、すべてのビルドにすべてのコンポーネントが含まれます。価格ページに表示される階層は、異なるライブラリではなく、商用のパッケージです。
OnVerify は 6 つ、OnIdentify は 4 つ、OnError は 3 つのパラメーターを持ちます。ハンドラーは IDE に生成させてください。OnCapture はなく、キャプチャのイベントは OnCaptureSample であることに注意してください。
TsgcWinBioStorageFile を通じて独自のテンプレートデータベースを保持するプライベートプールを扱うには管理者権限が必要で、同梱の指紋デモではそのために別のタブに分けています。