將臉部新增至 PersonGroup
警告
臉部服務存取受限於資格和使用準則,以支援我們的負責任 AI 原則。 臉部服務僅適用於 Microsoft 受控客戶和合作夥伴。 使用臉部辨識接收窗體來申請存取。 如需詳細資訊,請參閱 臉部有限存取 頁面。
本指南示範如何將大量人員和臉部新增至 PersonGroup 物件。 相同的策略也適用於 LargePersonGroup、FaceList 和 LargeFaceList 物件。 此範例是以 C# 撰寫,並使用 Azure AI Face .NET 用戶端連結庫。
初始化
下列程式代碼會宣告數個變數,並實作協助程式函式來排程 臉部新增 要求:
PersonCount
是人員總數。CallLimitPerSecond
根據訂用帳戶層,每秒呼叫數上限。_timeStampQueue
是用來記錄要求時間戳的佇列。await WaitCallLimitPerSecondAsync()
會等到傳送下一個要求有效為止。
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);
}
}
授權 API 呼叫
當您使用臉部用戶端連結庫時,密鑰和訂用帳戶端點會透過 FaceClient 類別的建構函式傳入。 如需建立臉部客戶端物件的指示,請參閱快速入門。
建立 PersonGroup
此程式代碼會建立名為 "MyPersonGroup"
的 PersonGroup 來儲存人員。 要求時間會加入佇列, _timeStampQueue
以確保整體驗證。
const string personGroupId = "mypersongroupid";
const string personGroupName = "MyPersonGroup";
_timeStampQueue.Enqueue(DateTime.UtcNow);
await faceClient.LargePersonGroup.CreateAsync(personGroupId, personGroupName);
建立 PersonGroup 的人員
此程式代碼會 同時建立 Person ,並使用 await WaitCallLimitPerSecondAsync()
來避免超過通話速率限制。
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);
});
將臉部新增至人員
新增至不同人員的臉部會同時處理。 為一個特定人員新增的臉部會循序處理。 再次叫用 , await WaitCallLimitPerSecondAsync()
以確保要求頻率在限制範圍內。
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);
}
}
});
摘要
在本指南中,您已瞭解建立具有大量人員和臉部的人員群組的程式。 數個提醒:
- 此策略也適用於 FaceLists 和 LargePersonGroups。
- 同時處理將臉部新增或刪除至不同的 FaceLists 或 LargePersonGroups 的人員。
- 將臉部新增或刪除至 LargePersonGroup 中的一個特定 FaceList 或人員,會循序完成。
下一步
接下來,瞭解如何使用增強型數據結構 PersonDirectory ,以使用臉部數據執行更多動作。
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: