Определение возраста, пола и эмоций
В этом туториале Вы узнаете, как определить возраст, пол и эмоции лица с использованием Face SDK. Результат будет отображаться рядом с задетектированным лицом. Предполагается, что у вас есть готовый проект с детекцией лиц на видеопотоке или на изображении. Пример детекции и получения информации о лице на видеопотоке см. в туториале Детекция и трекинг лиц на видеопотоке. В данном туториале мы рассматриваем определение возраста, пола и эмоций лица на изображении.
Готовый демо-проект вы можете найти в дистрибутиве Face SDK: examples/tutorials/age_gender_and_emotions
#
Определяем пол и возраст- Укажем путь до изображения в поле
QImage image
. Зададим параметры надписей с информацией о поле, возрасте и эмоциях (размер 15, полужирный шрифт “Arial”).
main.cpp
- Зададим отступ
margin_from_rect
между ограничивающим прямоугольником лица и текстом с информацией о лице. Также зададим расстояниеtext_element_position
между элементами “возрастная группа”, “возраст”, “пол”, “эмоция”. Указанные элементы отображаются справа от лица друг под другом.
main.cpp
- Используя метод
pbio::FacerecService::createAgeGenderEstimator
создаем объектAgeGenderEstimator
для определения пола и возраста. При вызове этого метода необходимо указать конфигурационный файлage_gender_estimator.xml
.
main.cpp
- Определяем начальную точку
base_point
для отображения информации о поле, возрасте и эмоции. Для этого получаем ограничивающий прямоугольникrectangle
из объектаRawSample
, который хранит данные о лице, и рассчитываем точку, учитывая отступmargin_from_rect
.
main.cpp
- Определяем пол и возраст лица (
*sample
), используя методpbio::AgeGenderEstimator
. Отображаем возрастную группу лица, исходя из его возраста. На данный момент в Face SDK доступны четыре возрастные группы:
- Kid (до 18 лет),
- Young (18-37 лет),
- Adult (37-55 лет),
- Senior (55 лет и более).
Возрастная группа берется из перечисления pbio::AgeGenderEstimator::Age
, результат записывается в переменную age_group_text
. Используя метод painter.drawText
, выводим надпись с возрастной группой. Надпись будет располагаться на первой строчке справа от начальной точки base_point
.
main.cpp
- Отображаем возраст в годах на второй строчке (ниже возрастной группы).
main.cpp
- Отображаем пол на третьей строчке (ниже возраста).
main.cpp
- Запускаем проект. На данном этапе справа от найденного лица будет отображаться информация о возрастной группе, возрасте и поле.
#
Определяем эмоции- Используя метод
pbio::FacerecService::createEmotionsEstimator
, создаем объектEmotionsEstimator
для определения эмоций. При вызове этого метода необходимо указать конфигурационный файлemotions_estimator.xml
.
main.cpp
- При помощи метода
pbio::EmotionsEstimator::estimateEmotions
определяем эмоцию найденного лица (*sample
) и соответствующий коэффициент уверенности (от 0 до 1). В перечисленииpbio::EmotionsEstimator::Emotion
указаны все доступные эмоции. На данный момент Face SDK определяет четыре эмоции:
- Neutral (нейтральный),
- Happy (счастливый),
- Angry (злой),
- Surprise (удивленный).
Каждой эмоции присваивается индекс от 0 до 3. Отобразим эмоции в виде четырех столбиков разного цвета (синий, зеленый, красный, желтый) с соответствующими надписями (Neutral, Happy, Angry, Surprise). Чем больше коэффициент уверенности для эмоции, тем длиннее будет столбик в сравнении с тремя другими, что наглядно покажет, какая эмоция преобладает. Все параметры эмоций сохраняем в словарь emotions_params
.
main.cpp
- Зададим начальную точку
emotions_base_point
, от которой будут рисоваться столбики с эмоциями (справа от ограничивающего прямоугольника лица под надписями с полом, возрастом и возрастной группой). Также укажем размер столбиков с эмоциямиbar_base_size
и отступbar_offset
от названий эмоций.
main.cpp
- Отображаем надписи и столбики с эмоциями. В цикле рассчитываем начальную точку
emotion_row_base_point
для отображения информации для каждой эмоции и начальную точку названия эмоцииtext_base_point
. Затем получаем название эмоции из словаря и отображаем надписьemotion_label
. Отображаем столбик для каждой эмоции: определяем начальную точку для отрисовки столбикаbar_base_point
и рассчитываем длину столбикаbar_size
, умножая значениеbar_base_size.width
на коэффициент уверенности. Окрашиваем столбики в соответствии с цветом каждой эмоции из словаря.
main.cpp
- Запускаем проект. Справа от ограничивающего прямоугольника лица будет отображаться информация об эмоциях (длины столбиков визуализируют вероятностное распределение в пространстве описанных эмоций).