Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Dikkat
Yüz tanıma hizmeti erişimi, Sorumlu yapay zeka ilkelerimizi desteklemek için uygunluk ve kullanım ölçütlerine göre sınırlıdır. Yüz tanıma hizmeti yalnızca Microsoft tarafından yönetilen müşteriler ve iş ortakları tarafından kullanılabilir. Erişim için başvurmak üzere Yüz Tanıma başvuru formunu kullanın. Daha fazla bilgi için Kısıtlı Erişim sayfasına bakın.
Bu kılavuz, PersonGroup nesnesine çok sayıda kişinin ve yüzün nasıl ekleneceğini gösterir. Aynı strateji LargePersonGroup, FaceList ve LargeFaceList nesneleri için de geçerlidir. Kod örnekleri C# kullanır.
Kurulum
Aşağıdaki kod birkaç değişken bildirir ve yüz ekleme isteklerini zamanlamak için bir yardımcı işlevi uygular:
-
PersonCount, toplam kişi sayısıdır. -
CallLimitPerSecond, abonelik katmanına göre saniyedeki maksimum çağrı sayısıdır. -
_timeStampQueue, istek zaman damgalarını kaydetmek için kullanılan bir Kuyruktur. -
await WaitCallLimitPerSecondAsync()bir sonraki isteği göndermek için geçerli olana kadar bekler.
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);
}
}
PersonGroup'u oluştur
Bu kod, kişileri kaydetmek için adlı bir "MyPersonGroup" oluşturur. Genel doğrulama sağlamak için istek süresi, _timeStampQueue hedefinde kuyruğa alınır.
const string personGroupId = "mypersongroupid";
const string personGroupName = "MyPersonGroup";
_timeStampQueue.Enqueue(DateTime.UtcNow);
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = personGroupName, ["recognitionModel"] = "recognition_04" }))))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}", content);
}
PersonGroup için kişileri oluşturma
Bu kod, Kişileri eşzamanlı olarak oluşturur ve çağrı hızı sınırını aşmamak için kullanırawait WaitCallLimitPerSecondAsync().
string?[] persons = new string?[PersonCount];
Parallel.For(0, PersonCount, async i =>
{
await WaitCallLimitPerSecondAsync();
string personName = $"PersonName#{i}";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = personName }))))
{
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();
persons[i] = (string?)(JsonConvert.DeserializeObject<Dictionary<string, object>>(contentString)?["personId"]);
}
}
});
Kişilere yüz ekle
Farklı kişilere eklenen yüzler eşzamanlı olarak işlenir. Belirli bir kişi için eklenen yüzler sırayla işlenir.
await WaitCallLimitPerSecondAsync() İstek sıklığının sınırlama kapsamında olduğundan emin olmak için yeniden çağrılır.
Parallel.For(0, PersonCount, async i =>
{
string personImageDir = @"/path/to/person/i/images";
foreach (string imagePath in Directory.GetFiles(personImageDir, "*.jpg"))
{
await WaitCallLimitPerSecondAsync();
using (Stream stream = File.OpenRead(imagePath))
{
using (var content = new StreamContent(stream))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons/{persons[i]}/persistedfaces?detectionModel=detection_03", content);
}
}
}
});
Özet
Bu kılavuzda, çok sayıda kişi ve yüz içeren bir PersonGroup oluşturma işlemini öğrendiniz. Önemli noktalar:
- Bu strateji FaceLists ve LargePersonGroups için geçerlidir.
- Farklı FaceList'lerdeki yüzleri veya LargePersonGroup'lardaki kişileri ekleme veya silme işlemleri eşzamanlı olarak işlenir.
- Belirli bir FaceList ya da bir LargePersonGroup içerisindeki kişilere yüz ekleme veya silme işlemi sırayla yapılır.
Sonraki adım
Ardından, yüz verilerinizle daha fazlasını yapmak için gelişmiş veri yapısı PersonDirectory'yi kullanmayı öğrenin.