Оценка лиц
- Пол и возраст
- Качество изображения лица
- Принадлежность лица реальному человеку (2D и 3D)
- Эмоции
- Определение наличия маски на лице
- Определение состояния глаз (открыты/закрыты)
Пол и возраст
Примечание: Определение пола и возраста лиц на видеопотоке рассматривается в пункте Определение пола, возраста и эмоций раздела Обработка видеопотока.
Для оценки пола и возраста необходимо создать объект AgeGenderEstimator
, вызвав метод FacerecService.createAgeGenderEstimator
, передав конфигурационный файл.
На данный момент имеются два файла конфигурации:
age_gender_estimator.xml
- первоначальная реализация интерфейса оценки пола и возраста AgeGenderEstimatorage_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
– первоначальная реализация интерфейса оценки качества QualityEstimatorquality_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.xml | 250 | 126 (GPU) / 550 (CPU) |
liveness_2d_estimator_v2.xml | 10 | 20 |
Показатели качества
Набор данных | TAR@FAR=1e-2 |
CASIA Face Anti-spoofing | 0.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
.