sgcBiometrics in vijf minuten

Windows Hello- en vingerafdrukauthenticatie in Delphi, via het Windows Biometric Framework. Deze pagina start een sensor op, verifieert de gebruiker ervoor en identificeert wie het is. Twee methodeaanroepen, zodra de sensor is geïnitialiseerd.

Windows Hello-gezicht en vingerafdruk
Alleen Windows, via winbio.dll
Eén build, geen functieniveaus

Wat de eerste controle nodig heeft

Eén component, één aanroep om de sensor op te starten en één aanroep om de vraag te stellen. Er hoeft eerst niets te worden geconfigureerd.

Gezicht

TsgcWinBioFacial op de palettabpagina SGC Biometrics, gedeclareerd in sgcBiometrics.pas. Dit is het Windows Hello-gezichtscomponent.

Vingerafdruk

TsgcWinBioFingerPrint, dezelfde unit, dezelfde palettabpagina. Dezelfde vorm van API, met daarbovenop registratie en sjabloonbeheer.

Nog twee componenten

TsgcWinBioStorageFile and TsgcWinBioUsersINI, voor opslag in een privépool wanneer je je eigen sjabloondatabase bijhoudt in plaats van de systeempool te gebruiken.

Platform

Alleen Windows. De bibliotheek laadt winbio.dll tijdens runtime en elke unit staat in {$IFDEF SGC_WINBIO}, dus op elk ander doelplatform compileren de units tot niets.

Vereisten en edities

sgcBiometrics heeft geen functieniveaus, dus deze tabel gaat over compilers en het besturingssysteem in plaats van edities.

Onderdeel Waarde
IDE Delphi 7 en Delphi 2007 tot en met RAD Studio 13, plus de bijbehorende C++Builder-versies. SGC_WINBIO wordt gedefinieerd voor elk compilerversieblok behalve Delphi 2006, dat alleen zijn versiemarkering definieert, dus op Delphi 2006 compileert het product tot niets.
Uses-clausule De demo schrijft sgcBiometrics_WinBio_Types, sgcBiometrics, sgcBiometrics_WinBio_Storage, sgcBiometrics_WinBio_Storage_File, sgcBiometrics_Classes, sgcBiometrics_Client, sgcBiometrics_WinBio_Client, sgcBiometrics_WinBio_Client_Facial. Voor een gewone verificatie heb je er veel minder nodig.
Edities Die zijn er niet. De eigen sgcVer.inc van het product is een compilerversiekaart en niets anders, zonder SGC_EDT_*-define. Elk component zit in elke build.
Welke Windows-API Het klassieke Win32 Windows Biometric Framework, dynamisch geladen uit winbio.dll. Het is geen WinRT, dus er is geen recente ondergrens voor RAD Studio opgelegd door WinRT-bindings.
Platform Alleen Windows. Elke WinBio-unit zet zijn interface en implementatie in {$IFDEF SGC_WINBIO} en elke unit heeft Windows in zijn uses-clausule. Zonder de define bevatten de units helemaal geen types.
Hardware Een biometrische sensor die Windows al herkent. Als Windows Hello werkt in de app Instellingen, vindt het component dezelfde sensor.

De presentiebewakingsgebeurtenissen die het gezichtscomponent gebruikt, zijn van de Windows 10-generatie van de API. Als Windows Hello-gezichtsaanmelding op de machine beschikbaar is, heeft het component wat het nodig heeft.

Installeer en vind de palettabpagina

Compileer het runtime-package voordat je het designtime-package installeert, want het tweede verwijst naar het eerste.

1. Uitpakken

Pak de download uit in een map, hieronder {$DIR} genoemd.

2. Bibliotheekpad

Tools, Options, Environment Options, Directories. Voeg {$DIR}\source toe, wat voor elke RAD Studio-versie geldt.

3. De libmap toevoegen

Voeg ook de versiespecifieke map toe, bijvoorbeeld {$DIR}\libD13\$(Platform) op RAD Studio 13, tot {$DIR}\libD7 zonder platformachtervoegsel op de oudste compilers.

4. Alleen C++Builder

Zet de libmap ook op het System Include-pad en de map dcp\$(Platform), die de .bpi-bestanden bevat, op het bibliotheekpad.

5. De packages bouwen

Open Packages\sgcBiometricsD13.groupproj voor jouw IDE-versie. Compileer eerst sgcBiometricsD13.dpk en installeer daarna dclsgcBiometricsD13.dpk. Er verschijnt een pagina met de naam SGC Biometrics met vier componenten.

Verifieer een gebruiker, in ongeveer tien regels

