Přidání obličeje k osobě
Tato příručka ukazuje, jak přidat velký počet osob a ploch do objektu Person. Stejná strategie platí i pro objekty LargePersonGroup, FaceList a LargeFaceList. Tato ukázka je napsaná v jazyce C# pomocí klientské knihovny Azure Cognitive Services Face .NET.
Krok 1: Inicializace
Následující kód deklaruje několik proměnných a implementuje pomocnou funkci pro naplánování žádostí o přidání obličeje:
PersonCountje celkový počet osob.CallLimitPerSecondje maximální počet volání za sekundu podle úrovně předplatného._timeStampQueueje fronta zaznamenávající časová razítka požadavků.await WaitCallLimitPerSecondAsync()počká, dokud nebude platná k odeslání dalšího požadavku.
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);
}
}
Krok 2: Autorizace volání rozhraní API
Při použití klientské knihovny musíte předat klíč předplatného konstruktoru třídy FaceClient . Například:
private readonly IFaceClient faceClient = new FaceClient(
new ApiKeyServiceClientCredentials("<SubscriptionKey>"),
new System.Net.Http.DelegatingHandler[] { });
Klíč předplatného získáte tak, že v Azure Portal přejdete na Azure Marketplace. Další informace najdete v tématu předplatná.
Krok 3: Vytvoření kolekce PersonGroup
Kolekce PersonGroup s názvem „MyPersonGroup“ slouží k ukládání osob.
Čas žádosti se zařadí do fronty _timeStampQueue, aby se zajistilo celkové ověření.
const string personGroupId = "mypersongroupid";
const string personGroupName = "MyPersonGroup";
_timeStampQueue.Enqueue(DateTime.UtcNow);
await faceClient.LargePersonGroup.CreateAsync(personGroupId, personGroupName);
Krok 4: vytvoření osob pro danou osobu
Osoby jsou vytvořeny souběžně a await WaitCallLimitPerSecondAsync() jsou také aplikovány, aby nedocházelo k překročení limitu volání.
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);
});
Krok 5: Přidání tváří osobám
Plošky přidané různým osobám jsou zpracovávány souběžně. Plošky přidané pro jednu konkrétní osobu jsou zpracovávány postupně.
Znovu se vyvolá, aby se await WaitCallLimitPerSecondAsync() zajistilo, že frekvence požadavků spadá do rozsahu omezení.
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);
}
}
});
Souhrn
V této příručce jste se dozvěděli o procesu vytvoření osoby typu osoba s obrovským počtem osob a ploch. Několik připomenutí:
- Tato strategie platí i pro FaceLists a LargePersonGroups.
- Přidávání a odstraňování plošek pro různé FaceListsy nebo osoby v LargePersonGroups se zpracovávají souběžně.
- Přidávání a odstraňování plošek na konkrétní FaceList nebo osoby v LargePersonGroup se provádí postupně.
- Pro zjednodušení je v této příručce uveden postup, jak zpracovat potenciální výjimku. Pokud chcete zvýšit robustnost, použijte zásady správného opakování.
Následující funkce byly vysvětleny a ukázaly:
- Vytvořte objektů persongroup pomocí rozhraní API Person-Create .
- Vytvořte osoby pomocí uživatele Person – Create API.
- Přidejte obličeje k osobám pomocí rozhraní Person osoby – přidat rozhraní API pro rozpoznávání tváře.
Další kroky
V tomto průvodci jste zjistili, jak přidat Obličejová data do osoby. V dalším kroku se dozvíte, jak používat vylepšenou strukturu dat PersonDirectory k tomu, abyste se seznámili s daty z vaší obličeje.