Delen via


Gezichten toevoegen aan een PersonGroup

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.

Deze handleiding laat zien hoe u een groot aantal personen en gezichten toevoegt aan een PersonGroup-object . Dezelfde strategie is ook van toepassing op LargePersonGroup-, FaceList- en LargeFaceList-objecten . Dit voorbeeld is geschreven in C# en maakt gebruik van de Azure AI Face .NET-clientbibliotheek.

Initialisatie

De volgende code declareert verschillende variabelen en implementeert een helperfunctie voor het plannen van aanvragen voor het toevoegen van gezichten:

  • PersonCount is het totale aantal personen.
  • CallLimitPerSecond is het maximum aantal aanroepen per seconde op basis van de abonnementslaag.
  • _timeStampQueue is een wachtrij om aanvraag tijdstempels vast te leggen.
  • await WaitCallLimitPerSecondAsync() wacht totdat de volgende aanvraag kan worden verzonden.
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);
    }
}

De API-aanroep autoriseren

Wanneer u de Face-clientbibliotheek gebruikt, worden het sleutel- en abonnementseindpunt doorgegeven via de constructor van de FaceClient-klasse. Zie de quickstart voor instructies over het maken van een Face-clientobject.

De PersonGroup maken

Met deze code maakt u een PersonGroup met de naam "MyPersonGroup" om de personen op te slaan. De aanvraagtijd wordt in de wachtrij _timeStampQueue geplaatst om de algehele validatie te controleren.

const string personGroupId = "mypersongroupid";
const string personGroupName = "MyPersonGroup";
_timeStampQueue.Enqueue(DateTime.UtcNow);
await faceClient.LargePersonGroup.CreateAsync(personGroupId, personGroupName);

De personen maken voor de PersonGroup

Met deze code worden personen gelijktijdig gemaakt en gebruikt await WaitCallLimitPerSecondAsync() om te voorkomen dat de aanroepsnelheidslimiet wordt overschreden.

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);
});

Gezichten voor de personen toevoegen

Gezichten die aan verschillende personen worden toegevoegd, worden gelijktijdig verwerkt. Gezichten die voor een specifieke persoon worden toegevoegd, worden opeenvolgend verwerkt. await WaitCallLimitPerSecondAsync() wordt opnieuw aangeroepen om ervoor te zorgen dat de frequentie van de aanvraag binnen het bereik van de beperking ligt.

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);
        }
    }
});

Samenvatting

In deze handleiding hebt u het proces voor het maken van een PersonGroup met een groot aantal personen en gezichten geleerd. Verschillende herinneringen:

  • Deze strategie is ook van toepassing op FaceLists en LargePersonGroups.
  • Het toevoegen of verwijderen van gezichten aan verschillende FaceLists of personen in LargePersonGroups worden gelijktijdig verwerkt.
  • Het toevoegen of verwijderen van gezichten aan één specifieke FaceList of personen in een LargePersonGroup wordt opeenvolgend uitgevoerd.

Volgende stappen

Leer vervolgens hoe u de verbeterde gegevensstructuur PersonDirectory gebruikt om meer te doen met uw gezichtsgegevens.