sgcBiometrics in cinque minuti

Autenticazione con Windows Hello e impronte digitali in Delphi, tramite il Windows Biometric Framework. Questa pagina attiva un sensore, verifica l'utente che gli sta davanti e ne identifica l'identità. Due chiamate di metodo, una volta inizializzato il sensore.

Windows Hello con volto e impronta digitale
Solo Windows, tramite winbio.dll
Una sola build, nessun livello di funzionalità

Cosa serve per il primo controllo

Un componente, una chiamata per attivare il sensore e una chiamata per porre la domanda. Non c'è nulla da configurare prima.

Volto

TsgcWinBioFacial nella pagina SGC Biometrics della palette, dichiarato in sgcBiometrics.pas. È il componente per il volto di Windows Hello.

Impronta digitale

TsgcWinBioFingerPrint, stessa unit, stessa pagina della palette. Stessa forma di API, con in più la registrazione e la gestione dei template.

Altri due componenti

TsgcWinBioStorageFile e TsgcWinBioUsersINI, per l'archiviazione in un pool privato quando mantieni un tuo database di template invece di usare il pool di sistema.

Piattaforma

Solo Windows. La libreria carica winbio.dll a runtime e ogni unit è racchiusa in {$IFDEF SGC_WINBIO}, quindi su qualsiasi altro target le unit vengono compilate in nulla.

Requisiti ed edizioni

sgcBiometrics non ha livelli di funzionalità, quindi questa tabella riguarda i compilatori e il sistema operativo e non le edizioni.

Cosa Valore
IDE Delphi 7 e da Delphi 2007 a RAD Studio 13, più le versioni corrispondenti di C++Builder. SGC_WINBIO è definito per ogni blocco di versione del compilatore tranne Delphi 2006, che definisce solo il proprio marcatore di versione, quindi su Delphi 2006 il prodotto viene compilato in nulla.
Clausola uses La demo scrive sgcBiometrics_WinBio_Types, sgcBiometrics, sgcBiometrics_WinBio_Storage, sgcBiometrics_WinBio_Storage_File, sgcBiometrics_Classes, sgcBiometrics_Client, sgcBiometrics_WinBio_Client, sgcBiometrics_WinBio_Client_Facial. Per una semplice verifica ne servono molte meno.
Edizioni Non ce ne sono. Il sgcVer.inc del prodotto è solo una mappa delle versioni del compilatore e nient'altro, senza alcun define SGC_EDT_*. Ogni componente è in ogni build.
Quale API di Windows Il Windows Biometric Framework Win32 classico, caricato dinamicamente da winbio.dll. Non è WinRT, quindi non c'è alcun requisito minimo recente di RAD Studio imposto dai binding WinRT.
Piattaforma Solo Windows. Ogni unit WinBio racchiude interfaccia e implementazione in {$IFDEF SGC_WINBIO} e ognuna ha Windows nella propria clausola uses. Senza il define le unit non contengono alcun tipo.
Hardware Un sensore biometrico che Windows riconosce già. Se Windows Hello funziona nell'app Impostazioni, il componente troverà lo stesso sensore.

Gli eventi di monitoraggio della presenza usati dal componente per il volto sono quelli della generazione Windows 10 dell'API. Se sulla macchina è disponibile l'accesso con il volto di Windows Hello, il componente ha ciò che gli serve.

Installa e trova la pagina della palette

Compila il package di runtime prima di installare quello di design-time, perché il secondo fa riferimento al primo.

1. Decomprimi

Decomprimi il download in una cartella, chiamata {$DIR} qui sotto.

2. Library path

Tools, Options, Environment Options, Directories. Aggiungi {$DIR}\source, che vale per ogni versione di RAD Studio.

3. Aggiungi la cartella lib

Aggiungi anche la cartella specifica della versione, per esempio {$DIR}\libD13\$(Platform) su RAD Studio 13, fino a {$DIR}\libD7 senza suffisso di piattaforma sui compilatori più vecchi.

4. Solo C++Builder

Metti anche la cartella lib nel System Include path e la cartella dcp\$(Platform), che contiene i file .bpi, nel library path.

5. Compila i package

Apri Packages\sgcBiometricsD13.groupproj per la versione del tuo IDE. Compila prima sgcBiometricsD13.dpk, poi installa dclsgcBiometricsD13.dpk. Compare una pagina chiamata SGC Biometrics con quattro componenti.

Verifica un utente, in circa dieci righe

