Partager via


Spécifier un modèle de détection des visages

Ce guide vous montre comment spécifier un modèle de détection des visages pour le service Visage d’Azure AI.

Le service Visage utilise des modèles Machine Learning pour effectuer des opérations sur les visages humains présents dans les images. Nous continuons d’améliorer la précision de nos modèles en fonction des commentaires de nos clients et des progrès de la recherche, et nous intégrons ces améliorations sous forme de mises à jour de modèles. Les développeurs peuvent spécifier la version du modèle de détection de visage qu'ils souhaitent utiliser ; ils peuvent choisir le modèle qui correspond le mieux à leur cas d'utilisation.

Poursuivez votre lecture pour savoir comment spécifier le modèle de détection de visage dans certaines opérations de visage. Le service Visage utilise la détection des visages chaque fois qu’elle convertit l’image d’un visage dans une autre forme de données.

Si vous hésitez à utiliser le modèle le plus récent, passez à la section Évaluer des modèles différents pour évaluer le nouveau modèle et comparer les résultats en utilisant votre ensemble de données actuel.

Prérequis

Vous devez maîtriser les concepts de la détection de visages par intelligence artificielle (AI). Si ce n’est pas le cas, consultez le guide conceptuel ou le guide pratique pour la détection de visage :

Évaluer des modèles différents

Les différents modèles de détection sont optimisés pour différentes tâches. Consultez le tableau suivant pour une vue d’ensemble des différences.

Modèle Description Remarques relatives aux performances Points de repère
detection_01 Choix par défaut pour toutes les opérations de détection de visage. Non optimisé pour les visages petits, pris de côté ou flous. Retourne les points de repère du visage s’ils sont spécifiés dans l’appel de détection.
detection_02 Publié en mai 2019 et disponible si vous le souhaitez dans toutes les opérations de détection de visage. Amélioration de la précision pour les visages petits, pris de côté ou flous. Ne retourne pas de repères de visage.
detection_03 Publié en février 2021 et disponible si vous le souhaitez dans toutes les opérations de détection de visage. Amélioration de la précision, notamment sur les visages plus petits (64x64 pixels) et les orientations de visages tournés. Retourne les points de repère du visage s’ils sont spécifiés dans l’appel de détection.

Les attributs constituent un ensemble de fonctionnalités qui peuvent éventuellement être détectées si elles sont spécifiées dans l’appel de détection :

Modèle accessoires flou exposition lunettes headPose masque noise occlusion qualityForRecognition
detection_01 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ (pour recognition_03 ou 04)
detection_02
detection_03 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ (pour recognition_03 ou 04)

La meilleure façon de comparer les performances des modèles de détection consiste à les utiliser sur un exemple de jeu de données. Nous vous recommandons d’appeler l’API Détecter sur un grand nombre d’images, en particulier les images avec de nombreux visages ou des visages difficiles à voir, avec chaque modèle de détection. Prêtez attention au nombre de visages que chaque modèle retourne.

Détecter des visages avec le modèle spécifié

La détection des visages identifie l’emplacement des visages humains dans les cadres englobants et trouve leurs repères visuels. Cela permet d’extraire les traits du visage et de les stocker pour une utilisation ultérieure dans les opérations de reconnaissance.

Lorsque vous utilisez l’API Détecter, vous pouvez attribuer la version du modèle avec le paramètre detectionModel. Les valeurs disponibles sont :

  • detection_01
  • detection_02
  • detection_03

Une URL de requête pour l’API REST Détecter ressemble à ceci :

https://westus.api.cognitive.microsoft.com/face/v1.0/detect?detectionModel={detectionModel}&recognitionModel={recognitionModel}&returnFaceId={returnFaceId}&returnFaceAttributes={returnFaceAttributes}&returnFaceLandmarks={returnFaceLandmarks}&returnRecognitionModel={returnRecognitionModel}&faceIdTimeToLive={faceIdTimeToLive}

Si vous utilisez la bibliothèque cliente, vous pouvez attribuer la valeur de detectionModel en passant une chaîne appropriée. Si vous n’affectez pas de valeur, l’API utilise la version de modèle par défaut (detection_01). Consultez l'exemple de code suivant pour la bibliothèque cliente .NET.

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceLandmarks: false);
var faces = response.Value;

Ajouter un visage à une personne avec le modèle spécifié

Le service Visage peut extraire les données de visage d’une image et les associer à un objet Personne via l’API Ajouter un visage de personne d’un groupe de personnes. Dans cet appel d’API, vous pouvez spécifier le modèle de détection de la même façon que dans Détecter.

Consultez l’exemple de code .NET suivant.

// Create a PersonGroup and add a person with face detected by "detection_03" model
string personGroupId = "mypersongroupid";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Group Name", ["recognitionModel"] = "recognition_04" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}", content);
}

string? personId = null;
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Name" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    using (var response = await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons", content))
    {
        string contentString = await response.Content.ReadAsStringAsync();
        personId = (string?)(JsonConvert.DeserializeObject<Dictionary<string, object>>(contentString)?["personId"]);
    }
}

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons/{personId}/persistedfaces?detectionModel=detection_03", content);
}

Ce code crée un PersonGroup avec l’ID mypersongroupid et lui ajoute un objet Person. Puis il ajoute un visage à cet objet Person à l’aide du modèle detection_03. Si vous ne spécifiez pas le paramètre detectionModel, l’API utilise le modèle par défaut, detection_01.

Remarque

Vous n’avez pas besoin d’utiliser le même modèle de détection pour tous les visages dans un objet Personne, et vous n’avez pas besoin d’utiliser le même modèle de détection lors de la détection de nouveaux visage à comparer avec un objet Personne (dans l’API Identifier à partir d’un groupe de personnes, par exemple).

Ajouter un visage à FaceList avec le modèle spécifié

Vous pouvez également spécifier un modèle de détection lorsque vous ajoutez un visage à un objet FaceList existant. Consultez l’exemple de code .NET suivant.

using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My face collection", ["recognitionModel"] = "recognition_04" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}", content);
}

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}/persistedfaces?detectionModel=detection_03", content);
}

Ce code crée un objet FaceList appelé My face collection et lui ajoute un visage avec le modèle detection_03. Si vous ne spécifiez pas le paramètre detectionModel, l’API utilise le modèle par défaut, detection_01.

Remarque

Vous n’avez pas besoin d’utiliser le même modèle de détection pour tous les visages dans un objet FaceList, et vous n’avez pas besoin d’utiliser le même modèle de détection lors de la détection de nouveaux visage à comparer avec un objet FaceList.

Étapes suivantes

Dans cet article, vous avez appris comment spécifier le modèle de détection des visages à utiliser avec différentes API Visage. Voici maintenant un démarrage rapide pour prendre en main la détection et l’analyse des visages.