Указание модели определения лиц

В этой статье показано, как указать модель обнаружения лиц для службы распознавания лиц Azure.

Служба распознавания лиц использует модели машинного обучения для выполнения операций с лицами людей на изображениях. Мы постоянно повышаем точность работы наших моделей, основываясь на отзывах клиентов и результатах исследования, а также реализуем эти улучшения в обновлениях моделей. Вы можете указать версию модели обнаружения лиц, которую вы хотите использовать. Выберите модель, которая лучше всего подходит для вашего варианта использования. Ознакомьтесь со сведениями о том, как указать модель определения лиц в определенных операциях. Служба распознавания лиц использует определение лиц при преобразовании изображения лица в другую форму данных.

Если вы не уверены, следует ли использовать последнюю модель, см. раздел "Оценка различных моделей ", чтобы оценить новую модель и сравнить результаты с помощью текущего набора данных.

Необходимые условия

Вы должны быть знакомы с концепцией обнаружения лиц с помощью искусственного интеллекта. Если вы не знаете, просмотрите обзор концепции обнаружения лиц или инструкции по выполнению.

Оценка различных моделей

Различные модели определения лиц оптимизированы для различных задач. Общие сведения о различиях см. в следующей таблице.

Модель Описание Заметки о производительности Достопримечательности
detection_01 Выбор по умолчанию для всех операций определения лиц. Не оптимизирована для мелких изображений лиц, изображений лиц в профиль или размытых изображений лиц. Возвращает ключевые точки лица, если они указаны при вызове функции обнаружения.
detection_02 Выпущена в мае 2019 года и доступна дополнительно во всех операциях определения лиц. Улучшенная точность при обработке мелких изображений лиц, изображений лиц в профиль или размытых изображений лиц. Не возвращает опорные точки лица.
detection_03 Выпущена в феврале 2021 года и доступна дополнительно во всех операциях определения лиц. Улучшенная точность, включая определение мелких изображений лиц (64 x 64 пикселей) и лиц на повернутых изображениях. Возвращает ключевые точки лица, если они указаны при вызове функции обнаружения.

Атрибуты — это набор функций, которые можно определить при необходимости, если они указаны в вызове обнаружения:

Модель принадлежности размывать экспозиция очки headPose (положение головы) mask шум окклюзия Качество для распознавания
detection_01 ✅ (для recognition_03 или 04)
detection_02
detection_03 ✅ (для recognition_03 или 04)

Лучший способ сравнить производительность моделей определения — использовать их в примере набора данных. Вызовите API Detect на различных изображениях, особенно на изображениях с множеством лиц или на тех, где лица трудно различимы, используя каждую модель обнаружения. Обратите внимание на количество лиц, возвращаемых каждой моделью.

Определение лиц с помощью указанной модели

Функция определения лиц находит границы ограничивающих прямоугольников для лиц людей и определяет их визуальные ориентиры. Она извлекает характерные черты лица и сохраняет их для последующего использования в операциях распознавания.

При использовании API обнаружения можно назначить версию модели параметром detectionModel . Возможные значения:

  • detection_01
  • detection_02
  • detection_03

URL-адрес запроса для REST API обнаружения выглядит следующим образом:

https://westus.api.cognitive.microsoft.com/face/v1.0/detect?detectionModel={detectionModel}&recognitionModel={recognitionModel}&returnFaceId={returnFaceId}&returnFaceAttributes={returnFaceAttributes}&returnFaceLandmarks={returnFaceLandmarks}&returnRecognitionModel={returnRecognitionModel}&faceIdTimeToLive={faceIdTimeToLive}

Если вы используете клиентскую библиотеку, вы можете назначить значение для detectionModel, передав соответствующую строку. Если вы не назначите значение, API использует версию модели по умолчанию (detection_01). См. следующий пример кода для клиентской библиотеки .NET.

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceLandmarks: false);
var faces = response.Value;

Добавьте лицо к объекту Person, используя указанную модель

Служба распознавания лиц может извлечь данные лица из изображения и связать их с объектом Person с помощью API Добавление лица группы персон. В этом вызове API можно указать модель обнаружения так же, как и в функции "Обнаружение".

См. следующий пример кода .NET.

// Create a PersonGroup and add a person with face detected by "detection_03" model
string personGroupId = "mypersongroupid";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Group Name", ["recognitionModel"] = "recognition_04" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}", content);
}

string? personId = null;
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Name" }))))
{
    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();
        personId = (string?)(JsonConvert.DeserializeObject<Dictionary<string, object>>(contentString)?["personId"]);
    }
}

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons/{personId}/persistedfaces?detectionModel=detection_03", content);
}

Этот код создает объект PersonGroup с идентификатором mypersongroupid и добавляет в него объект Person. Затем он добавляет к этому объекту Person лицо, используя модель detection_03. Если параметр detectionModel не указан, API использует модель detection_01по умолчанию.

Замечание

Вам не нужно использовать одну и ту же модель обнаружения для всех лиц в объекте Person , и вам не нужно использовать одну и ту же модель обнаружения при обнаружении новых лиц для сравнения с объектом Person (например, в API идентификации из группы лиц).

Добавление лица в объект FaceList с помощью указанной модели

Можно также указать модель определения при добавлении лица в существующий объект FaceList. См. следующий пример кода .NET.

using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My face collection", ["recognitionModel"] = "recognition_04" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}", content);
}

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}/persistedfaces?detectionModel=detection_03", content);
}

Этот код создает список лиц под названием "FaceList" и добавляет к нему лицо с модельюMy face collection. Если параметр detectionModel не указан, API использует модель detection_01по умолчанию.

Замечание

Вам не нужно использовать одну и ту же модель обнаружения для всех лиц в объекте FaceList, а также вам не требуется использовать ту же модель обнаружения при обнаружении новых лиц для сравнения с объектом FaceList.

Следующий шаг

В этой статье вы узнали, как указать модель определения для использования с различными API распознавания лиц. Затем следуйте краткому руководству, чтобы начать работу с распознаванием и анализом лиц.