Ajouter des visages à un objet PersonGroup
Attention
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’admission de la reconnaissance faciale pour demander l’accès. Pour plus d’informations, consultez la page Accès limité visage.
Ce guide explique comment ajouter un grand nombre de personnes et de visages à un objet PersonGroup. Cette stratégie s'applique également aux objets LargePersonGroup, FaceList et LargeFaceList. Cet exemple est écrit en C# et utilise la bibliothèque de client .NET Visage d’Azure AI.
Initialisation
Le code suivant déclare plusieurs variables et implémente une fonction d'assistance pour planifier les requêtes ajout de visage :
PersonCount
correspond au nombre total de personnes.CallLimitPerSecond
correspond au nombre maximal d’appels par seconde en fonction du niveau d’abonnement._timeStampQueue
est une file d'attente qui permet d’enregistrer les horodatages des requêtes.await WaitCallLimitPerSecondAsync()
attend qu'elle soit valide pour envoyer la requête suivante.
const int PersonCount = 10000;
const int CallLimitPerSecond = 10;
static Queue<DateTime> _timeStampQueue = new Queue<DateTime>(CallLimitPerSecond);
static async Task WaitCallLimitPerSecondAsync()
{
Monitor.Enter(_timeStampQueue);
try
{
if (_timeStampQueue.Count >= CallLimitPerSecond)
{
TimeSpan timeInterval = DateTime.UtcNow - _timeStampQueue.Peek();
if (timeInterval < TimeSpan.FromSeconds(1))
{
await Task.Delay(TimeSpan.FromSeconds(1) - timeInterval);
}
_timeStampQueue.Dequeue();
}
_timeStampQueue.Enqueue(DateTime.UtcNow);
}
finally
{
Monitor.Exit(_timeStampQueue);
}
}
Autoriser l’appel d’API
Quand vous utilisez la bibliothèque de client Visage, la clé et le point de terminaison de l’abonnement sont transmis par le biais du constructeur de la classe FaceClient. Consultez le démarrage rapide pour obtenir des instructions sur la création d’un objet client Visage.
Créer PersonGroup
Ce code crée un PersonGroup nommé "MyPersonGroup"
pour enregistrer les personnes. L’heure de la requête est empilée dans _timeStampQueue
pour garantir la validation globale.
const string personGroupId = "mypersongroupid";
const string personGroupName = "MyPersonGroup";
_timeStampQueue.Enqueue(DateTime.UtcNow);
await faceClient.LargePersonGroup.CreateAsync(personGroupId, personGroupName);
Créer les personnes pour l'objet PersonGroup
Ce code crée des Personnes simultanément et utilise await WaitCallLimitPerSecondAsync()
pour éviter de dépasser la limite de débit d’appel.
Person[] persons = new Person[PersonCount];
Parallel.For(0, PersonCount, async i =>
{
await WaitCallLimitPerSecondAsync();
string personName = $"PersonName#{i}";
persons[i] = await faceClient.PersonGroupPerson.CreateAsync(personGroupId, personName);
});
Ajouter des visages aux personnes
Les visages ajoutés à différentes personnes sont traités simultanément. Les visages ajoutés à une personne spécifique sont traités de manière séquentielle. Là encore, await WaitCallLimitPerSecondAsync()
est appelé afin de garantir que la fréquence de requêtes se situe dans le cadre de la limitation.
Parallel.For(0, PersonCount, async i =>
{
Guid personId = persons[i].PersonId;
string personImageDir = @"/path/to/person/i/images";
foreach (string imagePath in Directory.GetFiles(personImageDir, "*.jpg"))
{
await WaitCallLimitPerSecondAsync();
using (Stream stream = File.OpenRead(imagePath))
{
await faceClient.PersonGroupPerson.AddFaceFromStreamAsync(personGroupId, personId, stream);
}
}
});
Résumé
Dans ce guide, vous avez appris à créer un objet PersonGroup avec un nombre important de personnes et de visages. Plusieurs rappels :
- Cette stratégie s'applique également aux objets FaceLists et LargePersonGroups.
- L’ajout et la suppression des visages dans différentes FaceLists ou des personnes dans différents LargePersonGroups sont traités simultanément.
- L'ajout et la suppression de visages dans une FaceList donnée ou de personne dans un LargePersonGroup s'effectuent de façon séquentielle.
Étapes suivantes
Ensuite, découvrez comment utiliser la structure de données améliorée PersonDirectory pour tirer parti de vos données de visage.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : pendant toute l’année 2024, nous allons éliminer progressivement Problèmes GitHub comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, voir :Soumettre et afficher des commentaires pour