Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erfahren Sie, wie Sie die Gesichts-Liveness-Erkennung in Ihren Workflow integrieren, indem Sie serverseitige Logik und begleitende Frontend-Client-Anwendungen verwenden.
Tipp
Allgemeine Informationen zur Gesichtslebenserkennung finden Sie in der konzeptionellen Anleitung.
In diesem Tutorial erfahren Sie, wie Sie eine Frontend-App mit einem Applikationsserver ausführen, um die Lebendigkeitserkennung zu ermöglichen. Sie können die Gesichtsüberprüfung auch auf verschiedenen Plattformen und Sprachen hinzufügen.
Wichtig
Die Face-Client-SDKs für die Liveness sind ein eingeschränktes Feature. Sie müssen den Zugriff auf das Liveness-Feature anfordern, indem Sie das Aufnahmeformular für die Gesichtserkennung ausfüllen. Wenn Ihrem Azure-Abonnement Zugriff gewährt wird, können Sie das Face Liveness-SDK herunterladen.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Damit Sie den entsprechenden Bedingungen für verantwortungsvolle KI zustimmen und eine Ressource erstellen können, muss Ihrem Azure-Konto die Rolle Cognitive Services-Mitwirkender zugewiesen sein. Um diese Rolle Ihrem Konto zuzuweisen, führen Sie die Schritte in der Dokumentation Zuweisen von Rollen aus, oder wenden Sie sich an Ihren Administrator.
- Sobald Sie über Ihr Azure-Abonnement verfügen, sollten Sie im Azure-Portal eine Gesichtserkennungsressource erstellen, um Ihren Schlüssel und Endpunkt zu erhalten. Wählen Sie nach Abschluss der Bereitstellung Zu Ressource wechseln aus.
- Sie benötigen den Schlüssel und den Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit dem Gesichtserkennungsdienst verbinden zu können.
- Zugriff auf die für Azure Vision erforderlichen geschützten Artefakte im Foundry Tools Face Client SDK für Mobile (iOS und Android) und Web.
- Um zu beginnen, müssen Sie sich für die limitierten Zugangsfeatures der Gesichtserkennung bewerben, um Zugriff auf die geschützten Artefakte zu erhalten. Weitere Informationen finden Sie auf der Seite zum eingeschränkten Zugriff auf die Gesichtserkennung.
- Vertrautheit mit der Liveness-Gesichtserkennungsfunktion. Sehen Sie sich den konzeptionellen Leitfaden an.
Tipp
Nach Abschluss der Voraussetzungen können Sie die Liveness-Erfahrung auf den folgenden Plattformen ausprobieren:
-
iOS: iOS App Store – tippen Sie 10 Mal nach der Installation auf den App-Bildschirm, um den Entwicklermodus zu aktivieren.
- Android: Google Play Store – tippen Sie 10 Mal nach der Installation auf den App-Bildschirm, um den Entwicklermodus zu aktivieren.
- Web: Probieren Sie es direkt in Vision Studio aus.
Sie können auch ein vollständiges Frontend-Beispiel (iOS, Android oder Web) aus dem Abschnitt "Beispiele " erstellen und ausführen.
Vorbereiten der Front-End-Anwendung
Wir stellen SDKs in mehreren Sprachen bereit, um die Integration in Ihre Frontend-Anwendung zu vereinfachen. Lesen Sie in den folgenden Abschnitten die README-Datei für das ausgewählte SDK, um sowohl die Benutzeroberfläche als auch den erforderlichen Code zu integrieren.
Wichtig
Jedes Frontend-SDK erfordert Zugriff auf eine gated-Ressource, um erfolgreich kompiliert zu werden. Lesen Sie die folgenden Anweisungen zum Einrichten dieses Zugriffs.
Für Swift iOS:
- Artefakte: Azure AI Face UI SDK für iOS
- API-Referenz: AzureAIVisionFaceUI-Referenz
- Beispiel: iOS-Beispiel
Für Kotlin/Java Android:
- Artefakte: Maven Central: com.azure:azure-ai-vision-face-ui
- API-Referenz: Azure-ai-vision-face-ui-Referenz
- Beispiel: Android-Beispiel
Für JavaScript-Web:
- Artefakte: @azure/ai-vision-face-ui - npm
- API-Referenz: AzureAIVisionFaceUI-Referenz
- Beispiel: Webbeispiel
- Framework-Unterstützung: Arbeitet mit gängigen Frameworks wie React (einschließlich Next.js), Vue.jsund Angular.
Sobald sie in Ihre Frontend-Anwendung integriert ist, startet das SDK die Kamera, leitet den Benutzer zum Anpassen seiner Position, verfasst die Liveness-Nutzlast und sendet sie zur Verarbeitung an den Azure AI Face-Dienst.
Überwachen Sie den Abschnitt "Releases" des Repositorys auf neue SDK-Versionsupdates, und aktivieren Sie automatisierte Benachrichtigungen für Abhängigkeitsupdates, z. B. GitHub Dependabot (für GitHub-Repositorys) oder Renovieren (GitHub, GitLab, Bitbucket, Azure Repos).
Durchführen der Liveness-Erkennung
Die folgenden Schritte beschreiben den Liveness-Orchestrierungsprozess:
Die Front-End-Anwendung startet die Liveness-Überprüfung und benachrichtigt den App-Server.
Der App-Server erstellt eine neue Liveness-Sitzung mit dem Azure KI-Gesichtserkennungsdienst. Der Dienst erstellt eine Liveness-Sitzung und antwortet mit einem Sitzungs-Autorisierungstoken. Weitere Informationen zu jedem Anforderungsparameter, der an der Erstellung einer Liveness-Sitzung beteiligt ist, finden Sie unter Liveness Create Session Operation.
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()}");Ein Beispiel für den Antworttext:
{ "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5", "authToken": "<session-authorization-token>", "status": "NotStarted", "modelVersion": "2025-05-20", "results": { "attempts": [] } }Der App-Server stellt das Sitzungsautorisierungstoken zurück zur Front-End-Anwendung bereit.
Die Front-End-Anwendung verwendet das Sitzungsautorisierungstoken, um die Gesichtslebendigkeitserkennung zu starten, die den Lebendigkeitsflow startet.
Das SDK startet die Kamera, bringt die Person in die richtige Position und bereitet anschließend die Nutzdaten vor, um den Endpunkt für den Lebendigkeitserkennungsdienst aufzurufen.
Das SDK ruft den Azure Vision Face-Dienst auf, um die Lebendigkeitserkennung durchzuführen. Sobald der Dienst antwortet, benachrichtigt das SDK die Frontend-Anwendung, dass die Liveness-Überprüfung abgeschlossen ist. Hinweis: Die Dienstantwort enthält nicht das Ergebnis der Liveness-Prüfung. Sie müssen diese Informationen vom App-Server abfragen.
Die Front-End-Anwendung informiert den App-Server über den Abschluss der Liveness-Überprüfung.
Der App-Server fragt das Ergebnis der Lebendigkeitserkennung vom Azure Vision-Gesichtserkennungsdienst ab.
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()}"); }Ein Beispiel für den Antworttext:
{ "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 } } } } } ] } }Der App-Server löscht die Sitzung, nachdem sie alle Sitzungsergebnisse abfragt.
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}");
Durchführen der Liveness-Erkennung mit Gesichtsüberprüfung
Die Kombination aus Gesichtsüberprüfung und Liveness-Erkennung ermöglicht die biometrische Überprüfung einer bestimmten Person von Interesse mit der zusätzlichen Garantie, dass die Person physisch im System vorhanden ist.
Die Integration der Lebendigkeitserkennung in die Überprüfung besteht aus zwei Teilen.
Schritt 1 : Auswählen eines Referenzbilds
Um die genauesten Erkennungsergebnisse zu erzielen, befolgen Sie die Tipps, die in den Kompositionsanforderungen für ID-Überprüfungsszenarien aufgeführt sind.
Schritt 2: Einrichtung der Orchestrierung von Lebendigkeit mit Überprüfung
Die folgenden allgemeinen Schritte zeigen, wie Sie die Lebendigkeit mit Überprüfung orchestrieren können:
Stellen Sie das Überprüfungsreferenzbild mithilfe einer der folgenden beiden Methoden bereit:
Der App-Server stellt das Referenzbild beim Erstellen der Liveness-Sitzung bereit. Weitere Informationen zu jedem Anforderungsparameter, der an der Erstellung einer Liveness-Sitzung mit Überprüfung beteiligt ist, finden Sie unter 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()}");Ein Beispiel für den Antworttext:
{ "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" } ] } }Die Frontend-Anwendung stellt beim Initialisieren der mobilen SDKs das Referenzimage bereit. Dieses Szenario wird in der Weblösung nicht unterstützt.
Der App-Server kann nun neben dem Liveness-Ergebnis auch das Überprüfungsergebnis abfragen.
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()}"); }Ein Beispiel für den Antworttext:
{ "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" } ] } }Der App-Server kann die Sitzung löschen, wenn Sie das Ergebnis nicht mehr benötigen.
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}");
Ausführen anderer Gesichtsvorgänge nach der Liveness-Erkennung
Optionalerweise können Sie nach der Überprüfung der Lebendigkeit zusätzliche Gesichtsvorgänge ausführen, z. B. eine Gesichtsanalyse (zum Abrufen von Gesichtsattributen) und Gesichtsidentitätsvorgänge.
- Legen Sie den
enableSessionImageParameter auftruewährend des Schritts zur Sitzungserstellung fest. - Extrahieren Sie
sessionImageIdaus dem Schritt Session-Get-Result. - Laden Sie das Sitzungsbild (referenziert in Lebendigkeitssitzungsvorgänge – Abrufen des Sitzungsbilds) herunter, oder verwenden Sie
sessionImageIdim Vorgang Über Sitzungsimage-ID-API erkennen, um mit anderen Gesichtsanalyse- oder Gesichtserkennungsvorgängen fortzufahren. Weitere Informationen zu diesen Vorgängen finden Sie unter Gesichtserkennungskonzepte und Gesichtserkennungskonzepte.
Supportoptionen
Zusätzlich zur Verwendung der wichtigsten Supportoptionen für Foundry Tools können Sie Ihre Fragen auch im Abschnitt "Probleme " des SDK-Repositorys posten.
Verwandte Inhalte
Informationen zum Integrieren der Liveness-Lösung in Ihre vorhandene Anwendung finden Sie in der Azure Vision SDK-Referenz.
Weitere Informationen zu den verfügbaren Funktionen zur Orchestrierung der Liveness-Lösung finden Sie in der REST-API-Referenz für die Sitzung.