Перейти к основному содержимому
Версия: 3.9.0

Оценка лиц

Пол и возраст

Примечание: Определение пола и возраста лиц на видеопотоке рассматривается в пункте Определение пола, возраста и эмоций раздела Обработка видеопотока.

Для оценки пола и возраста необходимо создать объект AgeGenderEstimator, вызвав метод FacerecService.createAgeGenderEstimator, передав конфигурационный файл.

На данный момент имеются два файла конфигурации:

  • age_gender_estimator.xml - первоначальная реализация интерфейса оценки пола и возраста AgeGenderEstimator
  • age_gender_estimator_v2.xml - улучшенная версия интерфейса оценки пола и возраста AgeGenderEstimator, обеспечивает большую точность оценок при условии соблюдения рекомендаций по съемке

С помощью AgeGenderEstimator вы можете определить пол и возраст лица, вызвав метод AgeGenderEstimator.estimateAgeGender. Результатом будет структура AgeGenderEstimator.AgeGender, содержащая число возраста (в годах), возрастную группу (AgeGenderEstimator.Age) и пол (AgeGenderEstimator.Gender).

Пример использования AgeGenderEstimator см. в demo.cpp. Также вы можете узнать, как определять пол, возраст и эмоции в нашем туториале.

Качество изображения лица

В настоящий момент существует два интерфейса для оценки качества: QualityEstimator и FaceQualityEstimator.

  • QualityEstimator предоставляет дискретные оценки качества: степень засветки, равномерность освещения, уровень шума и резкости.
  • FaceQualityEstimator предоставляет качество в виде единственного вещественного числа, агрегирующего качество освещения, размытие, шум и ракурс, что очень удобно для срaвнения качества изображений, полученных от трекера.

QualityEstimator

Для создания объекта QualityEstimator необходимо вызвать метод FacerecService.createQualityEstimator, передав конфигурационный файл. На данный момент доступны два файла конфигурации:

  • quality_estimator.xml – первоначальная реализация интерфейса оценки качества QualityEstimator
  • quality_estimator_iso.xml (рекомендуемый) – улучшенная версия интерфейса оценки качества QualityEstimator, обеспечивает большую точность оценок качества

При помощи QualityEstimator вы можете определить качество изображения лица, вызвав метод QualityEstimator.estimateQuality. Результатом будет структура QualityEstimator.Quality, содержащая оценки засветки (flare), равномерности освещения (lighting), шума (noise) и резкости (sharpness).

Пример использования QualityEstimator см. в demo.cpp.

FaceQualityEstimator

Для создания объекта FaceQualityEstimator необходимо вызвать метод FacerecService.createFaceQualityEstimator, передав конфигурационный файл. На данный момент имеется только один файл конфигурации – face_quality_estimator.xml. При помощи FaceQualityEstimator вы можете определить качество изображения лица, вызвав метод FaceQualityEstimator.estimateQuality. Результатом будет вещественное число (чем оно больше, тем выше качество), агрегирующее качество освещения, размытие, шум и ракурс.

Пример использования FaceQualityEstimator см. в demo.cpp.

Принадлежность лица реальному человеку

Основной целью оценки принадлежности лица реальному человеку является предотвращение злонамеренных действий с использованием фото вместо реального лица. На данный момент определить принадлежность лица реальному человеку можно тремя способами – посредством анализа карты глубины, посредством анализа ИК изображения с камеры, либо посредством анализа цветного изображения с камеры. Также доступна оценка принадлежности лица реальному человеку посредством активной (сценарной) проверки, в ходе которой пользователю необходимо выполнить последовательность определенных действий.

Узнайте, как определять принадлежность лица реальному человеку в нашем туториале.

Класс DepthLivenessEstimator

Для оценки принадлежности лица реальному человеку с использованием карты глубины необходимо создать объект DepthLivenessEstimator, вызвав метод FacerecService.createDepthLivenessEstimator.

Доступны следующие файлы конфигурации:

  • depth_liveness_estimator.xml – первая реализация, не рекомендуется использовать (предназначен только для сохранения обратной совместимости)
  • depth_liveness_estimator_cnn.xml – реализация на основе нейронных сетей, рекомендуемый вариант (используется в VideoWorker по умолчанию)

Для использования этого алгоритма необходимо получать синхронизированные и отрегестрированные кадры (цветное изображение + карта глубины) и использовать цветное изображение для детектирования / трекинга лиц, а карту глубины – для передачи в DepthLivenessEstimator.estimateLiveness.

Для получения оценки вы можете вызвать метод DepthLivenessEstimator.estimateLiveness. Вы получите один из нижеперечисленных результатов:

  • DepthLivenessEstimator.Liveness.NOT_ENOUGH_DATA – слишком много отсутствующих значений на карте глубины
  • DepthLivenessEstimator.Liveness.REAL – наблюдаемое лицо принадлежит живому человеку
  • DepthLivenessEstimator.Liveness.FAKE – наблюдаемое лицо является фотографией

Класс IRLivenessEstimator

Для оценки принадлежности лица реальному человеку с использованием инфракрасного изображения с камеры необходимо создать объект IRLivenessEstimator, вызвав метод FacerecService.createIRLivenessEstimator. На данный момент доступен один файл конфигурации – ir_liveness_estimator_cnn.xml (реализация на основе нейронных сетей). Помимо ИК изображения для использования данного алгоритма также необходимо получать цветные кадры с камеры.

