sgcBiometrics in fünf Minuten

Windows Hello und Fingerabdruck-Authentifizierung in Delphi, über das Windows Biometric Framework. Diese Seite startet einen Sensor, verifiziert den Benutzer davor und identifiziert, wer er ist. Zwei Methodenaufrufe, sobald der Sensor initialisiert ist.

Windows Hello Gesicht und Fingerabdruck
Nur Windows, über winbio.dll
Ein Build, keine Funktionsstufen

Was die erste Prüfung benötigt

Eine Komponente, ein Aufruf, um den Sensor zu starten, und ein Aufruf, um die Frage zu stellen. Vorher ist nichts zu konfigurieren.

Gesicht

TsgcWinBioFacial auf der Palettenseite SGC Biometrics, deklariert in sgcBiometrics.pas. Das ist die Windows-Hello-Komponente für das Gesicht.

Fingerabdruck

TsgcWinBioFingerPrint, gleiche Unit, gleiche Palettenseite. Dieselbe API-Form, obendrauf mit Registrierung und Template-Verwaltung.

Zwei weitere Komponenten

TsgcWinBioStorageFile und TsgcWinBioUsersINI, für die Speicherung in einem privaten Pool, wenn du eine eigene Datenbank von Templates führst, statt den Systempool zu verwenden.

Plattform

Nur Windows. Die Bibliothek lädt winbio.dll zur Laufzeit, und jede Unit ist in {$IFDEF SGC_WINBIO} eingeschlossen, sodass die Units auf jedem anderen Ziel zu gar nichts kompiliert werden.

Voraussetzungen und Editionen

sgcBiometrics hat keine Funktionsstufen, daher geht es in dieser Tabelle um Compiler und das Betriebssystem und nicht um Editionen.

Was Wert
IDE Delphi 7 sowie Delphi 2007 bis RAD Studio 13, dazu die passenden C++Builder-Versionen. SGC_WINBIO wird in jedem Compilerversionsblock außer Delphi 2006 definiert, der nur seine Versionsmarkierung definiert, sodass das Produkt unter Delphi 2006 zu nichts kompiliert wird.
Uses-Klausel Die Demo schreibt sgcBiometrics_WinBio_Types, sgcBiometrics, sgcBiometrics_WinBio_Storage, sgcBiometrics_WinBio_Storage_File, sgcBiometrics_Classes, sgcBiometrics_Client, sgcBiometrics_WinBio_Client, sgcBiometrics_WinBio_Client_Facial. Für ein einfaches Verifizieren brauchst du weit weniger.
Editionen Es gibt keine. Die sgcVer.inc des Produkts ist eine reine Compilerversions-Tabelle und sonst nichts, ohne irgendein SGC_EDT_*-Define. Jede Komponente ist in jedem Build enthalten.
Welche Windows-API Das klassische Win32 Windows Biometric Framework, dynamisch aus winbio.dll geladen. Es ist nicht WinRT, daher gibt es keine durch WinRT-Bindungen erzwungene Mindestversion von RAD Studio.
Plattform Nur Windows. Jede WinBio-Unit schließt ihr Interface und ihre Implementierung in {$IFDEF SGC_WINBIO} ein, und jede von ihnen hat Windows in der Uses-Klausel. Ohne das Define enthalten die Units überhaupt keine Typen.
Hardware Ein biometrischer Sensor, den Windows bereits erkennt. Wenn Windows Hello in der Einstellungen-App funktioniert, findet die Komponente denselben Sensor.

Die Präsenzüberwachungs-Ereignisse der Gesichtskomponente gehören zur Windows-10-Generation der API. Wenn die Anmeldung per Windows-Hello-Gesicht auf dem Rechner verfügbar ist, hat die Komponente, was sie braucht.

Installieren und die Palettenseite finden

Kompiliere das Laufzeitpaket, bevor du das Entwurfszeitpaket installierst, denn Letzteres verweist auf Ersteres.

1. Entpacken

