Lägga till ansikten i en PersonGroup
Den här guiden visar hur du lägger till ett stort antal personer och ansikten i ett PersonGroup-objekt. Samma strategi gäller även för LargePersonGroup-, FaceList- och LargeFaceList-objekt. Det här exemplet är skrivet i C# med hjälp Azure Cognitive Services .NET-klientbiblioteket för ansikts- och ansiktsdata.
Steg 1: Initiering
Följande kod deklarerar flera variabler och implementerar en hjälpfunktion för att schemalägga ansiktslägg till begäranden:
PersonCountär det totala antalet personer.CallLimitPerSecondär det maximala antalet anrop per sekund enligt prenumerationsnivån._timeStampQueueär en kö för att registrera tidstämplar.await WaitCallLimitPerSecondAsync()väntar tills det är giltigt att skicka nästa begäran.
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);
}
}
Steg 2: Auktorisera API-anrop
När du använder ett klientbibliotek måste du skicka din prenumerationsnyckel till konstruktorn för klassen FaceClient. Exempel:
private readonly IFaceClient faceClient = new FaceClient(
new ApiKeyServiceClientCredentials("<SubscriptionKey>"),
new System.Net.Http.DelegatingHandler[] { });
Hämta prenumerationsnyckeln genom att gå till Azure Marketplace från Azure Portal. Mer information finns i Prenumerationer.
Steg 3: Skapa PersonGroup
En PersonGroup med namnet ”MyPersonGroup” skapas för att spara personerna.
Tiden för begäran står i kö till _timeStampQueue för att säkerställa den övergripande verifieringen.
const string personGroupId = "mypersongroupid";
const string personGroupName = "MyPersonGroup";
_timeStampQueue.Enqueue(DateTime.UtcNow);
await faceClient.LargePersonGroup.CreateAsync(personGroupId, personGroupName);
Steg 4: Skapa personerna för PersonGroup
Personer skapas samtidigt och tillämpas även await WaitCallLimitPerSecondAsync() för att undvika att anropsgränsen överskrids.
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);
});
Steg 5: Lägg till ansikten till personerna
Ansikten som läggs till olika personer bearbetas samtidigt. Ansikten som läggs till för en viss person bearbetas sekventiellt.
Anropas await WaitCallLimitPerSecondAsync() återigen för att säkerställa att frekvensen för begäran ligger inom begränsningens omfattning.
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);
}
}
});
Sammanfattning
I den här guiden har du lärt dig hur du skapar en PersonGroup med ett stort antal personer och ansikten. Flera påminnelser:
- Den här strategin gäller även för FaceLists och LargePersonGroups.
- Att lägga till eller ta bort ansikten till olika FaceLists eller personer i LargePersonGroups bearbetas samtidigt.
- Att lägga till eller ta bort ansikten till en specifik FaceList eller person i en LargePersonGroup görs sekventiellt.
- För enkelhetens skull utelämnas hur du hanterar ett potentiellt undantag i den här guiden. Om du vill förbättra robustheten använder du rätt återförsöksprincip.
Följande funktioner har förklarats och demonstrerats:
- Skapa PersonGroups med hjälp av API:et PersonGroup – Skapa.
- Skapa personer med hjälp av API:et PersonGroup Person – Skapa.
- Lägg till ansikten till personer med hjälp av API:et PersonGroup Person – Lägg till ansikte.
Nästa steg
I den här guiden har du lärt dig hur du lägger till ansiktsdata i en PersonGroup. Härnäst får du lära dig hur du använder den förbättrade datastrukturen PersonDirectory för att göra mer med dina ansiktsdata.