Start de sensor op en stel dan een van twee vragen: is dit de verwachte persoon, of wie is dit? Beide geven direct een antwoord.

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 geeft een Boolean terug en neemt een time-out in milliseconden. SessionIsOpen voorkomt dat je een tweede sessie opent op een sensor die er al een heeft. FacialRecognize geeft True terug wanneer de persoon voor de camera overeenkwam.

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;

Het verschil tussen de twee aanroepen is de vraag. FacialRecognize vraagt "is dit de verwachte persoon" en geeft een Boolean terug. FacialIdentify vraagt "wie is dit" en geeft de accountidentificatie terug als string, leeg wanneer niemand is herkend. Beide nemen een optionele time-out die standaard tien seconden is.

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;

De andere gebeurtenissen bevatten Windows Biometric Framework-structuren, dus hun parameterlijsten zijn langer dan bij een gewone Delphi-gebeurtenis. OnVerify heeft zes parameters en OnIdentify vier. Genereer ze vanuit de Object Inspector in plaats van ze te typen.

Alle drie de tabbladen komen uit de meegeleverde demo Demos\Facial\FFacial.pas, met de logaanroepen behouden omdat je daarmee ziet wat er is gebeurd. Een tweede demo, Demos\FingerPrint, behandelt registratie, sjabloonbeheer en de privé-sensorpool.

Lees het antwoord dat de aanroep geeft

Beide vragen geven direct een waarde terug, dus de eerste versie van je code heeft helemaal geen event handler nodig.

InitializeSensors

Geeft True terug wanneer er een sessie op een sensor is geopend. Een False hier betekent dat er niets is om mee te praten en geen enkele latere aanroep zal werken.

FacialRecognize

Geeft True terug wanneer de persoon overeenkwam. Die ene boolean is het hele antwoord voor een authenticatieprompt.

FacialIdentify

Geeft de accountidentificatie terug van wie is herkend en een lege string wanneer niemand is herkend. Gebruik het wanneer je wilt weten wie in plaats van of.

OnError

procedure(Sender: TObject; const aError: string; const aCode: Integer = 0). De code is de fout van het Windows Biometric Framework, en dat wil je wanneer de melding alleen niet genoeg is.

Wat er de eerste keer meestal misgaat

Zes problemen verklaren bijna elke eerste poging.

Er gebeurt niets en er verschijnt geen fout

De sensorsessie is nooit geopend. InitializeSensors geeft een Boolean terug en de demo controleert die voordat er iets anders gebeurt. SessionIsOpen vertelt je of er al een sessie actief is, zodat je geen tweede opent.

De aanroep blokkeert de gebruikersinterface

De verificatie wacht op de persoon voor de sensor en de time-out is standaard tien seconden. Geef een kortere mee, of stel Asynchronous in en laat het resultaat in plaats daarvan door de gebeurtenissen sturen.

Je zoekt een OnCapture-gebeurtenis

Er is geen gebeurtenis met die naam. De capturegebeurtenis is OnCaptureSample en er is een bijbehorende OnCaptureSampleReject voor een sample die de sensor weigerde.

De signatuur van de gebeurtenis komt niet overeen

Deze gebeurtenissen bevatten de structuren van het Windows Biometric Framework, dus ze hebben meer parameters dan je misschien verwacht. OnVerify heeft er zes, waaronder de identiteit, de subfactor en het weigeringsdetail. Laat de IDE de handler genereren in plaats van die te typen.

Het compileert niet op een ander platform

Dat kan niet. Elke WinBio-unit staat in {$IFDEF SGC_WINBIO}, dat alleen in de Windows-compilerblokken wordt gedefinieerd, dus buiten Windows bevatten de units geen types. Dit is een Windows-bibliotheek.

De privépool heeft beheerdersrechten nodig

Werken met je eigen sjabloondatabase in plaats van de systeempool is een bevoorrechte bewerking en de vingerafdrukdemo heeft daarom een apart tabblad ervoor.

Voorbij de eerste controle

Vier richtingen, allemaal binnen dezelfde bibliotheek.

Registreer je eigen gebruikers

Het vingerafdrukcomponent bevat de volledige registratiecyclus: beginnen, herhaaldelijk vastleggen en daarna committen. De gebeurtenissen melden het aantal swipes en of het sjabloon nieuw was.

sgcBiometrics-functies

Houd je eigen sjabloondatabase bij

De opslag- en gebruikerscomponenten implementeren een privépool, zodat sjablonen in jouw bestand staan in plaats van in de Windows-systeempool. Dat wil je wanneer dezelfde identiteit moet werken op machines die je zelf beheert.

sgcBiometrics-functies

Let op aanwezigheid, niet alleen op een prompt

Het gezichtscomponent kan continu bewaken wie er voor de camera zit en roept gebeurtenissen aan wanneer een persoon aankomt, wordt herkend of vertrekt. Zo vergrendel je een scherm op het moment dat de operator wegloopt.