Entpacke den Download in einen Ordner, unten {$DIR} genannt.

2. Bibliothekspfad

Tools, Optionen, Umgebungsoptionen, Verzeichnisse. Füge {$DIR}\source hinzu, was für jede RAD-Studio-Version gilt.

3. Den lib-Ordner hinzufügen

Füge außerdem den versionsspezifischen Ordner hinzu, zum Beispiel {$DIR}\libD13\$(Platform) bei RAD Studio 13, bis hinunter zu {$DIR}\libD7 ohne Plattform-Suffix bei den ältesten Compilern.

4. Nur C++Builder

Lege den lib-Ordner außerdem in den System-Include-Pfad und den Ordner dcp\$(Platform), der die .bpi-Dateien enthält, in den Bibliothekspfad.

5. Pakete erstellen

Öffne Packages\sgcBiometricsD13.groupproj für deine IDE-Version. Kompiliere zuerst sgcBiometricsD13.dpk und installiere dann dclsgcBiometricsD13.dpk. Es erscheint eine Seite namens SGC Biometrics mit vier Komponenten.

Einen Benutzer verifizieren, in etwa zehn Zeilen

Starte den Sensor und stelle dann eine von zwei Fragen: Ist das die erwartete Person, oder wer ist das? Beide liefern direkt eine Antwort.

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 liefert ein Boolean und nimmt einen Timeout in Millisekunden entgegen. SessionIsOpen verhindert, dass du eine zweite Sitzung auf einem Sensor öffnest, der bereits eine hat. FacialRecognize liefert True, wenn die Person vor der Kamera übereinstimmte.

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;

Der Unterschied zwischen den beiden Aufrufen ist die Frage. FacialRecognize fragt „Ist das die erwartete Person“ und liefert ein Boolean. FacialIdentify fragt „Wer ist das“ und liefert die Konto-Kennung als string, leer, wenn niemand erkannt wurde. Beide nehmen einen optionalen Timeout entgegen, der standardmäßig zehn Sekunden beträgt.

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;

Die anderen Ereignisse tragen Strukturen des Windows Biometric Framework, ihre Parameterlisten sind daher länger als bei einem typischen Delphi-Ereignis. OnVerify nimmt sechs Parameter entgegen und OnIdentify vier. Generiere sie im Objektinspektor, statt sie zu tippen.

Alle drei Tabs stammen aus der mitgelieferten Demo Demos\Facial\FFacial.pas, wobei die Log-Aufrufe beibehalten wurden, weil du damit siehst, was passiert ist. Eine zweite Demo, Demos\FingerPrint, behandelt Registrierung, Template-Verwaltung und den privaten Sensor-Pool.

Die Antwort lesen, die der Aufruf liefert

Beide Fragen liefern direkt einen Wert, die erste Version deines Codes braucht also überhaupt keinen Ereignisbehandler.

InitializeSensors

Liefert True, wenn eine Sitzung auf einem Sensor geöffnet wurde. Ein False bedeutet hier, dass es nichts gibt, womit gesprochen werden kann, und kein späterer Aufruf funktionieren wird.

FacialRecognize

Liefert True, wenn die Person übereinstimmte. Dieser einzelne Boolean ist die gesamte Antwort für eine Authentifizierungsabfrage.

FacialIdentify

Liefert die Konto-Kennung desjenigen, der erkannt wurde, und einen leeren String, wenn niemand erkannt wurde. Verwende es, wenn du wissen musst, wer, statt ob.

OnError

procedure(Sender: TObject; const aError: string; const aCode: Integer = 0). Der Code ist der Fehler des Windows Biometric Framework, den du willst, wenn die Meldung allein nicht reicht.

Was beim ersten Mal meistens schiefgeht

Sechs Probleme erklären fast jeden ersten Versuch.

Nichts passiert und kein Fehler erscheint

Die Sensorsitzung wurde nie geöffnet. InitializeSensors liefert ein Boolean, und die Demo prüft es, bevor sie irgendetwas anderes tut. SessionIsOpen sagt dir, ob bereits eine Sitzung aktiv ist, damit du keine zweite öffnest.

