Quickstart: De Face-service gebruiken
Belangrijk
Als u Microsoft-producten of -services gebruikt om biometrische gegevens te verwerken, bent u verantwoordelijk voor: (i) het verstrekken van kennisgeving aan betrokkenen, waaronder met betrekking tot retentieperioden en vernietiging; ii) toestemming te krijgen van betrokkenen; en (iii) het verwijderen van de biometrische gegevens, allemaal indien van toepassing en vereist onder toepasselijke vereisten voor gegevensbescherming. "Biometrische gegevens" hebben de betekenis die is uiteengezet in artikel 4 van de AVG en, indien van toepassing, gelijkwaardige voorwaarden in andere vereisten voor gegevensbescherming. Zie Gegevens en privacy voor Face voor gerelateerde informatie.
Let op
Toegang tot face-services is beperkt op basis van geschiktheids- en gebruikscriteria om onze verantwoorde AI-principes te ondersteunen. Face-service is alleen beschikbaar voor door Microsoft beheerde klanten en partners. Gebruik het intakeformulier voor gezichtsherkenning om toegang aan te vragen. Zie de pagina beperkte toegang van Face voor meer informatie.
Ga aan de slag met gezichtsherkenning met behulp van de Face-clientbibliotheek voor .NET. De Azure AI Face-service biedt u toegang tot geavanceerde algoritmen voor het detecteren en herkennen van menselijke gezichten in afbeeldingen. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor eenvoudige gezichtsidentificatie uit te proberen met behulp van externe afbeeldingen.
Referentiedocumentatie | Broncode van bibliotheek | Pakket (NuGet) | Voorbeelden
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- De Visual Studio IDE of de huidige versie van .NET Core.
- Zodra u uw Azure-abonnement hebt, maakt u een Face-resource in Azure Portal om uw sleutel en eindpunt op te halen. Nadat de app is geïmplementeerd, selecteert u Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt om de toepassing te verbinden met de Face-API.
- U kunt de gratis prijscategorie (
F0
) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Omgevingsvariabelen maken
In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.
Ga naar de Azure Portal. Als de resource die u hebt gemaakt in de sectie Vereisten is geïmplementeerd, selecteert u Ga naar de resource onder Volgende stappen. U vindt uw sleutel en eindpunt onder Resourcebeheer op de pagina Sleutels en Eindpunt. Uw resourcesleutel is niet hetzelfde als uw Azure-abonnements-id.
Als u de omgevingsvariabele voor uw sleutel en eindpunt wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.
- Als u de
FACE_APIKEY
omgevingsvariabele wilt instellen, vervangt u deze door<your_key>
een van de sleutels voor uw resource. - Als u de
FACE_ENDPOINT
omgevingsvariabele wilt instellen, vervangt<your_endpoint>
u het eindpunt voor uw resource.
Belangrijk
Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.
Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's die de omgevingsvariabelen lezen, met inbegrip van het consolevenster, opnieuw opstarten.
Gezichten identificeren en verifiëren
Een nieuwe C#-toepassing maken
Maak met behulp van Visual Studio een nieuwe .NET Core-toepassing.
De clientbibliotheek installeren
Nadat u een nieuw project hebt gemaakt, installeert u de clientbibliotheek door in Solution Explorer met de rechtermuisknop op de projectoplossing te klikken en NuGet-pakketten beheren te selecteren. Selecteer in de package manager die wordt geopend de optie Bladeren, schakel Include prerelease in en zoek naar
Azure.AI.Vision.Face
. Selecteer de nieuwste versie en vervolgens Installeren.Voeg de volgende code toe aan het Program.cs-bestand .
Notitie
Als u geen toegang hebt gekregen tot de Face-service met behulp van het intakeformulier, werken sommige van deze functies niet.
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(); } } }
De toepassing uitvoeren
Voer de toepassing uit door boven in het IDE-venster op de knop Fouten opsporen te klikken.
Uitvoer
========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
De Face-API wordt uitgevoerd op een set vooraf gebouwde modellen die van nature statisch zijn (de prestaties van het model worden niet slechter of beter tijdens het uitvoeren van de service). De resultaten die het model produceert, kunnen veranderen als de back-end van het model door Microsoft wordt gewijzigd zonder migratie naar een heel nieuwe modelversie. Als u wilt profiteren van een nieuwere versie van het model, kunt u PersonGroup opnieuw trainen, waarbij u het nieuwere model opgeeft als een parameter bij dezelfde inschrijvingsafbeeldingen.
Resources opschonen
Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.
Volgende stappen
In deze quickstart hebt u geleerd hoe u de Face-clientbibliotheek voor .NET gebruikt om eenvoudige gezichtsidentificatie uit te voeren. Lees vervolgens meer over de verschillende modellen voor gezichtsdetectie en hoe u het juiste model voor uw use-case opgeeft.
- Wat is de Face-service?
- Uitgebreidere voorbeeldcode vindt u op GitHub.
Ga aan de slag met gezichtsherkenning met behulp van de Face-clientbibliotheek voor Python. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor basistaken uit te proberen. De Face-service biedt u toegang tot geavanceerde algoritmen voor het detecteren en herkennen van menselijke gezichten in afbeeldingen. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor eenvoudige gezichtsidentificatie uit te proberen met behulp van externe afbeeldingen.
Referentiedocumentatie | Broncode bibliotheek | Package (PiPy) | Voorbeelden
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- Python 3.x
- Uw Python-installatie moet pip bevatten. U kunt controleren of pip is geïnstalleerd door op de opdrachtregel uit te voeren
pip --version
. Haal pip op door de nieuwste versie van Python te installeren.
- Uw Python-installatie moet pip bevatten. U kunt controleren of pip is geïnstalleerd door op de opdrachtregel uit te voeren
- Zodra u uw Azure-abonnement hebt, maakt u een Face-resource in Azure Portal om uw sleutel en eindpunt op te halen. Nadat de app is geïmplementeerd, selecteert u Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt om de toepassing te verbinden met de Face-API.
- U kunt de gratis prijscategorie (
F0
) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Omgevingsvariabelen maken
In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.
Ga naar de Azure Portal. Als de resource die u hebt gemaakt in de sectie Vereisten is geïmplementeerd, selecteert u Ga naar de resource onder Volgende stappen. U vindt uw sleutel en eindpunt onder Resourcebeheer op de pagina Sleutels en Eindpunt. Uw resourcesleutel is niet hetzelfde als uw Azure-abonnements-id.
Als u de omgevingsvariabele voor uw sleutel en eindpunt wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.
- Als u de
FACE_APIKEY
omgevingsvariabele wilt instellen, vervangt u deze door<your_key>
een van de sleutels voor uw resource. - Als u de
FACE_ENDPOINT
omgevingsvariabele wilt instellen, vervangt<your_endpoint>
u het eindpunt voor uw resource.
Belangrijk
Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.
Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's die de omgevingsvariabelen lezen, met inbegrip van het consolevenster, opnieuw opstarten.
Gezichten identificeren en verifiëren
De clientbibliotheek installeren
Na de installatie van Python kunt u de clientbibliotheek installeren met:
pip install --upgrade azure-ai-vision-face
Een nieuwe Python-toepassing maken
Maak bijvoorbeeld een nieuw Python-script, quickstart-file.py. Open deze vervolgens in uw favoriete editor of IDE en plak de volgende code.
Notitie
Als u geen toegang hebt gekregen tot de Face-service met behulp van het intakeformulier, werken sommige van deze functies niet.
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.")
Voer uw gezichtsherkennings-app uit vanuit de toepassingsmap met de opdracht
python
.python quickstart-file.py
Tip
De Face-API wordt uitgevoerd op een set vooraf gebouwde modellen die van nature statisch zijn (de prestaties van het model worden niet slechter of beter tijdens het uitvoeren van de service). De resultaten die het model produceert, kunnen veranderen als de back-end van het model door Microsoft wordt gewijzigd zonder migratie naar een heel nieuwe modelversie. Als u wilt profiteren van een nieuwere versie van het model, kunt u PersonGroup opnieuw trainen, waarbij u het nieuwere model opgeeft als een parameter bij dezelfde inschrijvingsafbeeldingen.
Uitvoer
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.
Resources opschonen
Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.
Volgende stappen
In deze quickstart hebt u geleerd hoe u de Face-clientbibliotheek voor Python gebruikt om eenvoudige gezichtsidentificatie uit te voeren. Lees vervolgens meer over de verschillende modellen voor gezichtsdetectie en hoe u het juiste model voor uw use-case opgeeft.
- Wat is de Face-service?
- Uitgebreidere voorbeeldcode vindt u op GitHub.
Ga aan de slag met gezichtsherkenning met behulp van de Face-clientbibliotheek voor Java. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor basistaken uit te proberen. De Face-service biedt u toegang tot geavanceerde algoritmen voor het detecteren en herkennen van menselijke gezichten in afbeeldingen. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor eenvoudige gezichtsidentificatie uit te proberen met behulp van externe afbeeldingen.
Referentiedocumentatie | Broncode van bibliotheek | Pakket (Maven) | Voorbeelden
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- De huidige versie van de Java Development Kit (JDK)
- Apache Maven geïnstalleerd. Installeer in Linux vanuit de distributieopslagplaatsen, indien beschikbaar.
- Zodra u uw Azure-abonnement hebt, maakt u een Face-resource in Azure Portal om uw sleutel en eindpunt op te halen. Nadat de app is geïmplementeerd, selecteert u Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt om de toepassing te verbinden met de Face-API.
- U kunt de gratis prijscategorie (
F0
) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Omgevingsvariabelen maken
In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.
Ga naar de Azure Portal. Als de resource die u hebt gemaakt in de sectie Vereisten is geïmplementeerd, selecteert u Ga naar de resource onder Volgende stappen. U vindt uw sleutel en eindpunt onder Resourcebeheer op de pagina Sleutels en Eindpunt. Uw resourcesleutel is niet hetzelfde als uw Azure-abonnements-id.
Als u de omgevingsvariabele voor uw sleutel en eindpunt wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.
- Als u de
FACE_APIKEY
omgevingsvariabele wilt instellen, vervangt u deze door<your_key>
een van de sleutels voor uw resource. - Als u de
FACE_ENDPOINT
omgevingsvariabele wilt instellen, vervangt<your_endpoint>
u het eindpunt voor uw resource.
Belangrijk
Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.
Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's die de omgevingsvariabelen lezen, met inbegrip van het consolevenster, opnieuw opstarten.
Gezichten identificeren en verifiëren
De clientbibliotheek installeren
Open een consolevenster en maak een nieuwe map voor uw quickstart-toepassing. Kopieer de volgende inhoud naar een nieuw bestand. Sla het bestand op zoals
pom.xml
in de projectmap:<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>
Installeer de SDK en afhankelijkheden door het volgende uit te voeren in de projectmap:
mvn clean dependency:copy-dependencies
Een nieuwe Java-toepassing maken
Maak een bestand met de naam
Quickstart.java
, open het in een teksteditor en plak de volgende code:Notitie
Als u geen toegang hebt gekregen tot de Face-service met behulp van het intakeformulier, werken sommige van deze functies niet.
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(); } }
Voer uw app voor gezichtsherkenning uit vanuit de toepassingsmap met de
javac
enjava
opdrachten.
Uitvoer
========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.
Resources opschonen
Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.
Volgende stappen
In deze quickstart hebt u geleerd hoe u de Face-clientbibliotheek voor Java gebruikt om eenvoudige gezichtsidentificatie uit te voeren. Lees vervolgens meer over de verschillende modellen voor gezichtsdetectie en hoe u het juiste model voor uw use-case opgeeft.
- Wat is de Face-service?
- Uitgebreidere voorbeeldcode vindt u op GitHub.
Ga aan de slag met gezichtsherkenning met behulp van de Face-clientbibliotheek voor JavaScript. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor basistaken uit te proberen. De Face-service biedt u toegang tot geavanceerde algoritmen voor het detecteren en herkennen van menselijke gezichten in afbeeldingen. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor eenvoudige gezichtsidentificatie uit te proberen met behulp van externe afbeeldingen.
Referentiedocumentatie | Bibliotheekbroncode | Pakket (npm) | Voorbeelden
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- De nieuwste versie van Node.js
- Zodra u uw Azure-abonnement hebt, maakt u een Face-resource in Azure Portal om uw sleutel en eindpunt op te halen. Nadat de app is geïmplementeerd, selecteert u Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt om de toepassing te verbinden met de Face-API.
- U kunt de gratis prijscategorie (
F0
) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Omgevingsvariabelen maken
In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.
Ga naar de Azure Portal. Als de resource die u hebt gemaakt in de sectie Vereisten is geïmplementeerd, selecteert u Ga naar de resource onder Volgende stappen. U vindt uw sleutel en eindpunt onder Resourcebeheer op de pagina Sleutels en Eindpunt. Uw resourcesleutel is niet hetzelfde als uw Azure-abonnements-id.
Als u de omgevingsvariabele voor uw sleutel en eindpunt wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.
- Als u de
FACE_APIKEY
omgevingsvariabele wilt instellen, vervangt u deze door<your_key>
een van de sleutels voor uw resource. - Als u de
FACE_ENDPOINT
omgevingsvariabele wilt instellen, vervangt<your_endpoint>
u het eindpunt voor uw resource.
Belangrijk
Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.
Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.
setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>
Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's die de omgevingsvariabelen lezen, met inbegrip van het consolevenster, opnieuw opstarten.
Gezichten identificeren en verifiëren
Een nieuwe Node.js-toepassing maken
Maak in een consolevenster (zoals cmd, PowerShell of Bash) een nieuwe map voor de app, en navigeer naar deze map.
mkdir myapp && cd myapp
Voer de opdracht
npm init
uit om een knooppunttoepassing te maken met eenpackage.json
-bestand.npm init
Installeer de
@azure-rest/ai-vision-face
npm-pakketten:npm install @azure-rest/ai-vision-face
Het
package.json
-bestand van uw app wordt bijgewerkt met de afhankelijkheden.Maak een bestand met de naam
index.js
, open het in een teksteditor en plak de volgende code:Notitie
Als u geen toegang hebt gekregen tot de Face-service met behulp van het intakeformulier, werken sommige van deze functies niet.
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);
Voer de toepassing uit met de opdracht
node
in uw quickstart-bestand.node index.js
Uitvoer
========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.
Resources opschonen
Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.
Volgende stappen
In deze quickstart hebt u geleerd hoe u de Face-clientbibliotheek voor JavaScript gebruikt om eenvoudige gezichtsidentificatie uit te voeren. Lees vervolgens meer over de verschillende modellen voor gezichtsdetectie en hoe u het juiste model voor uw use-case opgeeft.
- Wat is de Face-service?
- Uitgebreidere voorbeeldcode vindt u op GitHub.
Aan de slag met gezichtsherkenning met behulp van de Face-REST API. De Face-service biedt u toegang tot geavanceerde algoritmen voor het detecteren en herkennen van menselijke gezichten in afbeeldingen.
Notitie
In deze quickstart wordt gebruik gemaakt van cURL-opdrachten om de REST API aan te roepen. U kunt de REST API ook aanroepen met behulp van een programmeertaal. Complexe scenario's zoals gezichtsidentificatie zijn eenvoudiger te implementeren met behulp van een taal-SDK. Bekijk de GitHub-voorbeeldbestanden voor voorbeelden in C#, Python, Java, JavaScript en Go.
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- Zodra u uw Azure-abonnement hebt, maakt u een Face-resource in Azure Portal om uw sleutel en eindpunt op te halen. Nadat de app is geïmplementeerd, selecteert u Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt om de toepassing te verbinden met de Face-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
- U kunt de gratis prijscategorie (
F0
) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
- PowerShell versie 6.0+ of een vergelijkbare opdrachtregeltoepassing.
- cURL geïnstalleerd.
Gezichten identificeren en verifiëren
Notitie
Als u geen toegang hebt gekregen tot de Face-service met behulp van het intakeformulier, werken sommige van deze functies niet.
Roep eerst de Detect-API aan op het bronvlak. Dit is het gezicht dat we proberen te identificeren uit de grotere groep. Kopieer de volgende opdracht naar een teksteditor, voeg uw eigen sleutel en eindpunt in en kopieer deze vervolgens in een shellvenster en voer deze uit.
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""}"
Sla de geretourneerde tekenreeks voor face-id op een tijdelijke locatie op. U gebruikt het opnieuw aan het einde.
Vervolgens moet u een LargePersonGroup maken en deze een willekeurige id geven die overeenkomt met het regex-patroon
^[a-z0-9-_]+$
. Met dit object worden de geaggregeerde gezichtsgegevens van meerdere personen opgeslagen. Voer de volgende opdracht uit en voeg uw eigen sleutel in. Wijzig desgewenst de naam en metagegevens van de groep in de hoofdtekst van de aanvraag.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"" }"
Sla de opgegeven id van de gemaakte groep op een tijdelijke locatie op.
Vervolgens maakt u Persoonsobjecten die deel uitmaken van de groep. Voer de volgende opdracht uit, waarbij u uw eigen sleutel en de id van de LargePersonGroup uit de vorige stap invoegt. Met deze opdracht maakt u een persoon met de naam '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."" }"
Nadat u deze opdracht hebt uitgevoerd, voert u deze opnieuw uit met verschillende invoergegevens om meer personenobjecten te maken: 'Family1-Mom', 'Family1-Son', 'Family1-Daughter', 'Family2-Lady' en 'Family2-Man'.
Sla de id's op van elke persoon die is gemaakt. Het is belangrijk om bij te houden welke persoonsnaam welke id heeft.
Vervolgens moet u nieuwe gezichten detecteren en deze koppelen aan de persoonsobjecten die bestaan. De volgende opdracht detecteert een gezicht uit de afbeelding Family1-Dad1.jpg en voegt deze toe aan de bijbehorende persoon. U moet de
personId
id opgeven die is geretourneerd toen u het persoonsobject Family1-Dad maakte. De naam van de afbeelding komt overeen met de naam van de gemaakte persoon. Voer ook de LargePersonGroup-id en uw sleutel in de juiste velden in.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""}"
Voer vervolgens de bovenstaande opdracht opnieuw uit met een andere bronafbeelding en doelpersoon. De beschikbare afbeeldingen zijn: Family1-Dad1.jpg, Family1-Dad2.jpg Family1-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.jpg en Family2-Man2.jpg. Zorg ervoor dat de persoon van wie u de id in de API-aanroep opgeeft overeenkomt met de naam van het afbeeldingsbestand in de aanvraagbody.
Aan het einde van deze stap moet u meerdere persoonsobjecten hebben die elk een of meer bijbehorende gezichten hebben, die rechtstreeks vanuit de opgegeven afbeeldingen zijn gedetecteerd.
Train vervolgens de LargePersonGroup met de huidige gezichtsgegevens. Tijdens de trainingsbewerking leert u hoe u gezichtskenmerken, soms samengevoegd van meerdere bronafbeeldingen, koppelt aan elke persoon. Voeg de LargePersonGroup-id en uw sleutel in voordat u de opdracht uitvoert.
Controleer of de trainingsstatus is geslaagd. Als dat niet het probleem is, wacht u even en voert u een query opnieuw uit.
Nu bent u klaar om de Identificatie-API aan te roepen, met behulp van de bron-face-id uit de eerste stap en de LargePersonGroup-id . Voeg deze waarden in de juiste velden in de hoofdtekst van de aanvraag in en voeg uw sleutel in.
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 }"
Het antwoord geeft u een persoons-id die de persoon aangeeft die is geïdentificeerd met het bron gezicht. Het moet de id zijn die overeenkomt met de 'Family1-Dad'-persoon, omdat het brongezicht van die persoon is.
Als u gezichtsverificatie wilt uitvoeren, gebruikt u de persoons-id die in de vorige stap is geretourneerd, de LargePersonGroup-id en ook de id van het brongezicht. Voeg deze waarden in de velden in de hoofdtekst van de aanvraag in en voeg uw sleutel in.
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"" }"
Het antwoord geeft u een Booleaanse verificatieresultaten samen met een betrouwbaarheidswaarde.
Resources opschonen
Als u de LargePersonGroup wilt verwijderen die u in deze oefening hebt gemaakt, voert u de aanroep LargePersonGroup - Delete uit.
curl.exe -v -X DELETE "https://{resource endpoint}/face/v1.0/largepersongroups/{largePersonGroupId}" -H "Ocp-Apim-Subscription-Key: {subscription key}"
Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.
Volgende stappen
In deze quickstart hebt u geleerd hoe u de Face-REST API gebruikt om eenvoudige gezichtsherkenningstaken uit te voeren. Lees vervolgens meer over de verschillende modellen voor gezichtsdetectie en hoe u het juiste model voor uw use-case opgeeft.