sgcBiometrics-functies

Inventariseer wat de machine heeft

Voordat je iemand om iets vraagt, kun je de biometrische eenheden, de databases en de bestaande registraties opsommen, waardoor een nietszeggende fout verandert in een duidelijke melding over ontbrekende hardware.

Edities en verpakking

Referentie, demo's en documentatie

Twee demoprojecten zitten in de download, een voor gezicht en een voor vingerafdruk.

sgcBiometrics-functies Wat de vingerafdruk- en gezichtscomponenten elk beschikbaar stellen.
Edities en verpakking Hoe het product in licentie wordt gegeven en wat elk package bevat.
Productoverzicht Waar sgcBiometrics voor dient en waar het in past.
Download de proefversie Hetzelfde installatieprogramma als de productieversie, beperkt in tijd.
Neem contact op met support Directe ondersteuning per e-mail van de ontwikkelaars die de code hebben geschreven.
Alle producten Prijzen van elke eSeGeCe-bibliotheek in één tabel.

sgcBiometrics is alleen voor Delphi en C++Builder, zonder .NET-equivalent. Elk product heeft zijn eigen snelstart, te vinden op de pagina Aan de slag.

Vragen over de sgcBiometrics-snelstart

Voor Windows Hello-gezichtsherkenning TsgcWinBioFacial. Voor vingerafdruk TsgcWinBioFingerPrint. Beide worden gedeclareerd in sgcBiometrics.pas en staan allebei op de palettabpagina SGC Biometrics, naast TsgcWinBioStorageFile en TsgcWinBioUsersINI, die je alleen nodig hebt voor opslag in een privépool. Dus vier componenten in totaal, niet één.
Op het gezichtscomponent geeft FacialRecognize een Boolean terug, true wanneer de persoon voor de camera overeenkwam. FacialIdentify geeft een string terug, de accountidentificatie van wie is herkend, en een lege string wanneer niemand is herkend. Beide nemen een optionele time-out die standaard tien seconden is en beide hebben een sensorsessie nodig, die je opent met InitializeSensors.
Nee. Elke WinBio-unit zet zijn hele interface en implementatie in {$IFDEF SGC_WINBIO}, die define verschijnt alleen in de Windows-compilerblokken van de eigen sgcVer.inc van het product en elke unit heeft Windows in zijn uses-clausule. Zonder de define bevatten de units helemaal geen types. sgcBiometrics is een Windows-bibliotheek.
Nee, het is het klassieke Win32 Windows Biometric Framework. De bibliotheek laadt winbio.dll dynamisch en roept die rechtstreeks aan. Dat is om twee redenen van belang: er is geen moderne ondergrens voor RAD Studio opgelegd door WinRT-bindings en het API-oppervlak is dat wat Microsoft documenteert als het Windows Biometric Framework, niet dat van WinRT.
Delphi 7 en Delphi 2007 tot en met RAD Studio 13, plus de bijbehorende C++Builder-versies. SGC_WINBIO wordt gedefinieerd in elk compilerversieblok vanaf Delphi 7 met één gat: het Delphi 2006-blok definieert alleen zijn versiemarkering en niet SGC_WINBIO, dus op die ene compiler bouwt het product tot niets.
In de code zijn geen edities. De sgcVer.inc van het product is een compilerversiekaart en bevat helemaal geen SGC_EDT_*-define en niets wordt per niveau afgeschermd, dus elke build bevat elk component. Welke niveaus er ook op de prijzenpagina staan, het zijn commerciële verpakkingen, geen verschillende bibliotheken.
Meer dan drie. Het gezichtscomponent publiceert er twaalf en het vingerafdrukcomponent achttien. Ze bevatten de structuren van het Windows Biometric Framework, dus de parameterlijsten zijn langer dan bij een gewone Delphi-gebeurtenis: OnVerify heeft zes parameters, OnIdentify vier en OnError drie. Laat de IDE de handlers genereren. Let op: er is geen OnCapture; de capturegebeurtenis is OnCaptureSample.
Je hebt een biometrische sensor nodig die Windows al herkent, wat in de praktijk betekent dat Windows Hello werkt in de app Instellingen. Verifiëren tegen de systeempool vereist geen verhoogde rechten. Werken met een privépool, waarbij je via TsgcWinBioStorageFile je eigen sjabloondatabase bijhoudt, vereist wel beheerdersrechten en de meegeleverde vingerafdrukdemo scheidt dat daarom in een eigen tabblad.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Klaar om Windows Hello aan je app toe te voegen?

Download de proefversie en draai de gezichtsdemo op een machine waarop Hello al is ingesteld.