Der Aufruf blockiert die Benutzeroberfläche

Die Verifizierung wartet auf die Person vor dem Sensor, und der Timeout beträgt standardmäßig zehn Sekunden. Übergib einen kürzeren oder setze Asynchronous und steuere das Ergebnis stattdessen über die Ereignisse.

Du suchst ein Ereignis OnCapture

Ein Ereignis mit diesem Namen gibt es nicht. Das Capture-Ereignis heißt OnCaptureSample, und es gibt das Gegenstück OnCaptureSampleReject für eine Probe, die der Sensor abgelehnt hat.

Die Ereignissignatur passt nicht

Diese Ereignisse tragen die Strukturen des Windows Biometric Framework, sie haben also mehr Parameter, als du erwarten könntest. OnVerify nimmt sechs entgegen, darunter die Identität, den Sub-Faktor und das Ablehnungsdetail. Lass die IDE den Handler generieren, statt ihn zu tippen.

Auf einer anderen Plattform lässt es sich nicht kompilieren

Es kann es nicht. Jede WinBio-Unit ist in {$IFDEF SGC_WINBIO} eingeschlossen, das nur in den Windows-Compilerblöcken definiert wird, sodass die Units außerhalb von Windows keine Typen enthalten. Das ist eine Windows-Bibliothek.

Der private Pool braucht Administratorrechte

Mit einer eigenen Template-Datenbank statt dem Systempool zu arbeiten, ist ein privilegierter Vorgang, und die Fingerabdruck-Demo hat dafür aus diesem Grund einen eigenen Tab.

Über die erste Prüfung hinaus

Vier Richtungen, alle in derselben Bibliothek.

Eigene Benutzer registrieren

Die Fingerabdruck-Komponente enthält den vollständigen Registrierungszyklus: beginnen, mehrfach erfassen, dann bestätigen. Die Ereignisse melden die Anzahl der Wischvorgänge und ob das Template neu war.

sgcBiometrics-Funktionen

Eine eigene Template-Datenbank führen

Die Storage- und Users-Komponenten implementieren einen privaten Pool, sodass Templates in deiner Datei statt im Windows-Systempool liegen. Das willst du, wenn dieselbe Identität über Rechner hinweg funktionieren muss, die du kontrollierst.

sgcBiometrics-Funktionen

Auf Anwesenheit achten, nicht nur auf eine Abfrage

Die Gesichtskomponente kann fortlaufend überwachen, wer vor der Kamera sitzt, und Ereignisse auslösen, wenn eine Person ankommt, erkannt wird oder geht. So sperrst du einen Bildschirm in dem Moment, in dem der Bediener weggeht.

sgcBiometrics-Funktionen

Auflisten, was der Rechner hat

Bevor du jemanden auffordest, kannst du die biometrischen Einheiten, die Datenbanken und die vorhandenen Registrierungen auflisten, was einen wenig hilfreichen Fehler in eine klare Meldung über fehlende Hardware verwandelt.

Editionen und Paketierung

Referenz, Demos und Dokumentation

Zwei Demo-Projekte liegen im Download bei, eines für das Gesicht und eines für den Fingerabdruck.

sgcBiometrics-Funktionen Was die Fingerabdruck- und die Gesichtskomponente jeweils bereitstellen.
Editionen und Paketierung Wie das Produkt lizenziert wird und was jedes Paket enthält.
Produktübersicht Wofür sgcBiometrics gedacht ist und wo es hineinpasst.
Testversion herunterladen Derselbe Installer wie in der Vollversion, zeitlich begrenzt.
Support kontaktieren Direkter E-Mail-Support von den Entwicklern, die den Code geschrieben haben.
Alle Produkte Die Preise jeder eSeGeCe-Bibliothek in einer Tabelle.

sgcBiometrics gibt es nur für Delphi und C++Builder, ohne .NET-Gegenstück. Jedes Produkt hat einen eigenen Schnellstart, aufgelistet auf der Seite Erste Schritte.