Attiva il sensore, poi poni una delle due domande: è la persona attesa, oppure chi è? Entrambe restituiscono direttamente una risposta.

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 restituisce un Boolean e accetta un timeout in millisecondi. SessionIsOpen ti impedisce di aprire una seconda sessione su un sensore che ne ha già una. FacialRecognize restituisce True quando la persona davanti alla fotocamera corrisponde.

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;

La differenza tra le due chiamate è la domanda. FacialRecognize chiede "è la persona attesa" e restituisce un Boolean. FacialIdentify chiede "chi è" e restituisce l'identificatore dell'account come string, vuota quando nessuno è stato riconosciuto. Entrambe accettano un timeout facoltativo che per impostazione predefinita è di dieci secondi.

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;

Gli altri eventi trasportano strutture del Windows Biometric Framework, quindi i loro elenchi di parametri sono più lunghi di un tipico evento Delphi. OnVerify accetta sei parametri e OnIdentify quattro. Generali dall'Object Inspector invece di digitarli.

Tutte e tre le schede provengono dalla demo inclusa Demos\Facial\FFacial.pas, con le chiamate di log mantenute perché sono il modo in cui vedi cosa è successo. Una seconda demo, Demos\FingerPrint, copre la registrazione, la gestione dei template e il pool privato di sensori.

Leggi la risposta che ti dà la chiamata

Entrambe le domande restituiscono direttamente un valore, quindi la prima versione del tuo codice non ha bisogno di alcun gestore di evento.

InitializeSensors

Restituisce True quando una sessione si è aperta su un sensore. Un False qui significa che non c'è nulla con cui comunicare e nessuna chiamata successiva funzionerà.

FacialRecognize

Restituisce True quando la persona corrisponde. Quel singolo booleano è l'intera risposta per una richiesta di autenticazione.

FacialIdentify

Restituisce l'identificatore dell'account di chi è stato riconosciuto e una stringa vuota quando nessuno lo è stato. Usala quando ti serve sapere chi è e non solo se corrisponde.

OnError

procedure(Sender: TObject; const aError: string; const aCode: Integer = 0). Il codice è l'errore del Windows Biometric Framework, ed è ciò che ti serve quando il solo messaggio non basta.

Cosa va storto di solito la prima volta

Sei problemi spiegano quasi ogni primo tentativo.

Non succede nulla e non compare alcun errore

La sessione del sensore non è mai stata aperta. InitializeSensors restituisce un Boolean e la demo lo controlla prima di fare qualsiasi altra cosa. SessionIsOpen ti dice se una sessione è già attiva, così non ne apri una seconda.

La chiamata blocca l'interfaccia utente

La verifica attende la persona davanti al sensore e il timeout predefinito è di dieci secondi. Passane uno più breve, oppure imposta Asynchronous e gestisci invece il risultato dagli eventi.

Stai cercando un evento OnCapture

Non esiste un evento con quel nome. L'evento di acquisizione è OnCaptureSample e c'è un OnCaptureSampleReject associato per un campione che il sensore ha rifiutato.

La firma dell'evento non corrisponde

Questi eventi trasportano le strutture del Windows Biometric Framework, quindi hanno più parametri di quanti ti aspetteresti. OnVerify ne accetta sei, tra cui l'identità, il sotto-fattore e il dettaglio del rifiuto. Lascia che sia l'IDE a generare il gestore invece di digitarlo.

Non compila su un'altra piattaforma

Non può. Ogni unit WinBio è racchiusa in {$IFDEF SGC_WINBIO}, definito solo nei blocchi di compilatore per Windows, quindi fuori da Windows le unit non contengono tipi. È una libreria per Windows.

Il pool privato richiede i diritti di amministratore

Lavorare con un tuo database di template invece che con il pool di sistema è un'operazione privilegiata e la demo delle impronte digitali ha per questo motivo una scheda separata.

Oltre il primo controllo

Quattro direzioni, tutte nella stessa libreria.

Registra i tuoi utenti

Il componente per le impronte digitali contiene l'intero ciclo di registrazione: avvio, acquisizione ripetuta e poi conferma. Gli eventi riportano il numero di passaggi e se il template era nuovo.

Funzionalità di sgcBiometrics

Mantieni il tuo database di template

I componenti di archiviazione e utenti implementano un pool privato, quindi i template vivono nel tuo file e non nel pool di sistema di Windows. È ciò che serve quando la stessa identità deve funzionare su macchine che controlli.

Funzionalità di sgcBiometrics

Controlla la presenza, non solo una richiesta

Il componente per il volto può monitorare in modo continuo chi è davanti alla fotocamera, generando eventi quando una persona arriva, viene riconosciuta o se ne va. È così che blocchi uno schermo nel momento in cui l'operatore si allontana.

