Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Scopri come integrare il rilevamento della vivacità del viso nel tuo flusso di lavoro utilizzando la logica lato server e le applicazioni client front-end associate.
Suggerimento
Per informazioni generali sul rilevamento liveness del viso, vedere la guida concettuale.
In questa esercitazione imparerai come eseguire un'applicazione frontend con un server di applicazioni per eseguire il rilevamento della presenza. È anche possibile aggiungere la verifica del viso in diverse piattaforme e linguaggi.
Importante
Gli SDK del client Viso per il rilevamento liveness sono una funzionalità gestita. È necessario richiedere l'accesso alla funzionalità di attività compilando il modulo di acquisizione del riconoscimento del volto. Quando alla sottoscrizione di Azure viene concesso l'accesso, è possibile scaricare Face liveness SDK.
Prerequisiti
- Sottoscrizione di Azure: creare un account gratuito
- All'account Azure deve essere assegnato un ruolo collaboratore servizi cognitivi , in modo da poter accettare le condizioni di intelligenza artificiale responsabili e creare una risorsa. Per assegnare questo ruolo all'account, seguire la procedura descritta nella documentazione Assegnare ruoli oppure contattare l'amministratore.
- Dopo aver creato la sottoscrizione di Azure, Creare una risorsa Viso nel portale di Azure per ottenere la chiave e l'endpoint. Al termine della distribuzione, fare clic su Vai alla risorsa.
- La chiave e l'endpoint della risorsa creata saranno necessari per connettere l'applicazione al servizio Viso.
- Accesso agli artefatti con restrizioni d'accesso necessari per Azure Vision negli strumenti Foundry Tools Face Client SDK per dispositivi mobili (iOS e Android) e Web.
- Per iniziare, è necessario richiedere le funzionalità di Riconoscimento volto ad accesso limitato per ottenere l'accesso agli artefatti gestiti. Per altre informazioni, vedere la pagina Accesso limitato a Viso.
- Familiarità con la funzionalità di rilevamento della vitalità del volto. Vedere la guida concettuale.
Suggerimento
Dopo aver completato i prerequisiti, è possibile provare l'esperienza liveness sulle piattaforme seguenti:
-
iOS: App Store per iOS: tocca la schermata dell'app 10 volte dopo l'installazione per abilitare la modalità sviluppatore.
- Android: Google Play Store : tocca la schermata dell'app 10 volte dopo l'installazione per abilitare la modalità sviluppatore.
- Web: provarlo direttamente in Vision Studio.
È anche possibile compilare ed eseguire un esempio front-end completo (iOS, Android o Web) dalla sezione Esempi .
Preparare l'applicazione front-end
Gli SDK vengono forniti in più linguaggi per semplificare l'integrazione con l'applicazione front-end in uso. Per integrare sia l'interfaccia utente che il codice necessario, vedere README per l'SDK scelto nelle sezioni seguenti.
Importante
Ogni SDK front-end richiede l'accesso a una risorsa gestita per garantire una compilazione corretta. Per configurare questo accesso, vedere le istruzioni seguenti.
Per Swift iOS:
- Artefatti: Azure AI Face UI SDK per iOS
- Riferimento API: Riferimento AzureAIVisionFaceUI
- Esempio: esempio iOS
Per Kotlin/Java Android:
- Artefatti: Maven Central: com.azure:azure-ai-vision-face-ui
- Riferimento API: Riferimento azure-ai-vision-face-ui
- Esempio: esempio Android
Per JavaScript Web:
- Artefatti: @azure/ai-vision-face-ui - npm
- Riferimento API: Riferimento AzureAIVisionFaceUI
- Esempio: esempio Web
- Supporto framework: funziona con i framework più diffusi, ad esempio React (incluso Next.js), Vue.jse Angular.
Una volta integrato nell'applicazione frontend, l'SDK avvia la fotocamera, guida l'utente a regolare la posizione, compone il payload di liveness e lo invia al servizio Azure AI Face per l'elaborazione.
Monitora la sezione Releases del repository per gli aggiornamenti delle nuove versioni dell'SDK e abilita gli avvisi di aggiornamento delle dipendenze automatizzati, ad esempio GitHub Dependabot (per i repository GitHub) o Renovate (GitHub, GitLab, Bitbucket, Azure Repos).
Eseguire il rilevamento dell'autenticità
I passaggi seguenti descrivono il processo di orchestrazione liveness:
L'applicazione front-end avvia il controllo dell'attività e invia una notifica al server app.
Il server app crea una nuova sessione di attività con il servizio Viso di Azure per intelligenza artificiale. Il servizio crea una sessione liveness e risponde con un token di autorizzazione sessione. Per altre informazioni su ogni parametro di richiesta coinvolto nella creazione di una sessione relativa al rilevamento liveness, vedere Operazione della sessione di creazione liveness.
var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT")); var key = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("FACE_APIKEY")); var body = JsonSerializer.Serialize(new { livenessOperationMode = "PassiveActive", deviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bccd", enableSessionImage = true }); using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key); var response = await client.PostAsync( $"{endpoint}/face/v1.2/detectLiveness-sessions", new StringContent(body, Encoding.UTF8, "application/json")); response.EnsureSuccessStatusCode(); using var doc = JsonDocument.Parse(await response.Content.ReadAsStringAsync()); var root = doc.RootElement; Console.WriteLine("Session created"); Console.WriteLine($"sessionId : {root.GetProperty("sessionId").GetString()}"); Console.WriteLine($"authToken : {root.GetProperty("authToken").GetString()}");Un esempio del corpo della risposta:
{ "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5", "authToken": "<session-authorization-token>", "status": "NotStarted", "modelVersion": "2025-05-20", "results": { "attempts": [] } }Il server app fornisce il token di autorizzazione della sessione all'applicazione front-end.
L'applicazione front-end usa il token di autorizzazione sessione per avviare il rilevatore liveness del viso che avvia il flusso di liveness.
L'SDK avvia la fotocamera, guida l'utente a posizionarsi correttamente e quindi prepara il payload per chiamare l'endpoint del servizio di liveness detection.
L'SDK chiama il servizio Viso di Visione di Azure AI per eseguire il rilevamento dell'attività. Una volta che il servizio risponde, l'SDK avvisa l'applicazione front-end che il controllo di liveness è stato completato. Nota: la risposta del servizio non contiene la decisione liveness. È necessario eseguire query su queste informazioni dal server app.
L'applicazione front-end inoltra il completamento del controllo dell'attività al server app.
Il server app esegue una query per il risultato del rilevamento liveness dal servizio Viso di Visione di Azure.
using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key); var response = await client.GetAsync( $"{endpoint}/face/v1.2/livenessSessions/{sessionId}/result"); response.EnsureSuccessStatusCode(); using var doc = JsonDocument.Parse(await response.Content.ReadAsStringAsync()); var root = doc.RootElement; var attempts = root.GetProperty("results").GetProperty("attempts"); var latestAttempt = attempts[attempts.GetArrayLength() - 1]; var attemptStatus = latestAttempt.GetProperty("attemptStatus").GetString(); Console.WriteLine($"Session id: {root.GetProperty("sessionId").GetString()}"); Console.WriteLine($"Session status: {root.GetProperty("status").GetString()}"); Console.WriteLine($"Latest attempt status: {attemptStatus}"); if (attemptStatus == "Succeeded") Console.WriteLine($"Liveness detection decision: {latestAttempt.GetProperty("result").GetProperty("livenessDecision").GetString()}"); else { var error = latestAttempt.GetProperty("error"); Console.WriteLine($"Error: {error.GetProperty("code").GetString()} - {error.GetProperty("message").GetString()}"); }Un esempio del corpo della risposta:
{ "sessionId": "b12e033e-bda7-4b83-a211-e721c661f30e", "authToken": "eyJhbGciOiJFUzI1NiIsIm", "status": "NotStarted", "modelVersion": "2024-11-15", "results": { "attempts": [ { "attemptId": 2, "attemptStatus": "Succeeded", "result": { "livenessDecision": "realface", "targets": { "color": { "faceRectangle": { "top": 669, "left": 203, "width": 646, "height": 724 } } }, "digest": "B0A803BB7B26F3C8F29CD36030F8E63ED3FAF955FEEF8E01C88AB8FD89CCF761", "sessionImageId": "Ae3PVWlXAmVAnXgkAFt1QSjGUWONKzWiSr2iPh9p9G4I" } }, { "attemptId": 1, "attemptStatus": "Failed", "error": { "code": "FaceWithMaskDetected", "message": "Mask detected on face image.", "targets": { "color": { "faceRectangle": { "top": 669, "left": 203, "width": 646, "height": 724 } } } } } ] } }Il server app elimina la sessione dopo che esegue una query su tutti i risultati della sessione.
using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key); await client.DeleteAsync($"{endpoint}/face/v1.2/livenessSessions/{sessionId}"); Console.WriteLine($"Session deleted: {sessionId}");
Eseguire il rilevamento liveness mediante la verifica del viso
La combinazione della verifica del viso con il rilevamento liveness consente la verifica biometrica di una particolare persona di interesse, con la garanzia aggiuntiva della presenza fisica della persona nel sistema.
L'integrazione del rilevamento del liveness con la verifica prevede due parti:
Passaggio 1- Selezionare un'immagine di riferimento
Per ottenere i risultati di riconoscimento più accurati, seguire i suggerimenti elencati nei requisiti di composizione per gli scenari di verifica ID.
Passaggio 2: Configurare l'orchestrazione dell'autenticità liveness
I passaggi generali seguenti illustrano come orchestrare la liveness con la verifica:
Fornire l'immagine di riferimento di verifica usando uno dei due metodi seguenti:
Il server app fornisce l'immagine di riferimento durante la creazione della sessione relativa al rilevamento dell’attività. Per ulteriori informazioni su ciascun parametro di richiesta coinvolto nella creazione di una sessione di liveness con verifica, vedere Liveness With Verify Create Session Operation.
var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT")); var key = System.Environment.GetEnvironmentVariable("FACE_APIKEY"); // Create the JSON part var jsonPart = new StringContent( JsonSerializer.Serialize(new { livenessOperationMode = "PassiveActive", deviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bcc", enableSessionImage = true }), Encoding.UTF8, "application/json" ); jsonPart.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "CreateLivenessWithVerifySessionRequest" }; // Create the file part using var fileStream = File.OpenRead("test.png"); var filePart = new StreamContent(fileStream); filePart.Headers.ContentType = new MediaTypeHeaderValue("image/png"); filePart.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "VerifyImage", FileName = "test.png" }; // Build multipart form data using var formData = new MultipartFormDataContent(); formData.Add(jsonPart); formData.Add(filePart); using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key); var response = await client.PostAsync($"{endpoint}/face/v1.2/createLivenessWithVerifySession", formData); response.EnsureSuccessStatusCode(); using var doc = JsonDocument.Parse(await response.Content.ReadAsStringAsync()); var root = doc.RootElement; Console.WriteLine("Session created."); Console.WriteLine($"Session id: {root.GetProperty("sessionId").GetString()}"); Console.WriteLine($"Auth token: {root.GetProperty("authToken").GetString()}");Un esempio del corpo della risposta:
{ "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567", "authToken": "<session-authorization-token>", "status": "NotStarted", "modelVersion": "2024-11-15", "results": { "attempts": [], "verifyReferences": [ { "referenceType": "image", "faceRectangle": { "top": 98, "left": 131, "width": 233, "height": 300 }, "qualityForRecognition": "high" } ] } }L'applicazione front-end fornisce l'immagine di riferimento durante l'inizializzazione degli SDK per dispositivi mobili. Questo scenario non è supportato nella soluzione Web.
Il server app ora può eseguire una query per il risultato della verifica oltre al risultato del rilevamento liveness.
using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key); var response = await client.GetAsync($"{endpoint}/face/v1.2/livenessSessions/{sessionId}/result"); response.EnsureSuccessStatusCode(); using var doc = JsonDocument.Parse(await response.Content.ReadAsStringAsync()); var root = doc.RootElement; var attempts = root.GetProperty("results").GetProperty("attempts"); var latestAttempt = attempts[attempts.GetArrayLength() - 1]; var attemptStatus = latestAttempt.GetProperty("attemptStatus").GetString(); Console.WriteLine($"Session id: {root.GetProperty("sessionId").GetString()}"); Console.WriteLine($"Session status: {root.GetProperty("status").GetString()}"); Console.WriteLine($"Latest attempt status: {attemptStatus}"); if (attemptStatus == "Succeeded") { var decision = latestAttempt.GetProperty("result").GetProperty("livenessDecision").GetString(); var verify = latestAttempt.GetProperty("verifyResult"); Console.WriteLine($"Liveness detection decision: {decision}"); Console.WriteLine($"Verify isIdentical: {verify.GetProperty("isIdentical").GetBoolean()}"); Console.WriteLine($"Verify matchConfidence: {verify.GetProperty("matchConfidence").GetDouble()}"); } else { var err = latestAttempt.GetProperty("error"); Console.WriteLine($"Error: {err.GetProperty("code").GetString()} - {err.GetProperty("message").GetString()}"); }Un esempio del corpo della risposta:
{ "sessionId": "b12e033e-bda7-4b83-a211-e721c661f30e", "authToken": "eyJhbGciOiJFUzI1NiIsIm", "status": "NotStarted", "modelVersion": "2024-11-15", "results": { "attempts": [ { "attemptId": 2, "attemptStatus": "Succeeded", "result": { "livenessDecision": "realface", "targets": { "color": { "faceRectangle": { "top": 669, "left": 203, "width": 646, "height": 724 } } }, "verifyResult": { "matchConfidence": 0.08871888, "isIdentical": false }, "digest": "B0A803BB7B26F3C8F29CD36030F8E63ED3FAF955FEEF8E01C88AB8FD89CCF761", "sessionImageId": "Ae3PVWlXAmVAnXgkAFt1QSjGUWONKzWiSr2iPh9p9G4I", "verifyImageHash": "43B7D8E8769533C3290DBD37A84D821B2C28CB4381DF9C6784DBC4AAF7E45018" } }, { "attemptId": 1, "attemptStatus": "Failed", "error": { "code": "FaceWithMaskDetected", "message": "Mask detected on face image.", "targets": { "color": { "faceRectangle": { "top": 669, "left": 203, "width": 646, "height": 724 } } } } } ], "verifyReferences": [ { "referenceType": "image", "faceRectangle": { "top": 316, "left": 131, "width": 498, "height": 677 }, "qualityForRecognition": "high" } ] } }Il server app può eliminare la sessione se il risultato non è più necessario.
using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key); await client.DeleteAsync($"{endpoint}/face/v1.2/livenessWithVerifySessions/{sessionId}"); Console.WriteLine($"Liveness-with-Verify session deleted: {sessionId}");
Eseguire altre operazioni sul viso dopo il rilevamento liveness
Facoltativamente, è possibile eseguire operazioni aggiuntive sul viso dopo il test di vivacità, come l'analisi facciale (per ottenere attributi facciali) e le operazioni di identificazione facciale.
- Impostare il parametro
enableSessionImagesutruedurante il passaggio Session-Creation. - Estrarre il
sessionImageIddal passaggio Session-Get-Result. - Scaricare l'immagine della sessione (a cui si fa riferimento nell'API operazione dell'immagine sessione Ottieni liveness) oppure specificare l'operazione
sessionImageIdnell'API Rileva dall'ID immagine della sessione per continuare con altre operazioni di analisi del viso o identità del viso. Per altre informazioni su queste operazioni, vedere Concetti relativi al rilevamento dei visi e Concetti relativi al riconoscimento dei volti.
Opzioni di supporto
Oltre a usare le opzioni di supporto principali degli strumenti foundry, è anche possibile pubblicare le domande nella sezione relativa ai problemi del repository SDK.
Contenuti correlati
Per informazioni su come integrare la soluzione di liveness nell'applicazione esistente, consultare il riferimento di Azure Vision SDK.
Per altre informazioni sulle funzionalità disponibili per orchestrare la soluzione di liveness, vedere le informazioni di riferimento sull'API REST della sessione.