Fragen zum sgcBiometrics-Schnellstart

Für die Gesichtserkennung mit Windows Hello TsgcWinBioFacial. Für den Fingerabdruck TsgcWinBioFingerPrint. Beide sind in sgcBiometrics.pas deklariert und beide liegen auf der Palettenseite SGC Biometrics, neben TsgcWinBioStorageFile und TsgcWinBioUsersINI, die du nur für die Speicherung in einem privaten Pool brauchst. Insgesamt also vier Komponenten, nicht eine.
Bei der Gesichtskomponente liefert FacialRecognize ein Boolean, true, wenn die Person vor der Kamera übereinstimmte. FacialIdentify liefert einen string, die Konto-Kennung desjenigen, der erkannt wurde, und einen leeren String, wenn niemand erkannt wurde. Beide nehmen einen optionalen Timeout entgegen, der standardmäßig zehn Sekunden beträgt, und beide brauchen eine Sensorsitzung, die du mit InitializeSensors öffnest.
Nein. Jede WinBio-Unit schließt ihr gesamtes Interface und ihre Implementierung in {$IFDEF SGC_WINBIO} ein, dieses Define erscheint nur in den Windows-Compilerblöcken der sgcVer.inc des Produkts, und jede Unit hat Windows in der Uses-Klausel. Ohne das Define enthalten die Units überhaupt keine Typen. sgcBiometrics ist eine Windows-Bibliothek.
Nein, es ist das klassische Win32 Windows Biometric Framework. Die Bibliothek lädt winbio.dll dynamisch und ruft sie direkt auf. Das ist aus zwei Gründen wichtig: Es gibt keine durch WinRT-Bindungen erzwungene moderne RAD-Studio-Mindestversion, und die API-Oberfläche ist die von Microsoft als Windows Biometric Framework dokumentierte und nicht die WinRT-Variante.
Delphi 7 sowie Delphi 2007 bis RAD Studio 13, dazu die passenden C++Builder-Versionen. SGC_WINBIO wird in jedem Compilerversionsblock ab Delphi 7 definiert, mit einer Lücke: Der Block von Delphi 2006 definiert nur seine Versionsmarkierung und nicht SGC_WINBIO, sodass das Produkt bei diesem einen Compiler zu nichts gebaut wird.
Im Code gibt es keine Editionen. Die sgcVer.inc des Produkts ist eine Compilerversions-Tabelle und enthält überhaupt kein SGC_EDT_*-Define, und nichts wird nach Stufe gesteuert, sodass jeder Build jede Komponente enthält. Welche Stufen auch immer auf der Preisseite erscheinen, sie sind kommerzielle Paketierung und keine unterschiedlichen Bibliotheken.
Mehr als drei. Die Gesichtskomponente veröffentlicht zwölf und die Fingerabdruck-Komponente achtzehn. Sie tragen die Strukturen des Windows Biometric Framework, daher sind die Parameterlisten länger als bei einem typischen Delphi-Ereignis: OnVerify hat sechs Parameter, OnIdentify vier und OnError drei. Lass die IDE die Handler generieren. Beachte, dass es kein OnCapture gibt, das Capture-Ereignis heißt OnCaptureSample.
Du brauchst einen biometrischen Sensor, den Windows bereits erkennt, was in der Praxis bedeutet, dass Windows Hello in der Einstellungen-App funktioniert. Das Verifizieren gegen den Systempool braucht keine Erhöhung der Rechte. Die Arbeit mit einem privaten Pool, bei dem du über TsgcWinBioStorageFile deine eigene Template-Datenbank führst, erfordert dagegen Administratorrechte, und die mitgelieferte Fingerabdruck-Demo trennt das aus diesem Grund in einen eigenen Tab.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit, Windows Hello in deine App zu bringen?

Lade die Testversion herunter und starte die Gesichts-Demo auf einem Rechner, auf dem Hello bereits eingerichtet ist.