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

Оценка лиц

Пол и возраст

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

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

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

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

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

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

Note: Оценка пола может выполняться через API процессинг-блоков, см. Оценка пола.

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

В настоящий момент существует два интерфейса для оценки качества: 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 – ускоренная и улучшенная версия имеющегося модуля, рекомендуемый вариант
  • liveness_2d_estimator_v3.xml – оценка с применением нескольких дополнительных проверок, например, присутствие лица в кадре, фронтальность лица и качество изображения.

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

  1. Liveness2DEstimator.estimateLiveness. Этот метод возвращает объект Liveness2DEstimator.Liveness.

    1.1. Использование конфигураций liveness_2d_estimator.xml и liveness_2d_estimator_v2.xml позволяет получить следующие результаты оценки:
    Liveness2DEstimator.Liveness.NOT_ENOUGH_DATA – Not enough data to make a decision.
    Liveness2DEstimator.Liveness.REAL – The observed person belongs to a living person.
    Liveness2DEstimator.Liveness.FAKE – The observed face is taken from a photo.

    1.2. Использование конфигурации liveness_2d_estimator_v3.xml позволяет получить расширенные результаты оценки:
    Liveness2DEstimator.Liveness.REAL - The observed person belongs to a living person.
    Liveness2DEstimator.Liveness.FAKE - The observed face is taken from a photo.
    Liveness2DEstimator.Liveness.IN_PROCESS - Liveness estimation can not be done.
    Liveness2DEstimator.Liveness.NO_FACES - There is no faces on the input image.
    Liveness2DEstimator.Liveness.MANY_FACES - There are more than one face on the input image.
    Liveness2DEstimator.Liveness.FACE_OUT - Observed face is out of the input image boundaries.
    Liveness2DEstimator.Liveness.FACE_TURNED_RIGHT - Observed face is not frontal and turned right.
    Liveness2DEstimator.Liveness.FACE_TURNED_LEFT - Observed face is not frontal and turned left.
    Liveness2DEstimator.Liveness.FACE_TURNED_UP - Observed face is not frontal and turned up.
    Liveness2DEstimator.Liveness.FACE_TURNED_DOWN - Observed face is not frontal and turned down.
    Liveness2DEstimator.Liveness.BAD_IMAGE_LIGHTING - Input image have bad lightiwSong conditions.
    Liveness2DEstimator.Liveness.BAD_IMAGE_NOISE - Input image is too noisy.
    Liveness2DEstimator.Liveness.BAD_IMAGE_BLUR - Input image is too blurry.
    Liveness2DEstimator.Liveness.BAD_IMAGE_FLARE - Input image is too flared.

2.Liveness2DEstimator.estimate. Этот метод возвращает объект Liveness2DEstimator.LivenessAndScore содержащий следующие поля:

  • liveness - объект класса/структуры Liveness2DEstimator.Liveness (см. выше).
  • score – числовое значение в диапазоне от 0 до 1, выражающее вероятность принадлежности лица реальному человеку (для liveness_2d_estimator.xml только 0 или 1).

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

Примечание: Оценка принадлежности лица живому человеку может выполняться через API процессинг-блоков, см. 2D RGB оценка принадлежности лица реальному человеку.

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

Версия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 - позволяет получить оценку эмоционального состояния в четырех проявлениях: happy (счастливое), surprised (удивленное), neutral (нейтральное), angry (сердитое).
  • emotions_estimator_v2.xml - позволяет оценить семь эмоциональных состояний лица: happy (счастливое), surprised (удивленное), neutral (нейтральное), angry (сердитое), disgusted (отвращение), sad (грустное), scared (испуганное).

При помощи объекта EmotionsEstimator вы можете определить эмоцию лица, вызвав метод EmotionsEstimator.estimateEmotions. Результатом будет вектор с элементами EmotionsEstimator.EmotionConfidence, содержащий эмоции с коэффициентами уверенности.

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

Примечание: Оценка эмоций может выполняться через API процессинг-блоков, см. Оценка эмоций.

Класс 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.

Улучшенный алгоритм проверки маски на лице, доступен в файле конфигурации "face_mask_estimator_v2.xml", на данный момент доступен только в 64-разрядной системе Windows x86 или 64-разрядной системе Linux x86.

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

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