Для получения оценки вы можете вызвать метод IRLivenessEstimator.estimateLiveness. Вы получите один из нижеперечисленных результатов:

  • IRLivenessEstimator.Liveness.NOT_ENOUGH_DATA – слишком много отсутствующих значений на ИК изображении
  • IRLivenessEstimator.Liveness.REAL – наблюдаемое лицо принадлежит живому человеку
  • IRLivenessEstimator.Liveness.FAKE – наблюдаемое лицо является фотографией

Класс Liveness2DEstimator

Для оценки принадлежности лица реальному человеку с использованием цветного изображения с камеры необходимо создать объект Liveness2DEstimator, вызвав метод FacerecService.createLiveness2DEstimator. На данный момент доступны два файла конфигурации:

  • liveness_2d_estimator.xml – первая реализация, не рекомендуется использовать (предназначен только для сохранения обратной совместимости)
  • liveness_2d_estimator_v2.xml – ускоренная и улучшенная версия имеющегося модуля, рекомендуемый вариант

Для получения результата оценки могут использоваться два метода:

  • Liveness2DEstimator.estimateLiveness. Данный метод возвращает объект Liveness2DEstimator.Liveness. Результат будет один из нижеперечисленных:
    • Liveness2DEstimator.Liveness.NOT_ENOUGH_DATA – недостаточно данных для принятия решения
    • Liveness2DEstimator.Liveness.REAL – наблюдаемое лицо принадлежит живому человеку
    • Liveness2DEstimator.Liveness.FAKE – наблюдаемое лицо является фотографией
  • Liveness2DEstimator.estimate. Данный метод возвращает объект Liveness2DEstimator.LivenessAndScore, который содержит слелующие поля:
    • liveness – объект класса/структуры Liveness2DEstimator.Liveness (см. выше)
    • score – вероятность принадлежности лица живому человеку (для liveness_2d_estimator.xml данное поле недоступно, выдается значение 0 или 1 в зависимости от значения атрибута liveness)

Оба метода на выход принимают объект RawSample. Примеры доступны в сэмпле demo (C++/C#/Android).

Примечание: объект LivenessEstimator, который в данный момент присутствует в Face SDK C++/C#/Java API, является устаревшим и не рекомендуется к использованию.

Временные характеристики (мс)

ВерсияCore i7 4.5 ГГц (1 ядро)Google Pixel 3
liveness_2d_estimator.xml250126 (GPU) / 550 (CPU)
liveness_2d_estimator_v2.xml1020

Показатели качества

Набор данныхTAR@FAR=1e-2
CASIA Face Anti-spoofing0.99

Активная (сценарная) проверка

Данный тип оценки принадлежности лица реальному человеку требует от пользователя выполнения определенных действий (т.н. сценария), например, "повернуть голову", "моргнуть" и т.д. Проверка осуществляется через объект VideoWorker на основе потока видео. Более подробное описание представлено в разделе Обработка видеопотока.

Эмоции

Примечание: Определение эмоций лиц на видеопотоке рассматривается в пункте Определение пола, возраста и эмоций раздела Обработка видеопотока.

Для оценки эмоций необходимо создать объект EmotionsEstimator, вызвав метод FacerecService.createEmotionsEstimator. На данный момент имеется только один файл конфигурации – emotions_estimator.xml. При помощи объекта EmotionsEstimator вы можете определить эмоцию лица, вызвав метод EmotionsEstimator.estimateEmotions. Результатом будет вектор с элементами EmotionsEstimator.EmotionConfidence, содержащий эмоции с коэффициентами уверенности.

Пример использования EmotionsEstimator см. в demo.cpp.

Класс FaceAttributesEstimator

Данный класс является универсальным модулем для оценки атрибутов лица. Для получения оценки необходимо вызвать метод FaceAttributesEstimator.estimate(RawSample). Результат оценки – объект Attribute, который содержит в себе следующие атрибуты:

  • score – вероятность наличия у лица требуемого атрибута, значение от 0 до 1 (если выставлено значение -1, то данное поле недоступно для заданного типа оценки)

  • verdict – вероятность наличия у лица требуемого атрибута, логическое значение (true/false)

  • mask – объект класса/структуры FaceAttributesEstimator.FaceAttributes.Attribute, который содержит в себе следующие значения:

    • NOT_COMPUTED – оценка не производилась
    • NO_MASK – лицо без маски
    • HAS_MASK – лицо с маской
  • left_eye_state, right_eye_state – объекты класса/структуры FaceAttributesEstimator.FaceAttributes.EyeStateScore, в котором содержатся атрибут score и структура EyeState со следующими полями:

    • NOT_COMPUTED – оценка не производилась
    • CLOSED – глаз закрыт
    • OPENED – глаз открыт

Определение наличия маски на лице

Для проверки наличия маски на лице необходимо использовать FaceAttributesEstimator совместно с конфигурационным файлом face_mask_estimator.xml. При этом выставляются атрибуты score, verdict, mask в возвращаемом объекте Attribute.

Определение состояния глаз (открыты/закрыты)

Для проверки состояния глаз (открыты/закрыты) необходимо использовать FaceAttributesEstimator совместно с конфигурационным файлом eyes_openness_estimator.xml. При этом выставляются атрибуты left_eye_state, right_eye_state в возвращаемом объекте Attribute.