Оценка лиц
- Пол и возраст
- Качество изображения лица
- Принадлежность лица реальному человеку (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.