Funzionalità di sgcBiometrics

Elenca ciò che ha la macchina

Prima di chiedere qualcosa a qualcuno, puoi elencare le unità biometriche, i database e le registrazioni esistenti, il che trasforma un errore poco chiaro in un messaggio esplicito sull'hardware mancante.

Edizioni e pacchetti

Riferimento, demo e documentazione

Due progetti demo sono inclusi nel download, uno per il volto e uno per l'impronta digitale.

Funzionalità di sgcBiometrics Cosa espongono i componenti per impronte digitali e per il volto.
Edizioni e pacchetti Come è concesso in licenza il prodotto e cosa include ogni pacchetto.
Panoramica del prodotto A cosa serve sgcBiometrics e dove si colloca.
Scarica la versione di prova Lo stesso installer della versione di produzione, con limite di tempo.
Contatta il supporto Supporto diretto via e-mail dagli sviluppatori che hanno scritto il codice.
Tutti i prodotti I prezzi di ogni libreria eSeGeCe in un'unica tabella.

sgcBiometrics è solo per Delphi e C++Builder, senza una controparte .NET. Ogni prodotto ha la propria guida rapida, elencata nella pagina per iniziare.

Domande sulla guida rapida di sgcBiometrics

Per il riconoscimento del volto di Windows Hello, TsgcWinBioFacial. Per l'impronta digitale, TsgcWinBioFingerPrint. Entrambi sono dichiarati in sgcBiometrics.pas ed entrambi si trovano nella pagina SGC Biometrics della palette, insieme a TsgcWinBioStorageFile e TsgcWinBioUsersINI, che ti servono solo per l'archiviazione in un pool privato. Quindi quattro componenti in tutto, non uno.
Nel componente per il volto, FacialRecognize restituisce un Boolean, true quando la persona davanti alla fotocamera corrisponde. FacialIdentify restituisce una string, l'identificatore dell'account di chi è stato riconosciuto, e una stringa vuota quando nessuno lo è stato. Entrambe accettano un timeout facoltativo che per impostazione predefinita è di dieci secondi ed entrambe richiedono una sessione del sensore, che apri con InitializeSensors.
No. Ogni unit WinBio racchiude l'intera interfaccia e implementazione in {$IFDEF SGC_WINBIO}, quel define compare solo nei blocchi di compilatore per Windows del sgcVer.inc del prodotto e ogni unit ha Windows nella propria clausola uses. Senza il define le unit non contengono alcun tipo. sgcBiometrics è una libreria per Windows.
No, è il Windows Biometric Framework Win32 classico. La libreria carica winbio.dll dinamicamente e la chiama direttamente. Questo conta per due motivi: non c'è alcun requisito minimo recente di RAD Studio imposto dai binding WinRT e la superficie dell'API è quella documentata da Microsoft come Windows Biometric Framework e non quella WinRT.
Delphi 7 e da Delphi 2007 a RAD Studio 13, più le versioni corrispondenti di C++Builder. SGC_WINBIO è definito in ogni blocco di versione del compilatore da Delphi 7 in poi con un'unica lacuna: il blocco di Delphi 2006 definisce solo il proprio marcatore di versione e non SGC_WINBIO, quindi su quel solo compilatore il prodotto viene compilato in nulla.
Nel codice non ci sono edizioni. Il sgcVer.inc del prodotto è una mappa delle versioni del compilatore e non contiene alcun define SGC_EDT_*, e nulla è regolato per livello, quindi ogni build contiene ogni componente. Qualsiasi livello compaia nella pagina dei prezzi è un pacchetto commerciale, non una libreria diversa.
Più di tre. Il componente per il volto ne pubblica dodici e quello per le impronte digitali diciotto. Trasportano le strutture del Windows Biometric Framework, quindi gli elenchi di parametri sono più lunghi di un tipico evento Delphi: OnVerify ha sei parametri, OnIdentify quattro e OnError tre. Lascia che sia l'IDE a generare i gestori. Nota che non esiste OnCapture; l'evento di acquisizione è OnCaptureSample.
Ti serve un sensore biometrico che Windows riconosce già, il che in pratica significa che Windows Hello funziona nell'app Impostazioni. La verifica sul pool di sistema non richiede elevazione dei privilegi. Lavorare con un pool privato, dove mantieni un tuo database di template tramite TsgcWinBioStorageFile, richiede invece i diritti di amministratore, e la demo delle impronte digitali inclusa lo separa per questo motivo in una scheda a parte.
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Pronto ad aggiungere Windows Hello alla tua app?

Scarica la versione di prova ed esegui la demo del volto su una macchina che ha già Hello configurato.