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.
Important
Si vous utilisez les produits ou services Microsoft pour traiter des données biométriques, il vous incombe de : (i) fournir une notification aux personnes concernées, y compris en ce qui concerne les périodes de conservation et la destruction ; (ii) obtenir le consentement des personnes concernées ; et (iii) la suppression des données biométriques, si nécessaire et nécessaire en vertu des exigences de protection des données applicables. « Données biométriques » aura la signification définie à l’article 4 du RGPD et, le cas échéant, des termes équivalents dans d’autres exigences de protection des données. Pour plus d’informations, consultez Données et confidentialité pour le service Visage.
Caution
L’accès au service Visage est limité en fonction des critères d’éligibilité et d’utilisation afin de prendre en charge nos principes d’IA responsable. Le service Visage est disponible uniquement pour les clients et partenaires gérés par Microsoft. Utilisez le Formulaire d’inscription pour l’utilisation de la reconnaissance faciale pour demander l’accès. Pour terminer les étapes de ce démarrage rapide, demandez l'identification faciale [Face API] (correspondance 1:N ou 1:1) avec détection facultative de l'activité faciale pour le cas d'utilisation du contrôle d'accès sans contact. Pour plus d'informations, consultez la page d'Accès limité Visage.
Utilisez le portail Microsoft Foundry pour détecter les visages dans une image.
Prerequisites
- Un compte Azure. Si vous n’en avez pas, vous pouvez en créer un gratuitement.
- Ressource Microsoft Foundry
Setup
Accédez au portail Microsoft Foundry et connectez-vous avec votre compte Azure qui dispose de la ressource Foundry.
Sélectionnez Microsoft Foundry dans le coin supérieur gauche, faites défiler vers le bas et sélectionnez Explorer les outils Foundry, puis Sélectionnez Vision + Document. Dans l’onglet Visage, sélectionnez Détecter les visages dans une image.
Détecter des visages
Sélectionnez une image dans l'ensemble disponible ou téléchargez votre propre image. Le service détectera les visages dans l’image et retournera les coordonnées de leur cadre de sélection, les coordonnées des points de repère du visage et leurs attributs. Sélectionnez l’onglet JSON pour afficher la réponse JSON complète à partir de l’API.
Étapes suivantes
Dans ce guide de démarrage rapide, vous avez effectué la détection des visages à l’aide du portail Microsoft Foundry. Découvrez à présent les différents modèles de détection de visage, et la façon de spécifier le modèle adapté à votre cas d’usage.
Commencez à utiliser la reconnaissance faciale avec la bibliothèque de client Visage pour .NET. Le service Azure AI Visage vous permet d’accéder à des algorithmes avancés de détection et de reconnaissance des visages humains dans les images. Suivez les étapes ci-après pour installer le package et essayer l’exemple de code pour l’identification de visages de base à l’aide d’images à distance.
Documentation de référence | Code source de la bibliothèque | Package (NuGet) | Exemples
Prerequisites
- Abonnement Azure. Créez-en un gratuitement.
- L’IDE Visual Studio ou la version actuelle de .NET Core.
- Une fois que vous avez votre abonnement Azure, créez une ressource Visage dans le portail Azure pour obtenir votre clé et votre point de terminaison. Vous pouvez utiliser le niveau tarifaire Gratuit (
F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.
Créer des variables d’environnement
Dans cet exemple, écrivez vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.
Accédez au portail Azure. Si la ressource que vous avez créée dans la section Prérequis a été déployée avec succès, sélectionnez Accéder à la ressource sous Étapes suivantes. Vous pouvez trouver votre clé et votre point de terminaison sous Gestion des ressources sur la page Clés et point de terminaison de la ressource Face. Votre clé de ressource n’est pas la même que votre ID d’abonnement Azure.
Pour définir la variable d’environnement de votre clé et de votre point de terminaison, ouvrez une fenêtre de console et suivez les instructions qui suivent pour votre système d’exploitation et votre environnement de développement.
- Pour définir la variable d’environnement
FACE_APIKEY, remplacez<your_key>par l’une des clés de votre ressource. - Pour définir la variable d’environnement
FACE_ENDPOINT, remplacez<your_endpoint>par le point de terminaison de votre ressource.
Important
Utilisez les clés API avec précaution. N’incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement. Si vous utilisez une clé API, stockez-la en lieu sûr dans Azure Key Vault. Pour plus d’informations sur l’utilisation sécurisée des clés API dans vos applications, consultez Clés API avec Azure Key Vault.
Pour découvrir plus d’informations sur la sécurité des services IA, consultez Authentifier les requêtes auprès d’Azure AI services.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Après avoir ajouté les variables d'environnement, il se peut que vous deviez redémarrer tous les programmes en cours d'exécution qui liront les variables d'environnement, y compris la fenêtre de console.
Identifier et vérifier les visages
Créez une application C#.
À l’aide de Visual Studio, créez une nouvelle application console .NET.
Installer la bibliothèque de client
Une fois que vous avez créé un nouveau projet, installez la bibliothèque cliente en cliquant avec le bouton droit sur le projet dans l’Explorateur de solutions et en sélectionnant Gérer les packages NuGet. Dans le gestionnaire de paquets qui s’ouvre, sélectionnez Parcourir, sélectionnez Inclure la préversion et recherchez
Azure.AI.Vision.Face. Sélectionnez la dernière version, puis sélectionnez Installer.Ajoutez le code suivant dans le fichier Program.cs, en remplaçant le code existant.
Note
Si vous n'avez pas reçu l'accès au service Face en utilisant le formulaire d'admission, certaines de ces fonctions ne fonctionneront pas.
using Azure; using Azure.AI.Vision.Face; namespace FaceQuickstart { class Program { static readonly string LargePersonGroupId = Guid.NewGuid().ToString(); // URL path for the images. const string ImageBaseUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/"; // From your Face subscription in the Azure portal, get your subscription key and endpoint. static readonly string SubscriptionKey = Environment.GetEnvironmentVariable("FACE_APIKEY") ?? "<apikey>"; static readonly string Endpoint = Environment.GetEnvironmentVariable("FACE_ENDPOINT") ?? "<endpoint>"; static void Main(string[] args) { // Recognition model 4 was released in 2021 February. // It is recommended since its accuracy is improved // on faces wearing masks compared with model 3, // and its overall accuracy is improved compared // with models 1 and 2. FaceRecognitionModel RecognitionModel4 = FaceRecognitionModel.Recognition04; // Authenticate. FaceClient client = Authenticate(Endpoint, SubscriptionKey); // Identify - recognize a face(s) in a large person group (a large person group is created in this example). IdentifyInLargePersonGroup(client, ImageBaseUrl, RecognitionModel4).Wait(); Console.WriteLine("End of quickstart."); } /* * AUTHENTICATE * Uses subscription key and region to create a client. */ public static FaceClient Authenticate(string endpoint, string key) { return new FaceClient(new Uri(endpoint), new AzureKeyCredential(key)); } // Detect faces from image url for recognition purposes. This is a helper method for other functions in this quickstart. // Parameter `returnFaceId` of `DetectAsync` must be set to `true` (by default) for recognition purposes. // Parameter `returnFaceAttributes` is set to include the QualityForRecognition attribute. // Recognition model must be set to recognition_03 or recognition_04 as a result. // Result faces with insufficient quality for recognition are filtered out. // The field `faceId` in returned `DetectedFace`s will be used in Verify and Identify. // It will expire 24 hours after the detection call. private static async Task<List<FaceDetectionResult>> DetectFaceRecognize(FaceClient faceClient, string url, FaceRecognitionModel recognitionModel) { // Detect faces from image URL. var response = await faceClient.DetectAsync(new Uri(url), FaceDetectionModel.Detection03, recognitionModel, true, [FaceAttributeType.QualityForRecognition]); IReadOnlyList<FaceDetectionResult> detectedFaces = response.Value; List<FaceDetectionResult> sufficientQualityFaces = new List<FaceDetectionResult>(); foreach (FaceDetectionResult detectedFace in detectedFaces) { QualityForRecognition? faceQualityForRecognition = detectedFace.FaceAttributes.QualityForRecognition; if (faceQualityForRecognition.HasValue && (faceQualityForRecognition.Value != QualityForRecognition.Low)) { sufficientQualityFaces.Add(detectedFace); } } Console.WriteLine($"{detectedFaces.Count} face(s) with {sufficientQualityFaces.Count} having sufficient quality for recognition detected from image `{Path.GetFileName(url)}`"); return sufficientQualityFaces; } /* * IDENTIFY FACES * To identify faces, you need to create and define a large person group. * The Identify operation takes one or several face IDs from DetectedFace or PersistedFace and a LargePersonGroup and returns * a list of Person objects that each face might belong to. Returned Person objects are wrapped as Candidate objects, * which have a prediction confidence value. */ public static async Task IdentifyInLargePersonGroup(FaceClient client, string url, FaceRecognitionModel recognitionModel) { Console.WriteLine("========IDENTIFY FACES========"); Console.WriteLine(); // Create a dictionary for all your images, grouping similar ones under the same key. Dictionary<string, string[]> personDictionary = new Dictionary<string, string[]> { { "Family1-Dad", new[] { "Family1-Dad1.jpg", "Family1-Dad2.jpg" } }, { "Family1-Mom", new[] { "Family1-Mom1.jpg", "Family1-Mom2.jpg" } }, { "Family1-Son", new[] { "Family1-Son1.jpg", "Family1-Son2.jpg" } } }; // A group photo that includes some of the persons you seek to identify from your dictionary. string sourceImageFileName = "identification1.jpg"; // Create a large person group. Console.WriteLine($"Create a person group ({LargePersonGroupId})."); LargePersonGroupClient largePersonGroupClient = new FaceAdministrationClient(new Uri(Endpoint), new AzureKeyCredential(SubscriptionKey)).GetLargePersonGroupClient(LargePersonGroupId); await largePersonGroupClient.CreateAsync(LargePersonGroupId, recognitionModel: recognitionModel); // The similar faces will be grouped into a single large person group person. foreach (string groupedFace in personDictionary.Keys) { // Limit TPS await Task.Delay(250); var createPersonResponse = await largePersonGroupClient.CreatePersonAsync(groupedFace); Guid personId = createPersonResponse.Value.PersonId; Console.WriteLine($"Create a person group person '{groupedFace}'."); // Add face to the large person group person. foreach (string similarImage in personDictionary[groupedFace]) { Console.WriteLine($"Check whether image is of sufficient quality for recognition"); var detectResponse = await client.DetectAsync(new Uri($"{url}{similarImage}"), FaceDetectionModel.Detection03, recognitionModel, false, [FaceAttributeType.QualityForRecognition]); IReadOnlyList<FaceDetectionResult> facesInImage = detectResponse.Value; bool sufficientQuality = true; foreach (FaceDetectionResult face in facesInImage) { QualityForRecognition? faceQualityForRecognition = face.FaceAttributes.QualityForRecognition; // Only "high" quality images are recommended for person enrollment if (faceQualityForRecognition.HasValue && (faceQualityForRecognition.Value != QualityForRecognition.High)) { sufficientQuality = false; break; } } if (!sufficientQuality) { continue; } if (facesInImage.Count != 1) { continue; } // add face to the large person group Console.WriteLine($"Add face to the person group person({groupedFace}) from image `{similarImage}`"); await largePersonGroupClient.AddFaceAsync(personId, new Uri($"{url}{similarImage}"), detectionModel: FaceDetectionModel.Detection03); } } // Start to train the large person group. Console.WriteLine(); Console.WriteLine($"Train person group {LargePersonGroupId}."); Operation operation = await largePersonGroupClient.TrainAsync(WaitUntil.Completed); // Wait until the training is completed. await operation.WaitForCompletionResponseAsync(); Console.WriteLine("Training status: succeeded."); Console.WriteLine(); Console.WriteLine("Pausing for 60 seconds to avoid triggering rate limit on free account..."); await Task.Delay(60000); List<Guid> sourceFaceIds = new List<Guid>(); // Detect faces from source image url. List<FaceDetectionResult> detectedFaces = await DetectFaceRecognize(client, $"{url}{sourceImageFileName}", recognitionModel); // Add detected faceId to sourceFaceIds. foreach (FaceDetectionResult detectedFace in detectedFaces) { sourceFaceIds.Add(detectedFace.FaceId.Value); } // Identify the faces in a large person group. var identifyResponse = await client.IdentifyFromLargePersonGroupAsync(sourceFaceIds, LargePersonGroupId); IReadOnlyList<FaceIdentificationResult> identifyResults = identifyResponse.Value; foreach (FaceIdentificationResult identifyResult in identifyResults) { if (identifyResult.Candidates.Count == 0) { Console.WriteLine($"No person is identified for the face in: {sourceImageFileName} - {identifyResult.FaceId},"); continue; } FaceIdentificationCandidate candidate = identifyResult.Candidates.First(); var getPersonResponse = await largePersonGroupClient.GetPersonAsync(candidate.PersonId); string personName = getPersonResponse.Value.Name; Console.WriteLine($"Person '{personName}' is identified for the face in: {sourceImageFileName} - {identifyResult.FaceId}," + $" confidence: {candidate.Confidence}."); var verifyResponse = await client.VerifyFromLargePersonGroupAsync(identifyResult.FaceId, LargePersonGroupId, candidate.PersonId); FaceVerificationResult verifyResult = verifyResponse.Value; Console.WriteLine($"Verification result: is a match? {verifyResult.IsIdentical}. confidence: {verifyResult.Confidence}"); } Console.WriteLine(); // Delete large person group. Console.WriteLine("========DELETE PERSON GROUP========"); Console.WriteLine(); await largePersonGroupClient.DeleteAsync(); Console.WriteLine($"Deleted the person group {LargePersonGroupId}."); Console.WriteLine(); } } }Exécution de l'application
Exécutez l’application en sélectionnant le bouton Déboguer en haut de la fenêtre IDE.
Output
========IDENTIFY FACES========
Create a person group (18d1c443-a01b-46a4-9191-121f74a831cd).
Create a person group person 'Family1-Dad'.
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Dad) from image `Family1-Dad1.jpg`
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Dad) from image `Family1-Dad2.jpg`
Create a person group person 'Family1-Mom'.
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Mom) from image `Family1-Mom1.jpg`
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Mom) from image `Family1-Mom2.jpg`
Create a person group person 'Family1-Son'.
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Son) from image `Family1-Son1.jpg`
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Son) from image `Family1-Son2.jpg`
Train person group 18d1c443-a01b-46a4-9191-121f74a831cd.
Training status: succeeded.
Pausing for 60 seconds to avoid triggering rate limit on free account...
4 face(s) with 4 having sufficient quality for recognition detected from image `identification1.jpg`
Person 'Family1-Dad' is identified for the face in: identification1.jpg - ad813534-9141-47b4-bfba-24919223966f, confidence: 0.96807.
Verification result: is a match? True. confidence: 0.96807
Person 'Family1-Mom' is identified for the face in: identification1.jpg - 1a39420e-f517-4cee-a898-5d968dac1a7e, confidence: 0.96902.
Verification result: is a match? True. confidence: 0.96902
No person is identified for the face in: identification1.jpg - 889394b1-e30f-4147-9be1-302beb5573f3,
Person 'Family1-Son' is identified for the face in: identification1.jpg - 0557d87b-356c-48a8-988f-ce0ad2239aa5, confidence: 0.9281.
Verification result: is a match? True. confidence: 0.9281
========DELETE PERSON GROUP========
Deleted the person group 18d1c443-a01b-46a4-9191-121f74a831cd.
End of quickstart.
Tip
L’API Visage s’exécute sur un ensemble de modèles prédéfinis qui sont statiques par nature (les performances du modèle ne se dégradent pas ou ne s’améliorent pas quand le service est exécuté). Les résultats générés par le modèle risquent de changer si Microsoft met à jour le back-end du modèle sans migrer vers une version entièrement nouvelle du modèle. Pour tirer parti d’une version plus récente d’un modèle, vous pouvez réentraîner votre PersonGroup, en spécifiant le modèle plus récent en tant que paramètre avec les mêmes images d’inscription.
Nettoyer les ressources
Si vous souhaitez nettoyer et supprimer un abonnement Foundry Tools, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées.
Étapes suivantes
Dans le cadre de ce guide de démarrage rapide, vous avez vu comment utiliser la bibliothèque de client Visage pour .NET afin d’effectuer une identification de visages de base. Découvrez à présent les différents modèles de détection de visage, et la façon de spécifier le modèle adapté à votre cas d’usage.
- Qu’est ce que le service Visage ?
- Vous trouverez un exemple de code plus complet sur GitHub.
Commencez à utiliser la reconnaissance faciale avec la bibliothèque de client Visage pour Python. Suivez les étapes suivantes pour installer le package et essayer l’exemple de code pour les tâches de base. Le service Visage vous donne accès à des algorithmes avancés pour la détection et la reconnaissance des visages dans des images. Suivez les étapes ci-après pour installer le package et essayer l’exemple de code pour l’identification de visages de base à l’aide d’images à distance.
Documentation de référence | Code source de la bibliothèque | Package (PiPy) | Exemples
Prerequisites
- Abonnement Azure - En créer un gratuitement
-
Python 3.x
- Votre installation Python doit inclure pip. Vous pouvez vérifier si pip est installé en exécutant
pip --versionsur la ligne de commande. Procurez-vous pip en installant la dernière version de Python.
- Votre installation Python doit inclure pip. Vous pouvez vérifier si pip est installé en exécutant
- Une fois que vous avez votre abonnement Azure, créez une ressource Visage 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 aurez besoin de la clé et du point de terminaison de la ressource que vous créez pour connecter votre application à l’API Visage.
- Vous pouvez utiliser le niveau tarifaire Gratuit (
F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.
Créer des variables d’environnement
Dans cet exemple, écrivez vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.
Accédez au portail Azure. Si la ressource que vous avez créée dans la section Prérequis a été déployée avec succès, sélectionnez Accéder à la ressource sous Étapes suivantes. Vous pouvez trouver votre clé et votre point de terminaison sous Gestion des ressources sur la page Clés et point de terminaison de la ressource Face. Votre clé de ressource n’est pas la même que votre ID d’abonnement Azure.
Pour définir la variable d’environnement de votre clé et de votre point de terminaison, ouvrez une fenêtre de console et suivez les instructions qui suivent pour votre système d’exploitation et votre environnement de développement.
- Pour définir la variable d’environnement
FACE_APIKEY, remplacez<your_key>par l’une des clés de votre ressource. - Pour définir la variable d’environnement
FACE_ENDPOINT, remplacez<your_endpoint>par le point de terminaison de votre ressource.
Important
Utilisez les clés API avec précaution. N’incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement. Si vous utilisez une clé API, stockez-la en lieu sûr dans Azure Key Vault. Pour plus d’informations sur l’utilisation sécurisée des clés API dans vos applications, consultez Clés API avec Azure Key Vault.
Pour découvrir plus d’informations sur la sécurité des services IA, consultez Authentifier les requêtes auprès d’Azure AI services.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Après avoir ajouté les variables d'environnement, il se peut que vous deviez redémarrer tous les programmes en cours d'exécution qui liront les variables d'environnement, y compris la fenêtre de console.
Identifier et vérifier les visages
Installer la bibliothèque de client
Après avoir installé Python, vous pouvez installer la bibliothèque de client avec :
pip install --upgrade azure-ai-vision-faceCréer une application Python
Créez un script Python —quickstart-file.py, par exemple. Puis, ouvrez-le dans votre éditeur ou IDE habituel et collez dans le code suivant.
Note
Si vous n’avez pas reçu l’accès au service Face avec le formulaire d’entrée, certaines de ces fonctions ne fonctionneront pas.
import os import time import uuid from azure.core.credentials import AzureKeyCredential from azure.ai.vision.face import FaceAdministrationClient, FaceClient from azure.ai.vision.face.models import FaceAttributeTypeRecognition04, FaceDetectionModel, FaceRecognitionModel, QualityForRecognition # This key will serve all examples in this document. KEY = os.environ["FACE_APIKEY"] # This endpoint will be used in all examples in this quickstart. ENDPOINT = os.environ["FACE_ENDPOINT"] # Used in the Large Person Group Operations and Delete Large Person Group examples. # LARGE_PERSON_GROUP_ID should be all lowercase and alphanumeric. For example, 'mygroupname' (dashes are OK). LARGE_PERSON_GROUP_ID = str(uuid.uuid4()) # assign a random ID (or name it anything) # Create an authenticated FaceClient. with FaceAdministrationClient(endpoint=ENDPOINT, credential=AzureKeyCredential(KEY)) as face_admin_client, \ FaceClient(endpoint=ENDPOINT, credential=AzureKeyCredential(KEY)) as face_client: ''' Create the LargePersonGroup ''' # Create empty Large Person Group. Large Person Group ID must be lower case, alphanumeric, and/or with '-', '_'. print("Person group:", LARGE_PERSON_GROUP_ID) face_admin_client.large_person_group.create( large_person_group_id=LARGE_PERSON_GROUP_ID, name=LARGE_PERSON_GROUP_ID, recognition_model=FaceRecognitionModel.RECOGNITION04, ) # Define woman friend woman = face_admin_client.large_person_group.create_person( large_person_group_id=LARGE_PERSON_GROUP_ID, name="Woman", ) # Define man friend man = face_admin_client.large_person_group.create_person( large_person_group_id=LARGE_PERSON_GROUP_ID, name="Man", ) # Define child friend child = face_admin_client.large_person_group.create_person( large_person_group_id=LARGE_PERSON_GROUP_ID, name="Child", ) ''' Detect faces and register them to each person ''' # Find all jpeg images of friends in working directory (TBD pull from web instead) woman_images = [ "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/Family1-Mom1.jpg", "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/Family1-Mom2.jpg", ] man_images = [ "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/Family1-Dad1.jpg", "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/Family1-Dad2.jpg", ] child_images = [ "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/Family1-Son1.jpg", "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/Family1-Son2.jpg", ] # Add to woman person for image in woman_images: # Check if the image is of sufficent quality for recognition. sufficient_quality = True detected_faces = face_client.detect_from_url( url=image, detection_model=FaceDetectionModel.DETECTION03, recognition_model=FaceRecognitionModel.RECOGNITION04, return_face_id=True, return_face_attributes=[FaceAttributeTypeRecognition04.QUALITY_FOR_RECOGNITION], ) for face in detected_faces: if face.face_attributes.quality_for_recognition != QualityForRecognition.HIGH: sufficient_quality = False break if not sufficient_quality: continue if len(detected_faces) != 1: continue face_admin_client.large_person_group.add_face_from_url( large_person_group_id=LARGE_PERSON_GROUP_ID, person_id=woman.person_id, url=image, detection_model=FaceDetectionModel.DETECTION03, ) print(f"face {face.face_id} added to person {woman.person_id}") # Add to man person for image in man_images: # Check if the image is of sufficent quality for recognition. sufficient_quality = True detected_faces = face_client.detect_from_url( url=image, detection_model=FaceDetectionModel.DETECTION03, recognition_model=FaceRecognitionModel.RECOGNITION04, return_face_id=True, return_face_attributes=[FaceAttributeTypeRecognition04.QUALITY_FOR_RECOGNITION], ) for face in detected_faces: if face.face_attributes.quality_for_recognition != QualityForRecognition.HIGH: sufficient_quality = False break if not sufficient_quality: continue if len(detected_faces) != 1: continue face_admin_client.large_person_group.add_face_from_url( large_person_group_id=LARGE_PERSON_GROUP_ID, person_id=man.person_id, url=image, detection_model=FaceDetectionModel.DETECTION03, ) print(f"face {face.face_id} added to person {man.person_id}") # Add to child person for image in child_images: # Check if the image is of sufficent quality for recognition. sufficient_quality = True detected_faces = face_client.detect_from_url( url=image, detection_model=FaceDetectionModel.DETECTION03, recognition_model=FaceRecognitionModel.RECOGNITION04, return_face_id=True, return_face_attributes=[FaceAttributeTypeRecognition04.QUALITY_FOR_RECOGNITION], ) for face in detected_faces: if face.face_attributes.quality_for_recognition != QualityForRecognition.HIGH: sufficient_quality = False break if not sufficient_quality: continue if len(detected_faces) != 1: continue face_admin_client.large_person_group.add_face_from_url( large_person_group_id=LARGE_PERSON_GROUP_ID, person_id=child.person_id, url=image, detection_model=FaceDetectionModel.DETECTION03, ) print(f"face {face.face_id} added to person {child.person_id}") ''' Train LargePersonGroup ''' # Train the large person group and set the polling interval to 5s print(f"Train the person group {LARGE_PERSON_GROUP_ID}") poller = face_admin_client.large_person_group.begin_train( large_person_group_id=LARGE_PERSON_GROUP_ID, polling_interval=5, ) poller.wait() print(f"The person group {LARGE_PERSON_GROUP_ID} is trained successfully.") ''' Identify a face against a defined LargePersonGroup ''' # Group image for testing against test_image = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/identification1.jpg" print("Pausing for 60 seconds to avoid triggering rate limit on free account...") time.sleep(60) # Detect faces face_ids = [] # We use detection model 03 to get better performance, recognition model 04 to support quality for # recognition attribute. faces = face_client.detect_from_url( url=test_image, detection_model=FaceDetectionModel.DETECTION03, recognition_model=FaceRecognitionModel.RECOGNITION04, return_face_id=True, return_face_attributes=[FaceAttributeTypeRecognition04.QUALITY_FOR_RECOGNITION], ) for face in faces: # Only take the face if it is of sufficient quality. if face.face_attributes.quality_for_recognition != QualityForRecognition.LOW: face_ids.append(face.face_id) # Identify faces identify_results = face_client.identify_from_large_person_group( face_ids=face_ids, large_person_group_id=LARGE_PERSON_GROUP_ID, ) print("Identifying faces in image") for identify_result in identify_results: if identify_result.candidates: print(f"Person is identified for face ID {identify_result.face_id} in image, with a confidence of " f"{identify_result.candidates[0].confidence}.") # Get topmost confidence score # Verify faces verify_result = face_client.verify_from_large_person_group( face_id=identify_result.face_id, large_person_group_id=LARGE_PERSON_GROUP_ID, person_id=identify_result.candidates[0].person_id, ) print(f"verification result: {verify_result.is_identical}. confidence: {verify_result.confidence}") else: print(f"No person identified for face ID {identify_result.face_id} in image.") print() # Delete the large person group face_admin_client.large_person_group.delete(LARGE_PERSON_GROUP_ID) print(f"The person group {LARGE_PERSON_GROUP_ID} is deleted.") print() print("End of quickstart.")Exécutez votre application de reconnaissance faciale à partir du répertoire de l’application avec la commande
python.python quickstart-file.pyTip
L’API Visage s’exécute sur un ensemble de modèles prédéfinis qui sont statiques par nature (les performances du modèle ne se dégradent pas ou ne s’améliorent pas quand le service est exécuté). Les résultats générés par le modèle risquent de changer si Microsoft met à jour le back-end du modèle sans migrer vers une version entièrement nouvelle du modèle. Pour tirer parti d’une version plus récente d’un modèle, vous pouvez réentraîner votre PersonGroup, en spécifiant le modèle plus récent en tant que paramètre avec les mêmes images d’inscription.
Output
Person group: ad12b2db-d892-48ec-837a-0e7168c18224
face 335a2cb1-5211-4c29-9c45-776dd014b2af added to person 9ee65510-81a5-47e5-9e50-66727f719465
face df57eb50-4a13-4f93-b804-cd108327ad5a added to person 9ee65510-81a5-47e5-9e50-66727f719465
face d8b7b8b8-3ca6-4309-b76e-eeed84f7738a added to person 00651036-4236-4004-88b9-11466c251548
face dffbb141-f40b-4392-8785-b6c434fa534e added to person 00651036-4236-4004-88b9-11466c251548
face 9cdac36e-5455-447b-a68d-eb1f5e2ec27d added to person 23614724-b132-407a-aaa0-67003987ce93
face d8208412-92b7-4b8d-a2f8-3926c839c87e added to person 23614724-b132-407a-aaa0-67003987ce93
Train the person group ad12b2db-d892-48ec-837a-0e7168c18224
The person group ad12b2db-d892-48ec-837a-0e7168c18224 is trained successfully.
Pausing for 60 seconds to avoid triggering rate limit on free account...
Identifying faces in image
Person is identified for face ID bc52405a-5d83-4500-9218-557468ccdf99 in image, with a confidence of 0.96726.
verification result: True. confidence: 0.96726
Person is identified for face ID dfcc3fc8-6252-4f3a-8205-71466f39d1a7 in image, with a confidence of 0.96925.
verification result: True. confidence: 0.96925
No person identified for face ID 401c581b-a178-45ed-8205-7692f6eede88 in image.
Person is identified for face ID 8809d9c7-e362-4727-8c95-e1e44f5c2e8a in image, with a confidence of 0.92898.
verification result: True. confidence: 0.92898
The person group ad12b2db-d892-48ec-837a-0e7168c18224 is deleted.
End of quickstart.
Nettoyer les ressources
Si vous souhaitez nettoyer et supprimer un abonnement Foundry Tools, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées.
Étapes suivantes
Dans le cadre de ce guide de démarrage rapide, vous avez vu comment utiliser la bibliothèque de client Visage pour Python afin d’effectuer une identification de visages de base. Découvrez à présent les différents modèles de détection de visage, et la façon de spécifier le modèle adapté à votre cas d’usage.
- Qu’est ce que le service Visage ?
- Vous trouverez un exemple de code plus complet sur GitHub.
Commencez à utiliser la reconnaissance faciale avec la bibliothèque de client Visage pour Java. Suivez les étapes suivantes pour installer le package et essayer l’exemple de code pour les tâches de base. Le service Visage vous donne accès à des algorithmes avancés pour la détection et la reconnaissance des visages dans des images. Suivez les étapes ci-après pour installer le package et essayer l’exemple de code pour l’identification de visages de base à l’aide d’images à distance.
Documentation de référence | Code source de la bibliothèque | Package (Maven) | Exemples
Prerequisites
- Abonnement Azure - En créer un gratuitement
- La version actuelle du JDK (Java Development Kit)
- Apache Maven est installé. Sur Linux, installez à partir des référentiels de distribution si disponibles.
- Une fois que vous avez votre abonnement Azure, créez une ressource Visage 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 aurez besoin de la clé et du point de terminaison de la ressource que vous créez pour connecter votre application à l’API Visage.
- Vous pouvez utiliser le niveau tarifaire Gratuit (
F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.
Créer des variables d’environnement
Dans cet exemple, écrivez vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.
Accédez au portail Azure. Si la ressource que vous avez créée dans la section Prérequis a été déployée avec succès, sélectionnez Accéder à la ressource sous Étapes suivantes. Vous pouvez trouver votre clé et votre point de terminaison sous Gestion des ressources sur la page Clés et point de terminaison de la ressource Face. Votre clé de ressource n’est pas la même que votre ID d’abonnement Azure.
Pour définir la variable d’environnement de votre clé et de votre point de terminaison, ouvrez une fenêtre de console et suivez les instructions qui suivent pour votre système d’exploitation et votre environnement de développement.
- Pour définir la variable d’environnement
FACE_APIKEY, remplacez<your_key>par l’une des clés de votre ressource. - Pour définir la variable d’environnement
FACE_ENDPOINT, remplacez<your_endpoint>par le point de terminaison de votre ressource.
Important
Utilisez les clés API avec précaution. N’incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement. Si vous utilisez une clé API, stockez-la en lieu sûr dans Azure Key Vault. Pour plus d’informations sur l’utilisation sécurisée des clés API dans vos applications, consultez Clés API avec Azure Key Vault.
Pour découvrir plus d’informations sur la sécurité des services IA, consultez Authentifier les requêtes auprès d’Azure AI services.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Après avoir ajouté les variables d'environnement, il se peut que vous deviez redémarrer tous les programmes en cours d'exécution qui liront les variables d'environnement, y compris la fenêtre de console.
Identifier et vérifier les visages
Installer la bibliothèque de client
Ouvrez une fenêtre de console et créez un dossier pour votre application de démarrage rapide. Copiez le contenu suivant dans un nouveau fichier. Enregistrez le fichier sous
pom.xmldans le répertoire de votre projet :<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>my-application-name</artifactId> <version>1.0.0</version> <dependencies> <!-- https://mvnrepository.com/artifact/com.azure/azure-ai-vision-face --> <dependency> <groupId>com.azure</groupId> <artifactId>azure-ai-vision-face</artifactId> <version>1.0.0-beta.2</version> </dependency> </dependencies> </project>Installez le SDK et les dépendances en exécutant ce qui suit dans le répertoire du projet :
mvn clean dependency:copy-dependenciesCréer une application Java
Créez un fichier nommé
Quickstart.java, ouvrez-le dans un éditeur de texte et collez-le dans le code suivant :Note
Si vous n’avez pas reçu l’accès au service Face avec le formulaire d’entrée, certaines de ces fonctions ne fonctionneront pas.
import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.UUID; import com.azure.ai.vision.face.FaceClient; import com.azure.ai.vision.face.FaceClientBuilder; import com.azure.ai.vision.face.administration.FaceAdministrationClient; import com.azure.ai.vision.face.administration.FaceAdministrationClientBuilder; import com.azure.ai.vision.face.administration.LargePersonGroupClient; import com.azure.ai.vision.face.models.DetectOptions; import com.azure.ai.vision.face.models.FaceAttributeType; import com.azure.ai.vision.face.models.FaceDetectionModel; import com.azure.ai.vision.face.models.FaceDetectionResult; import com.azure.ai.vision.face.models.FaceIdentificationCandidate; import com.azure.ai.vision.face.models.FaceIdentificationResult; import com.azure.ai.vision.face.models.FaceRecognitionModel; import com.azure.ai.vision.face.models.FaceTrainingResult; import com.azure.ai.vision.face.models.FaceVerificationResult; import com.azure.ai.vision.face.models.QualityForRecognition; import com.azure.core.credential.KeyCredential; import com.azure.core.util.polling.SyncPoller; public class Quickstart { // LARGE_PERSON_GROUP_ID should be all lowercase and alphanumeric. For example, 'mygroupname' (dashes are OK). private static final String LARGE_PERSON_GROUP_ID = UUID.randomUUID().toString(); // URL path for the images. private static final String IMAGE_BASE_URL = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/"; // From your Face subscription in the Azure portal, get your subscription key and endpoint. private static final String SUBSCRIPTION_KEY = System.getenv("FACE_APIKEY"); private static final String ENDPOINT = System.getenv("FACE_ENDPOINT"); public static void main(String[] args) throws Exception { // Recognition model 4 was released in 2021 February. // It is recommended since its accuracy is improved // on faces wearing masks compared with model 3, // and its overall accuracy is improved compared // with models 1 and 2. FaceRecognitionModel RECOGNITION_MODEL4 = FaceRecognitionModel.RECOGNITION_04; // Authenticate. FaceClient client = authenticate(ENDPOINT, SUBSCRIPTION_KEY); // Identify - recognize a face(s) in a large person group (a large person group is created in this example). identifyInLargePersonGroup(client, IMAGE_BASE_URL, RECOGNITION_MODEL4); System.out.println("End of quickstart."); } /* * AUTHENTICATE * Uses subscription key and region to create a client. */ public static FaceClient authenticate(String endpoint, String key) { return new FaceClientBuilder().endpoint(endpoint).credential(new KeyCredential(key)).buildClient(); } // Detect faces from image url for recognition purposes. This is a helper method for other functions in this quickstart. // Parameter `returnFaceId` of `DetectOptions` must be set to `true` (by default) for recognition purposes. // Parameter `returnFaceAttributes` is set to include the QualityForRecognition attribute. // Recognition model must be set to recognition_03 or recognition_04 as a result. // Result faces with insufficient quality for recognition are filtered out. // The field `faceId` in returned `DetectedFace`s will be used in Verify and Identify. // It will expire 24 hours after the detection call. private static List<FaceDetectionResult> detectFaceRecognize(FaceClient faceClient, String url, FaceRecognitionModel recognitionModel) { // Detect faces from image URL. DetectOptions options = new DetectOptions(FaceDetectionModel.DETECTION_03, recognitionModel, true).setReturnFaceAttributes(Arrays.asList(FaceAttributeType.QUALITY_FOR_RECOGNITION)); List<FaceDetectionResult> detectedFaces = faceClient.detect(url, options); List<FaceDetectionResult> sufficientQualityFaces = detectedFaces.stream().filter(f -> f.getFaceAttributes().getQualityForRecognition() != QualityForRecognition.LOW).collect(Collectors.toList()); System.out.println(detectedFaces.size() + " face(s) with " + sufficientQualityFaces.size() + " having sufficient quality for recognition."); return sufficientQualityFaces; } /* * IDENTIFY FACES * To identify faces, you need to create and define a large person group. * The Identify operation takes one or several face IDs from DetectedFace or PersistedFace and a LargePersonGroup and returns * a list of Person objects that each face might belong to. Returned Person objects are wrapped as Candidate objects, * which have a prediction confidence value. */ public static void identifyInLargePersonGroup(FaceClient client, String url, FaceRecognitionModel recognitionModel) throws Exception { System.out.println("========IDENTIFY FACES========"); System.out.println(); // Create a dictionary for all your images, grouping similar ones under the same key. Map<String, String[]> personDictionary = new LinkedHashMap<String, String[]>(); personDictionary.put("Family1-Dad", new String[]{"Family1-Dad1.jpg", "Family1-Dad2.jpg"}); personDictionary.put("Family1-Mom", new String[]{"Family1-Mom1.jpg", "Family1-Mom2.jpg"}); personDictionary.put("Family1-Son", new String[]{"Family1-Son1.jpg", "Family1-Son2.jpg"}); // A group photo that includes some of the persons you seek to identify from your dictionary. String sourceImageFileName = "identification1.jpg"; // Create a large person group. System.out.println("Create a person group (" + LARGE_PERSON_GROUP_ID + ")."); FaceAdministrationClient faceAdministrationClient = new FaceAdministrationClientBuilder().endpoint(ENDPOINT).credential(new KeyCredential(SUBSCRIPTION_KEY)).buildClient(); LargePersonGroupClient largePersonGroupClient = faceAdministrationClient.getLargePersonGroupClient(LARGE_PERSON_GROUP_ID); largePersonGroupClient.create(LARGE_PERSON_GROUP_ID, null, recognitionModel); // The similar faces will be grouped into a single large person group person. for (String groupedFace : personDictionary.keySet()) { // Limit TPS Thread.sleep(250); String personId = largePersonGroupClient.createPerson(groupedFace).getPersonId(); System.out.println("Create a person group person '" + groupedFace + "'."); // Add face to the large person group person. for (String similarImage : personDictionary.get(groupedFace)) { System.out.println("Check whether image is of sufficient quality for recognition"); DetectOptions options = new DetectOptions(FaceDetectionModel.DETECTION_03, recognitionModel, false).setReturnFaceAttributes(Arrays.asList(FaceAttributeType.QUALITY_FOR_RECOGNITION)); List<FaceDetectionResult> facesInImage = client.detect(url + similarImage, options); if (facesInImage.stream().anyMatch(f -> f.getFaceAttributes().getQualityForRecognition() != QualityForRecognition.HIGH)) { continue; } if (facesInImage.size() != 1) { continue; } // add face to the large person group System.out.println("Add face to the person group person(" + groupedFace + ") from image `" + similarImage + "`"); largePersonGroupClient.addFace(personId, url + similarImage, null, FaceDetectionModel.DETECTION_03, null); } } // Start to train the large person group. System.out.println(); System.out.println("Train person group " + LARGE_PERSON_GROUP_ID + "."); SyncPoller<FaceTrainingResult, Void> poller = largePersonGroupClient.beginTrain(); // Wait until the training is completed. poller.waitForCompletion(); System.out.println("Training status: succeeded."); System.out.println(); System.out.println("Pausing for 60 seconds to avoid triggering rate limit on free account..."); Thread.sleep(60000); // Detect faces from source image url. List<FaceDetectionResult> detectedFaces = detectFaceRecognize(client, url + sourceImageFileName, recognitionModel); // Add detected faceId to sourceFaceIds. List<String> sourceFaceIds = detectedFaces.stream().map(FaceDetectionResult::getFaceId).collect(Collectors.toList()); // Identify the faces in a large person group. List<FaceIdentificationResult> identifyResults = client.identifyFromLargePersonGroup(sourceFaceIds, LARGE_PERSON_GROUP_ID); for (FaceIdentificationResult identifyResult : identifyResults) { if (identifyResult.getCandidates().isEmpty()) { System.out.println("No person is identified for the face in: " + sourceImageFileName + " - " + identifyResult.getFaceId() + "."); continue; } FaceIdentificationCandidate candidate = identifyResult.getCandidates().stream().findFirst().orElseThrow(); String personName = largePersonGroupClient.getPerson(candidate.getPersonId()).getName(); System.out.println("Person '" + personName + "' is identified for the face in: " + sourceImageFileName + " - " + identifyResult.getFaceId() + ", confidence: " + candidate.getConfidence() + "."); FaceVerificationResult verifyResult = client.verifyFromLargePersonGroup(identifyResult.getFaceId(), LARGE_PERSON_GROUP_ID, candidate.getPersonId()); System.out.println("Verification result: is a match? " + verifyResult.isIdentical() + ". confidence: " + verifyResult.getConfidence()); } System.out.println(); // Delete large person group. System.out.println("========DELETE PERSON GROUP========"); System.out.println(); largePersonGroupClient.delete(); System.out.println("Deleted the person group " + LARGE_PERSON_GROUP_ID + "."); System.out.println(); } }Exécutez votre application de reconnaissance faciale à partir du répertoire de l’application avec les commandes
javacetjava.
Output
========IDENTIFY FACES========
Create a person group (3761e61a-16b2-4503-ad29-ed34c58ba676).
Create a person group person 'Family1-Dad'.
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Dad) from image `Family1-Dad1.jpg`
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Dad) from image `Family1-Dad2.jpg`
Create a person group person 'Family1-Mom'.
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Mom) from image `Family1-Mom1.jpg`
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Mom) from image `Family1-Mom2.jpg`
Create a person group person 'Family1-Son'.
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Son) from image `Family1-Son1.jpg`
Check whether image is of sufficient quality for recognition
Add face to the person group person(Family1-Son) from image `Family1-Son2.jpg`
Train person group 3761e61a-16b2-4503-ad29-ed34c58ba676.
Training status: succeeded.
Pausing for 60 seconds to avoid triggering rate limit on free account...
4 face(s) with 4 having sufficient quality for recognition.
Person 'Family1-Dad' is identified for the face in: identification1.jpg - d7995b34-1b72-47fe-82b6-e9877ed2578d, confidence: 0.96807.
Verification result: is a match? true. confidence: 0.96807
Person 'Family1-Mom' is identified for the face in: identification1.jpg - 844da0ed-4890-4bbf-a531-e638797f96fc, confidence: 0.96902.
Verification result: is a match? true. confidence: 0.96902
No person is identified for the face in: identification1.jpg - c543159a-57f3-4872-83ce-2d4a733d71c9.
Person 'Family1-Son' is identified for the face in: identification1.jpg - 414fac6c-7381-4dba-9c8b-fd26d52e879b, confidence: 0.9281.
Verification result: is a match? true. confidence: 0.9281
========DELETE PERSON GROUP========
Deleted the person group 3761e61a-16b2-4503-ad29-ed34c58ba676.
End of quickstart.
Nettoyer les ressources
Si vous souhaitez nettoyer et supprimer un abonnement Foundry Tools, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées.
Étapes suivantes
Dans ce démarrage rapide, vous avez vu comment utiliser la bibliothèque de client Visage pour Java afin d’effectuer une identification de visages de base. Découvrez à présent les différents modèles de détection de visage, et la façon de spécifier le modèle adapté à votre cas d’usage.
- Qu’est ce que le service Visage ?
- Vous trouverez un exemple de code plus complet sur GitHub.
Commencez à utiliser la reconnaissance faciale avec la bibliothèque de client Visage pour JavaScript. Le service Visage vous donne accès à des algorithmes avancés pour la détection et la reconnaissance des visages dans des images. Suivez les étapes ci-après pour installer le package et essayer l’exemple de code pour l’identification de visages de base à l’aide d’images à distance.
Documentation de référence | Code source de la bibliothèque | Package (npm) | Exemples
Prerequisites
- Abonnement Azure : créez-en un gratuitement.
- La dernière version de Node.js
- Une fois que vous avez votre abonnement Azure, créez une ressource Face. Vous pouvez utiliser le niveau de tarification gratuit (
F0) pour essayer le service et effectuer une mise à niveau ultérieure vers un niveau payant pour la production.
Créer des variables d’environnement
Dans cet exemple, écrivez vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.
Accédez au portail Azure. Si la ressource que vous avez créée dans la section Prérequis a été déployée avec succès, sélectionnez Accéder à la ressource sous Étapes suivantes. Vous pouvez trouver votre clé et votre point de terminaison sous Gestion des ressources sur la page Clés et point de terminaison de la ressource Face. Votre clé de ressource n’est pas la même que votre ID d’abonnement Azure.
Pour définir la variable d’environnement de votre clé et de votre point de terminaison, ouvrez une fenêtre de console et suivez les instructions qui suivent pour votre système d’exploitation et votre environnement de développement.
- Pour définir la variable d’environnement
FACE_APIKEY, remplacez<your_key>par l’une des clés de votre ressource. - Pour définir la variable d’environnement
FACE_ENDPOINT, remplacez<your_endpoint>par le point de terminaison de votre ressource.
Important
Utilisez les clés API avec précaution. N’incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement. Si vous utilisez une clé API, stockez-la en lieu sûr dans Azure Key Vault. Pour plus d’informations sur l’utilisation sécurisée des clés API dans vos applications, consultez Clés API avec Azure Key Vault.
Pour découvrir plus d’informations sur la sécurité des services IA, consultez Authentifier les requêtes auprès d’Azure AI services.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Après avoir ajouté les variables d'environnement, il se peut que vous deviez redémarrer tous les programmes en cours d'exécution qui liront les variables d'environnement, y compris la fenêtre de console.
Identifier et vérifier les visages
Création d’une application Node.js
Dans une fenêtre de console (telle que cmd, PowerShell ou Bash), créez un répertoire pour votre application et accédez-y.
mkdir myapp && cd myappExécutez la commande
npm initpour créer une application de nœud avec un fichierpackage.json.npm initInstallez les packages npm
@azure-rest/ai-vision-face:npm install @azure-rest/ai-vision-faceLe fichier
package.jsonde votre application est mis à jour avec les dépendances.Créez un fichier nommé
index.js, ouvrez-le dans un éditeur de texte, collez le code suivant et enregistrez-le dans le dossier contenant l'application.Note
Si vous n’avez pas reçu l’accès au service Face avec le formulaire d’entrée, certaines de ces fonctions ne fonctionneront pas.
const { randomUUID } = require("crypto"); const { AzureKeyCredential } = require("@azure/core-auth"); const createFaceClient = require("@azure-rest/ai-vision-face").default, { getLongRunningPoller } = require("@azure-rest/ai-vision-face"); const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); const main = async () => { const endpoint = process.env["FACE_ENDPOINT"] ?? "<endpoint>"; const apikey = process.env["FACE_APIKEY"] ?? "<apikey>"; const credential = new AzureKeyCredential(apikey); const client = createFaceClient(endpoint, credential); const imageBaseUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/"; const largePersonGroupId = randomUUID(); console.log("========IDENTIFY FACES========"); console.log(); // Create a dictionary for all your images, grouping similar ones under the same key. const personDictionary = { "Family1-Dad": ["Family1-Dad1.jpg", "Family1-Dad2.jpg"], "Family1-Mom": ["Family1-Mom1.jpg", "Family1-Mom2.jpg"], "Family1-Son": ["Family1-Son1.jpg", "Family1-Son2.jpg"], }; // A group photo that includes some of the persons you seek to identify from your dictionary. const sourceImageFileName = "identification1.jpg"; // Create a large person group. console.log(`Creating a person group with ID: ${largePersonGroupId}`); await client.path("/largepersongroups/{largePersonGroupId}", largePersonGroupId).put({ body: { name: largePersonGroupId, recognitionModel: "recognition_04", }, }); // The similar faces will be grouped into a single large person group person. console.log("Adding faces to person group..."); await Promise.all( Object.keys(personDictionary).map(async (name) => { console.log(`Create a persongroup person: ${name}`); const createLargePersonGroupPersonResponse = await client .path("/largepersongroups/{largePersonGroupId}/persons", largePersonGroupId) .post({ body: { name }, }); const { personId } = createLargePersonGroupPersonResponse.body; await Promise.all( personDictionary[name].map(async (similarImage) => { // Check if the image is of sufficent quality for recognition. const detectResponse = await client.path("/detect").post({ contentType: "application/json", queryParameters: { detectionModel: "detection_03", recognitionModel: "recognition_04", returnFaceId: false, returnFaceAttributes: ["qualityForRecognition"], }, body: { url: `${imageBaseUrl}${similarImage}` }, }); const sufficientQuality = detectResponse.body.every( (face) => face.faceAttributes?.qualityForRecognition === "high", ); if (!sufficientQuality) { return; } if (detectResponse.body.length != 1) { return; } // Quality is sufficent, add to group. console.log( `Add face to the person group person: (${name}) from image: (${similarImage})`, ); await client .path( "/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces", largePersonGroupId, personId, ) .post({ queryParameters: { detectionModel: "detection_03" }, body: { url: `${imageBaseUrl}${similarImage}` }, }); }), ); }), ); console.log("Done adding faces to person group."); // Start to train the large person group. console.log(); console.log(`Training person group: ${largePersonGroupId}`); const trainResponse = await client .path("/largepersongroups/{largePersonGroupId}/train", largePersonGroupId) .post(); const poller = await getLongRunningPoller(client, trainResponse); await poller.pollUntilDone(); console.log(`Training status: ${poller.getOperationState().status}`); if (poller.getOperationState().status !== "succeeded") { return; } console.log("Pausing for 60 seconds to avoid triggering rate limit on free account..."); await sleep(60000); // Detect faces from source image url and only take those with sufficient quality for recognition. const detectResponse = await client.path("/detect").post({ contentType: "application/json", queryParameters: { detectionModel: "detection_03", recognitionModel: "recognition_04", returnFaceId: true, returnFaceAttributes: ["qualityForRecognition"], }, body: { url: `${imageBaseUrl}${sourceImageFileName}` }, }); const faceIds = detectResponse.body.filter((face) => face.faceAttributes?.qualityForRecognition !== "low").map((face) => face.faceId); // Identify the faces in a large person group. const identifyResponse = await client.path("/identify").post({ body: { faceIds, largePersonGroupId: largePersonGroupId }, }); await Promise.all( identifyResponse.body.map(async (result) => { try { const getLargePersonGroupPersonResponse = await client .path( "/largepersongroups/{largePersonGroupId}/persons/{personId}", largePersonGroupId, result.candidates[0].personId, ) .get(); const person = getLargePersonGroupPersonResponse.body; console.log( `Person: ${person.name} is identified for face in: ${sourceImageFileName} with ID: ${result.faceId}. Confidence: ${result.candidates[0].confidence}`, ); // Verification: const verifyResponse = await client.path("/verify").post({ body: { faceId: result.faceId, largePersonGroupId: largePersonGroupId, personId: person.personId, }, }); console.log( `Verification result between face ${result.faceId} and person ${person.personId}: ${verifyResponse.body.isIdentical} with confidence: ${verifyResponse.body.confidence}`, ); } catch (error) { console.log(`No persons identified for face with ID ${result.faceId}`); } }), ); console.log(); // Delete large person group. console.log(`Deleting person group: ${largePersonGroupId}`); await client.path("/largepersongroups/{largePersonGroupId}", largePersonGroupId).delete(); console.log(); console.log("Done."); }; main().catch(console.error);Exécutez l’application avec la commande
nodede votre fichier de démarrage rapide.node index.js
Output
========IDENTIFY FACES========
Creating a person group with ID: a230ac8b-09b2-4fa0-ae04-d76356d88d9f
Adding faces to person group...
Create a persongroup person: Family1-Dad
Create a persongroup person: Family1-Mom
Create a persongroup person: Family1-Son
Add face to the person group person: (Family1-Dad) from image: (Family1-Dad1.jpg)
Add face to the person group person: (Family1-Mom) from image: (Family1-Mom1.jpg)
Add face to the person group person: (Family1-Son) from image: (Family1-Son1.jpg)
Add face to the person group person: (Family1-Dad) from image: (Family1-Dad2.jpg)
Add face to the person group person: (Family1-Mom) from image: (Family1-Mom2.jpg)
Add face to the person group person: (Family1-Son) from image: (Family1-Son2.jpg)
Done adding faces to person group.
Training person group: a230ac8b-09b2-4fa0-ae04-d76356d88d9f
Training status: succeeded
Pausing for 60 seconds to avoid triggering rate limit on free account...
No persons identified for face with ID 56380623-8bf0-414a-b9d9-c2373386b7be
Person: Family1-Dad is identified for face in: identification1.jpg with ID: c45052eb-a910-4fd3-b1c3-f91ccccc316a. Confidence: 0.96807
Person: Family1-Son is identified for face in: identification1.jpg with ID: 8dce9b50-513f-4fe2-9e19-352acfd622b3. Confidence: 0.9281
Person: Family1-Mom is identified for face in: identification1.jpg with ID: 75868da3-66f6-4b5f-a172-0b619f4d74c1. Confidence: 0.96902
Verification result between face c45052eb-a910-4fd3-b1c3-f91ccccc316a and person 35a58d14-fd58-4146-9669-82ed664da357: true with confidence: 0.96807
Verification result between face 8dce9b50-513f-4fe2-9e19-352acfd622b3 and person 2d4d196c-5349-431c-bf0c-f1d7aaa180ba: true with confidence: 0.9281
Verification result between face 75868da3-66f6-4b5f-a172-0b619f4d74c1 and person 35d5de9e-5f92-4552-8907-0d0aac889c3e: true with confidence: 0.96902
Deleting person group: a230ac8b-09b2-4fa0-ae04-d76356d88d9f
Done.
Nettoyer les ressources
Si vous souhaitez nettoyer et supprimer un abonnement Foundry Tools, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées.
Étapes suivantes
Dans le cadre de ce guide de démarrage rapide, vous avez vu comment utiliser la bibliothèque de client Visage pour JavaScript afin d’effectuer une identification de visages de base. Découvrez à présent les différents modèles de détection de visage, et la façon de spécifier le modèle adapté à votre cas d’usage.
- Qu’est ce que le service Visage ?
- Vous trouverez un exemple de code plus complet sur GitHub.
Prise en main de la reconnaissance faciale à l’aide de la bibliothèque cliente Visage pour TypeScript. Suivez les étapes suivantes pour installer le package et essayer l’exemple de code pour les tâches de base. Le service Visage vous donne accès à des algorithmes avancés pour la détection et la reconnaissance des visages dans des images. Suivez les étapes ci-après pour installer le package et essayer l’exemple de code pour l’identification de visages de base à l’aide d’images à distance.
Documentation de référence | Code source de la bibliothèque | Package (npm) | Exemples
Prerequisites
- Abonnement Azure - En créer un gratuitement
- Node.js LTS
- TypeScript
- Visual Studio Code
- Une fois que vous avez votre abonnement Azure, créez une ressource Visage 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 aurez besoin de la clé et du point de terminaison de la ressource que vous créez pour connecter votre application à l’API Visage.
- Vous pouvez utiliser le niveau tarifaire Gratuit (
F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.
Configurer l’environnement de développement local
Créez un répertoire pour votre projet et accédez-y :
mkdir face-identification cd face-identification code .Créez un package pour les modules ESM dans votre répertoire de projet :
npm init -y npm pkg set type=moduleInstallez les packages nécessaires :
npm install @azure-rest/ai-vision-faceInstallez les dépendances de développement :
npm install typescript @types/node --save-devCréez un
tsconfig.jsonfichier dans le répertoire de votre projet :{ "compilerOptions": { "target": "es2022", "module": "esnext", "moduleResolution": "bundler", "rootDir": "./src", "outDir": "./dist/", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, "declaration": true, "sourceMap": true, "resolveJsonModule": true, "moduleDetection": "force", "allowSyntheticDefaultImports": true, "verbatimModuleSyntax": false }, "include": [ "src/**/*.ts" ], "exclude": [ "node_modules/**/*", "**/*.spec.ts" ] }Mettez à jour
package.jsonpour inclure un script pour générer des fichiers TypeScript :"scripts": { "build": "tsc", "start": "node dist/index.js" }Créez un dossier et ajoutez des
resourcesexemples d’images à celui-ci.Créez un
srcrépertoire pour votre code TypeScript.
Dans cet exemple, écrivez vos informations d’identification dans des variables d’environnement sur l’ordinateur local exécutant l’application.
Accédez au portail Azure. Si la ressource que vous avez créée dans la section Prérequis a été déployée avec succès, sélectionnez Accéder à la ressource sous Étapes suivantes. Vous pouvez trouver votre clé et votre point de terminaison sous Gestion des ressources sur la page Clés et point de terminaison de la ressource Face. Votre clé de ressource n’est pas la même que votre ID d’abonnement Azure.
Pour définir la variable d’environnement de votre clé et de votre point de terminaison, ouvrez une fenêtre de console et suivez les instructions qui suivent pour votre système d’exploitation et votre environnement de développement.
- Pour définir la variable d’environnement
FACE_APIKEY, remplacez<your_key>par l’une des clés de votre ressource. - Pour définir la variable d’environnement
FACE_ENDPOINT, remplacez<your_endpoint>par le point de terminaison de votre ressource.
Important
Utilisez les clés API avec précaution. N’incluez pas la clé API directement dans votre code et ne la diffusez jamais publiquement. Si vous utilisez une clé API, stockez-la en lieu sûr dans Azure Key Vault. Pour plus d’informations sur l’utilisation sécurisée des clés API dans vos applications, consultez Clés API avec Azure Key Vault.
Pour découvrir plus d’informations sur la sécurité des services IA, consultez Authentifier les requêtes auprès d’Azure AI services.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Après avoir ajouté les variables d'environnement, il se peut que vous deviez redémarrer tous les programmes en cours d'exécution qui liront les variables d'environnement, y compris la fenêtre de console.
Identifier et vérifier les visages
Créez un fichier dans votre src répertoire, index.tspuis collez-le dans le code suivant. Remplacez les chemins d'accès des images et les noms de groupes/personnes en fonction des besoins.
Note
Si vous n’avez pas reçu l’accès au service Face avec le formulaire d’entrée, certaines de ces fonctions ne fonctionneront pas.
import { randomUUID } from "crypto";
import { AzureKeyCredential } from "@azure/core-auth";
import createFaceClient, {
getLongRunningPoller,
isUnexpected,
} from "@azure-rest/ai-vision-face";
import "dotenv/config";
/**
* This sample demonstrates how to identify and verify faces using Azure Face API.
*
* @summary Face identification and verification.
*/
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
const main = async () => {
const endpoint = process.env["FACE_ENDPOINT"] ?? "<endpoint>";
const apikey = process.env["FACE_APIKEY"] ?? "<apikey>";
const credential = new AzureKeyCredential(apikey);
const client = createFaceClient(endpoint, credential);
const imageBaseUrl =
"https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/";
const largePersonGroupId = randomUUID();
console.log("========IDENTIFY FACES========\n");
// Create a dictionary for all your images, grouping similar ones under the same key.
const personDictionary: Record<string, string[]> = {
"Family1-Dad": ["Family1-Dad1.jpg", "Family1-Dad2.jpg"],
"Family1-Mom": ["Family1-Mom1.jpg", "Family1-Mom2.jpg"],
"Family1-Son": ["Family1-Son1.jpg", "Family1-Son2.jpg"],
};
// A group photo that includes some of the persons you seek to identify from your dictionary.
const sourceImageFileName = "identification1.jpg";
// Create a large person group.
console.log(`Creating a person group with ID: ${largePersonGroupId}`);
const createGroupResponse = await client
.path("/largepersongroups/{largePersonGroupId}", largePersonGroupId)
.put({
body: {
name: largePersonGroupId,
recognitionModel: "recognition_04",
},
});
if (isUnexpected(createGroupResponse)) {
throw new Error(createGroupResponse.body.error.message);
}
// Add faces to person group.
console.log("Adding faces to person group...");
await Promise.all(
Object.keys(personDictionary).map(async (name) => {
console.log(`Create a persongroup person: ${name}`);
const createPersonResponse = await client
.path("/largepersongroups/{largePersonGroupId}/persons", largePersonGroupId)
.post({
body: { name },
});
if (isUnexpected(createPersonResponse)) {
throw new Error(createPersonResponse.body.error.message);
}
const { personId } = createPersonResponse.body;
await Promise.all(
personDictionary[name].map(async (similarImage) => {
// Check if the image is of sufficient quality for recognition.
const detectResponse = await client.path("/detect").post({
contentType: "application/json",
queryParameters: {
detectionModel: "detection_03",
recognitionModel: "recognition_04",
returnFaceId: false,
returnFaceAttributes: ["qualityForRecognition"],
},
body: { url: `${imageBaseUrl}${similarImage}` },
});
if (isUnexpected(detectResponse)) {
throw new Error(detectResponse.body.error.message);
}
const sufficientQuality = detectResponse.body.every(
(face: any) => face.faceAttributes?.qualityForRecognition === "high"
);
if (!sufficientQuality || detectResponse.body.length !== 1) {
return;
}
// Quality is sufficient, add to group.
console.log(
`Add face to the person group person: (${name}) from image: (${similarImage})`
);
const addFaceResponse = await client
.path(
"/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces",
largePersonGroupId,
personId
)
.post({
queryParameters: { detectionModel: "detection_03" },
body: { url: `${imageBaseUrl}${similarImage}` },
});
if (isUnexpected(addFaceResponse)) {
throw new Error(addFaceResponse.body.error.message);
}
})
);
})
);
console.log("Done adding faces to person group.");
// Train the large person group.
console.log(`\nTraining person group: ${largePersonGroupId}`);
const trainResponse = await client
.path("/largepersongroups/{largePersonGroupId}/train", largePersonGroupId)
.post();
if (isUnexpected(trainResponse)) {
throw new Error(trainResponse.body.error.message);
}
const poller = await getLongRunningPoller(client, trainResponse);
await poller.pollUntilDone();
console.log(`Training status: ${poller.getOperationState().status}`);
if (poller.getOperationState().status !== "succeeded") {
return;
}
console.log("Pausing for 60 seconds to avoid triggering rate limit on free account...");
await sleep(60000);
// Detect faces from source image url and only take those with sufficient quality for recognition.
const detectSourceResponse = await client.path("/detect").post({
contentType: "application/json",
queryParameters: {
detectionModel: "detection_03",
recognitionModel: "recognition_04",
returnFaceId: true,
returnFaceAttributes: ["qualityForRecognition"],
},
body: { url: `${imageBaseUrl}${sourceImageFileName}` },
});
if (isUnexpected(detectSourceResponse)) {
throw new Error(detectSourceResponse.body.error.message);
}
const faceIds = detectSourceResponse.body
.filter((face: any) => face.faceAttributes?.qualityForRecognition !== "low")
.map((face: any) => face.faceId);
// Identify the faces in a large person group.
const identifyResponse = await client.path("/identify").post({
body: { faceIds, largePersonGroupId },
});
if (isUnexpected(identifyResponse)) {
throw new Error(identifyResponse.body.error.message);
}
await Promise.all(
identifyResponse.body.map(async (result: any) => {
try {
const candidate = result.candidates[0];
if (!candidate) {
console.log(`No persons identified for face with ID ${result.faceId}`);
return;
}
const getPersonResponse = await client
.path(
"/largepersongroups/{largePersonGroupId}/persons/{personId}",
largePersonGroupId,
candidate.personId
)
.get();
if (isUnexpected(getPersonResponse)) {
throw new Error(getPersonResponse.body.error.message);
}
const person = getPersonResponse.body;
console.log(
`Person: ${person.name} is identified for face in: ${sourceImageFileName} with ID: ${result.faceId}. Confidence: ${candidate.confidence}`
);
// Verification:
const verifyResponse = await client.path("/verify").post({
body: {
faceId: result.faceId,
largePersonGroupId,
personId: person.personId,
},
});
if (isUnexpected(verifyResponse)) {
throw new Error(verifyResponse.body.error.message);
}
console.log(
`Verification result between face ${result.faceId} and person ${person.personId}: ${verifyResponse.body.isIdentical} with confidence: ${verifyResponse.body.confidence}`
);
} catch (error: any) {
console.log(
`No persons identified for face with ID ${result.faceId}: ${error.message}`
);
}
})
);
console.log();
// Delete large person group.
console.log(`Deleting person group: ${largePersonGroupId}`);
const deleteResponse = await client
.path("/largepersongroups/{largePersonGroupId}", largePersonGroupId)
.delete();
if (isUnexpected(deleteResponse)) {
throw new Error(deleteResponse.body.error.message);
}
console.log();
console.log("Done.");
};
main().catch(console.error);
Création et exécution de l’exemple
Compilez le code TypeScript :
npm run buildExécutez le code JavaScript compilé :
npm run start
Output
========IDENTIFY FACES========
Creating a person group with ID: a230ac8b-09b2-4fa0-ae04-d76356d88d9f
Adding faces to person group...
Create a persongroup person: Family1-Dad
Create a persongroup person: Family1-Mom
Create a persongroup person: Family1-Son
Add face to the person group person: (Family1-Dad) from image: (Family1-Dad1.jpg)
Add face to the person group person: (Family1-Mom) from image: (Family1-Mom1.jpg)
Add face to the person group person: (Family1-Son) from image: (Family1-Son1.jpg)
Add face to the person group person: (Family1-Dad) from image: (Family1-Dad2.jpg)
Add face to the person group person: (Family1-Mom) from image: (Family1-Mom2.jpg)
Add face to the person group person: (Family1-Son) from image: (Family1-Son2.jpg)
Done adding faces to person group.
Training person group: a230ac8b-09b2-4fa0-ae04-d76356d88d9f
Training status: succeeded
Pausing for 60 seconds to avoid triggering rate limit on free account...
No persons identified for face with ID 56380623-8bf0-414a-b9d9-c2373386b7be
Person: Family1-Dad is identified for face in: identification1.jpg with ID: c45052eb-a910-4fd3-b1c3-f91ccccc316a. Confidence: 0.96807
Person: Family1-Son is identified for face in: identification1.jpg with ID: 8dce9b50-513f-4fe2-9e19-352acfd622b3. Confidence: 0.9281
Person: Family1-Mom is identified for face in: identification1.jpg with ID: 75868da3-66f6-4b5f-a172-0b619f4d74c1. Confidence: 0.96902
Verification result between face c45052eb-a910-4fd3-b1c3-f91ccccc316a and person 35a58d14-fd58-4146-9669-82ed664da357: true with confidence: 0.96807
Verification result between face 8dce9b50-513f-4fe2-9e19-352acfd622b3 and person 2d4d196c-5349-431c-bf0c-f1d7aaa180ba: true with confidence: 0.9281
Verification result between face 75868da3-66f6-4b5f-a172-0b619f4d74c1 and person 35d5de9e-5f92-4552-8907-0d0aac889c3e: true with confidence: 0.96902
Deleting person group: a230ac8b-09b2-4fa0-ae04-d76356d88d9f
Done.
Nettoyer les ressources
Si vous souhaitez nettoyer et supprimer un abonnement Foundry Tools, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées.
Étapes suivantes
Dans ce guide de démarrage rapide, vous avez appris à utiliser la bibliothèque cliente Visage pour TypeScript afin d’effectuer l’identification de base des visages. Découvrez à présent les différents modèles de détection de visage, et la façon de spécifier le modèle adapté à votre cas d’usage.
Commencez à utiliser la reconnaissance faciale avec l’API REST Visage. Le service Visage vous donne accès à des algorithmes avancés pour la détection et la reconnaissance des visages dans des images.
Note
Ce guide de démarrage rapide utilise des commandes cURL pour appeler l’API REST. Vous pouvez également appeler l’API REST à l’aide d’un langage de programmation. Les scénarios complexes comme l’identification des visages sont plus faciles à implémenter à l’aide d’un kit de développement logiciel (SDK) de langage. Consultez les exemples GitHub pour obtenir des exemples en C#, Python, Java, JavaScript et Go.
Prerequisites
- Abonnement Azure - En créer un gratuitement
- Une fois que vous avez votre abonnement Azure, créez une ressource Visage 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 aurez besoin de la clé et du point de terminaison de la ressource que vous créez pour connecter votre application à l’API Visage. Vous collerez votre clé et votre point de terminaison dans le code ci-dessous plus loin dans le guide de démarrage rapide.
- Vous pouvez utiliser le niveau tarifaire Gratuit (
F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.
- PowerShell version 6.0+ ou une application en ligne de commande similaire.
- cURL installé.
Identifier et vérifier les visages
Note
Si vous n’avez pas reçu l’accès au service Face avec le formulaire d’entrée, certaines de ces fonctions ne fonctionneront pas.
Tout d’abord, appelez l’API Détecter sur le visage source. C’est le visage que nous allons essayer d’identifier à partir du plus grand groupe. Copiez la commande suivante dans un éditeur de texte, insérez votre propre clé avec votre point de terminaison, puis copiez-la dans une fenêtre shell et exécutez-la.
curl.exe -v -X POST "https://{resource endpoint}/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=false&recognitionModel=recognition_04&returnRecognitionModel=false&detectionModel=detection_03&faceIdTimeToLive=86400" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {subscription key}" --data-ascii "{""url"":""https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/identification1.jpg""}"Enregistrez la chaîne d’ID de visage retournée dans un emplacement temporaire. Vous l’utiliserez à nouveau à la fin.
Ensuite, vous devez créer un LargePersonGroup et lui donner un ID arbitraire qui correspond au modèle
^[a-z0-9-_]+$regex. Cet objet stocke les données de visage agrégées de plusieurs personnes. Exécutez la commande suivante, en insérant votre propre clé. Si vous le souhaitez, modifiez le nom et les métadonnées du groupe dans le corps de la requête.curl.exe -v -X PUT "https://{resource endpoint}/face/v1.0/largepersongroups/{largePersonGroupId}" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {subscription key}" --data-ascii "{ ""name"": ""large-person-group-name"", ""userData"": ""User-provided data attached to the large person group."", ""recognitionModel"": ""recognition_04"" }"Enregistrez l’ID spécifié du groupe créé dans un emplacement temporaire.
Ensuite, vous allez créer des objets Person qui appartiennent au groupe. Exécutez la commande suivante, en insérant votre propre clé et l’ID de LargePersonGroup à l’étape précédente. Cette commande crée une personne nommée « Family1-Dad ».
curl.exe -v -X POST "https://{resource endpoint}/face/v1.0/largepersongroups/{largePersonGroupId}/persons" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {subscription key}" --data-ascii "{ ""name"": ""Family1-Dad"", ""userData"": ""User-provided data attached to the person."" }"Après avoir exécuté cette commande, réexécutez-la avec différentes données d’entrée pour créer d’autres objets Person : « Family1-Mom », « Family1-Son », « Family1-Daughter », « Family2-Lady » et « Family2-Man ».
Enregistrez les ID de chaque personne créée ; il est important de suivre quelle nom de personne correspond à quel ID.
Ensuite, vous devez détecter de nouveaux visages et les associer aux objets Person qui existent. La commande suivante détecte un visage à partir de l’image Family1-Dad1.jpg et l’ajoute à la personne correspondante. Vous devez spécifier l’ID
personIdretourné lors de la création de l’objet Person « Family1-Dad ». Le nom de l’image correspond au nom de la personne créée. Entrez également l’ID LargePersonGroup et votre clé dans les champs appropriés.curl.exe -v -X POST "https://{resource endpoint}/face/v1.0/largepersongroups/{largePersonGroupId}/persons/{personId}/persistedfaces?detectionModel=detection_03" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {subscription key}" --data-ascii "{""url"":""https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/Family1-Dad1.jpg""}"Ensuite, réexécutez la commande ci-dessus avec une autre image source et une personne cible. Les images disponibles sont les suivantes : Family1-Dad1.jpg, Family1-Dad2.jpgFamily1-Mom1.jpg, Family1-Mom2.jpg, Family1-Son1.jpg, Family1-Son2.jpg, Family1-Daughter1.jpg, Family1-Daughter2.jpg, Family2-Lady1.jpg, Family2-Lady2.jpg, Family2-Man1.jpget Family2-Man2.jpg. Assurez-vous que la personne dont vous spécifiez l’ID dans l’appel d’API correspond au nom du fichier image dans le corps de la demande.
À la fin de cette étape, vous devez avoir plusieurs objets Person qui ont chacun un ou plusieurs visages correspondants, détectés directement à partir des images fournies.
Ensuite, entraînez le LargePersonGroup avec les données de visage actuelles. L’opération d’entraînement enseigne au modèle comment associer des caractéristiques faciales, parfois agrégées à partir de plusieurs images sources, à chaque personne. Insérez l’ID LargePersonGroup et votre clé avant d’exécuter la commande.
Vérifiez si l’état d’entraînement est réussi. Si ce n’est pas le cas, attendez un certain temps et relancez la requête.
Vous êtes maintenant prêt à appeler l’API Identifier, à l’aide de l’ID de visage source de la première étape et de l’ID LargePersonGroup. Insérez ces valeurs dans les champs appropriés dans le corps de la demande, puis insérez votre clé.
curl.exe -v -X POST "https://{resource endpoint}/face/v1.0/identify" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {subscription key}" --data-ascii "{ ""largePersonGroupId"": ""INSERT_PERSONGROUP_ID"", ""faceIds"": [ ""INSERT_SOURCE_FACE_ID"" ], ""maxNumOfCandidatesReturned"": 1, ""confidenceThreshold"": 0.5 }"La réponse doit vous donner un ID Person indiquant la personne identifiée avec le visage source. Il doit s’agir de l’ID qui correspond à la personne « Family1-Dad », car le visage source est de cette personne.
Pour effectuer la vérification des visages, vous allez utiliser l’ID de personne retourné à l’étape précédente, l’ID LargePersonGroup et également l’ID de visage source. Insérez ces valeurs dans les champs dans le corps de la demande, puis insérez votre clé.
curl.exe -v -X POST "https://{resource endpoint}/face/v1.0/verify" ` -H "Content-Type: application/json" ` -H "Ocp-Apim-Subscription-Key: {subscription key}" ` --data-ascii "{ ""faceId"": ""INSERT_SOURCE_FACE_ID"", ""personId"": ""INSERT_PERSON_ID"", ""largePersonGroupId"": ""INSERT_PERSONGROUP_ID"" }"La réponse doit vous donner un résultat de vérification booléen, ainsi qu’une valeur de confiance.
Nettoyer les ressources
Pour supprimer le LargePersonGroup que vous avez créé dans cet exercice, exécutez l’appel LargePersonGroup - Delete .
curl.exe -v -X DELETE "https://{resource endpoint}/face/v1.0/largepersongroups/{largePersonGroupId}" -H "Ocp-Apim-Subscription-Key: {subscription key}"
Si vous souhaitez nettoyer et supprimer un abonnement Foundry Tools, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées.
Étapes suivantes
Dans ce guide de démarrage rapide, vous avez vu comment utiliser l’API REST Visage afin d’effectuer des tâches de reconnaissance faciale basiques. Découvrez à présent les différents modèles de détection de visage, et la façon de spécifier le modèle adapté à votre cas d’usage.