共用方式為


將臉部新增至 PersonGroup

警告

臉部服務存取受限於資格和使用準則,以支援我們的負責任 AI 原則。 臉部服務僅適用於 Microsoft 受控客戶和合作夥伴。 使用臉部辨識接收窗體來申請存取。 如需詳細資訊,請參閱 臉部有限存取 頁面。

本指南示範如何將大量人員和臉部新增至 PersonGroup 物件。 相同的策略也適用於 LargePersonGroupFaceList 和 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);
        }
    }
});

摘要

在本指南中,您已瞭解建立具有大量人員和臉部的人員群組的程式。 數個提醒:

  • 此策略也適用於 FaceListsLargePersonGroups
  • 同時處理將臉部新增或刪除至不同的 FaceLists 或 LargePersonGroups 的人員
  • 將臉部新增或刪除至 LargePersonGroup 中的一個特定 FaceList 或人員,會循序完成。

下一步

接下來,瞭解如何使用增強型數據結構 PersonDirectory ,以使用臉部數據執行更多動作。