Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Découvrez comment intégrer à votre flux de travail la détection de vivacité du visage à l'aide de la logique serveur et des applications clientes frontend complémentaires.
Conseil / Astuce
Pour obtenir des informations générales sur la détection de la vivacité des visages, consultez le guide conceptuel.
Dans ce tutoriel, vous allez apprendre à exécuter une application front-end avec un serveur d’applications pour effectuer la détection de vivacité. Vous pouvez également ajouter la vérification des visages sur différentes plateformes et langues.
Important
Les Kits de développement logiciel (SDK) clients Face pour la vivacité sont une fonctionnalité contrôlée. Vous devez demander l’accès à la fonctionnalité liveness en remplissant le formulaire d’admission Face Recognition. Lorsque l'accès est accordé à votre abonnement Azure, vous pouvez télécharger le kit de développement logiciel Face liveness (SDK).
Prérequis
- Abonnement Azure - En créer un gratuitement
- Votre compte Azure doit disposer d’un rôle Contributeur Cognitive Services pour que vous puissiez accepter les termes de l’IA responsable et créer une ressource. Pour que ce rôle soit attribué à votre compte, suivez les étapes de la documentation Attribuer des rôles ou contactez votre administrateur.
- Une fois que vous avez votre abonnement Azure, créez une ressource Détection de visages dans le portail Azure pour obtenir votre clé et votre point de terminaison. À la fin du déploiement, sélectionnez Accéder à la ressource.
- Vous avez besoin de la clé et du point de terminaison à partir de la ressource que vous créez pour connecter votre application au service Face.
- Accès aux artefacts fermés requis pour Azure Vision dans le SDK Face Client Foundry Tools pour mobile (iOS et Android) et web.
- Pour commencer, vous devez demander les fonctionnalités d’accès limité à la reconnaissance faciale pour accéder aux artefacts fermés. Pour plus d’informations, consultez la page accès limité à la reconnaissance faciale.
- Connaissance de la fonctionnalité de détection de vivacité du visage. Consultez le guide conceptuel.
Conseil / Astuce
Une fois les prérequis terminés, vous pouvez essayer l’expérience d’liveness sur les plateformes suivantes :
- iOS : App Store iOS : appuyez sur l’écran de l’application 10 fois après l’installation pour activer le mode développeur.
- Android : Google Play Store : appuyez sur l’écran de l’application 10 fois après l’installation pour activer le mode développeur.
- Web : essayez-le directement dans Vision Studio.
Vous pouvez également générer et exécuter un exemple frontal complet (iOS, Android ou Web) à partir de la section Exemples .
Préparer l’application frontale
Nous fournissons des kits SDK dans plusieurs langages pour simplifier l’intégration à votre application frontale. Reportez-vous au fichier README de votre KIT de développement logiciel (SDK) choisi dans les sections suivantes pour intégrer l’interface utilisateur et le code requis.
Important
Chaque Kit de développement logiciel (SDK) front-end nécessite l’accès à une ressource contrôlée pour la compilation réussie. Consultez les instructions suivantes pour configurer cet accès.
Pour Swift iOS :
- Artefacts : Kit de développement logiciel (SDK) azure AI Face UI pour iOS
- Référence de l’API : AzureAIVisionFaceUI
- Exemple : exemple iOS
Pour Kotlin/Java Android :
- Artifacts : Maven Central : com.azure:azure-ai-vision-face-ui
- Référence de l'API : azure-ai-vision-face-ui Reference
- Exemple : Exemple Android
Pour le web JavaScript :
- Artéfacts : @azure/ai-vision-face-ui - npm
- Référence de l’API : AzureAIVisionFaceUI
- Exemple : exemple web
- Prise en charge de l’infrastructure : fonctionne avec des frameworks populaires tels que React (y compris Next.js), Vue.jset Angular.
Une fois intégré à votre application frontend, le SDK démarre la caméra, guide l'utilisateur pour ajuster sa position, compose les données de vivacité et les envoie au service Face d'Azure AI pour leur traitement.
Surveillez la section Versions du référentiel pour les nouvelles mises à jour de version du SDK et activez les alertes de mise à jour de dépendance automatisées, telles que GitHub Dependabot (pour les dépôts GitHub) ou Renovate (GitHub, GitLab, Bitbucket, Azure Repos).
Effectuer la détection de la vivacité
Les étapes suivantes décrivent le processus d’orchestration liveness :
L’application front-end démarre la vérification de liveness et notifie le serveur d’applications.
Le serveur d’applications crée une session liveness avec Azure AI Face Service. Le service crée une session liveness et répond avec un jeton d’autorisation de session. Pour plus d’informations sur chaque paramètre de requête impliqué dans la création d’une session liveness, consultez 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()}");Un exemple du corps de réponse :
{ "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5", "authToken": "<session-authorization-token>", "status": "NotStarted", "modelVersion": "2025-05-20", "results": { "attempts": [] } }Le serveur d’applications fournit le jeton d’autorisation de session à l’application frontale.
L'application frontend utilise le jeton d'autorisation de session pour démarrer le détecteur de vivacité faciale, ce qui lance le flux de vivacité.
Le Kit de développement logiciel (SDK) démarre la caméra, guide l’utilisateur(-trice) pour se positionner correctement, puis prépare les données pour appeler le point d'accès du service de détection de la présence.
Le Kit de développement logiciel (SDK) appelle le service Azure Vision Face pour effectuer la détection de la vivacité. Une fois le service répondu, le Kit de développement logiciel (SDK) avertit l’application frontale que la vérification de l’état d’exécution est terminée. Remarque : la réponse du service ne contient pas la décision de disponibilité. Vous devez interroger ces informations à partir du serveur d’applications.
L’application front-end relaye la complétion de la vérification de la vivacité au serveur d’applications.
Le serveur d’applications interroge le résultat de la détection de vivacité à partir du service Azure Vision Face.
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 exemple du corps de réponse :
{ "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 } } } } } ] } }Le serveur d’applications supprime la session une fois qu’elle interroge tous les résultats de la session.
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}");
Effectuer une détection de vitalité avec vérification faciale
La combinaison de la vérification des visages avec la détection de la vivacité permet la vérification biométrique d’une personne d’intérêt particulière avec une garantie supplémentaire que la personne est physiquement présente dans le système.
L’intégration de la détection de présence dans le cadre de la vérification implique deux parties :
Étape 1 - Sélectionner une image de référence
Pour obtenir les résultats de reconnaissance les plus précis, suivez les conseils répertoriés dans les exigences de composition pour les scénarios de vérification d’ID.
Étape 2 : configurer l’orchestration de la vie avec vérification
Les étapes générales suivantes montrent comment orchestrer la vie avec la vérification :
Fournissez l’image de référence de vérification à l’aide de l’une des deux méthodes suivantes :
Le serveur d’applications fournit l’image de référence lors de la création de la session liveness. Pour plus d’informations sur chaque paramètre de requête impliqué dans la création d’une session liveness avec vérification, consultez 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 exemple du corps de réponse :
{ "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’application frontale fournit l’image de référence lors de l’initialisation des kits SDK mobiles. Ce scénario n’est pas pris en charge dans la solution web.
Le serveur d’applications peut désormais interroger le résultat de vérification en plus du résultat de la détection de la vivacité.
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 exemple du corps de réponse :
{ "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" } ] } }Le serveur d’applications peut supprimer la session si vous n’avez plus besoin de son résultat.
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}");
Effectuer d’autres opérations de visage après la détection de la vivacité
Facultativement, vous pouvez effectuer des opérations faciales supplémentaires après la vérification de la vivacité, telles que l'analyse faciale (pour obtenir des attributs du visage) et les opérations d'identification faciale.
- Définissez le paramètre
enableSessionImageàtruelors de l’étape Session-Creation. - Extractez le
sessionImageIdde l’étape Session-Get-Result. - Téléchargez l’image de session (référencée dans l’API Liveness Get Session Image Operation) ou fournissez le
sessionImageIddans l’opération de l’API Detect from Session Image ID pour continuer avec d’autres opérations d’analyse ou d’identité de visage. Pour plus d’informations sur ces opérations, consultez les concepts de détection des visages et les concepts de reconnaissance faciale.
Options de support
En plus d’utiliser les principales options de prise en charge des outils Foundry, vous pouvez également publier vos questions dans la section problèmes du dépôt du Kit de développement logiciel (SDK).
Contenu connexe
Pour savoir comment intégrer la solution liveness à votre application existante, consultez la référence du Kit de développement logiciel (SDK) Azure Vision.
Pour en savoir plus sur les fonctionnalités disponibles pour orchestrer la solution liveness, consultez la référence de l’API REST Session.