Computer vision, Machine Learning

Определяем пол и возраст по фото

Время прочтения: 4 мин.

В практике внутреннего аудита встречаются задачи, при которых необходимо осуществить проверку по выявлению некорректного ввода данных о клиенте. Одной из таких проблем может быть несоответствие введенных данных и фото клиента, в момент оформления продукта.

            К примеру, имеется следующая информация: пол, возраст и ссылка на фото.  Для проверки соответствия воспользуемся библиотекой py-agender языка Python.

Работа библиотеки осуществляется в два этапа. На первом, opencv определяет расположение лица на фото. На втором, нейронная сеть архитектуры EfficientNetB3, которая обучена на наборе данных UTKFace DataSet, определяет пол и возраст обладателя лица на фото.

Для начала импортируем необходимые библиотеки:

import cv2
from pyagender import PyAgender

Создадим объект детектора пола и возраста:

agender = PyAgender()

С помощью opencv загрузим фото:

img = cv2.imread("habensky.jpeg")

Далее определим характеристики лица с помощью метода detect_genders_ages объекта agender:

face_info = agender.detect_genders_ages(img)

где переменная face_info содержит следующую информацию:

[{'left': 0,
  'top': 5,
  'right': 299,
  'bottom': 299,
  'width': 299,
  'height': 294,
  'gender': 0.0075379927,
  'age': 41.585840644804094}]

Здесь параметры (‘left’, ‘top’, ‘right’, ‘bottom’, ‘width’, ‘height’) характеризуют расположение лица на фото. Параметр gender характеризует принадлежность к определенному полу, где 0 – соответствует мужчине, 1 – женщине. Т.е. после обработки изображений, по порогу 0.5 разделяем обработанную выборку на мужчин и женщин.

Алгоритм определил, что на данном изображении представлен мужчина (значение пола очень близко к нулю: 0.0075379927), а также, что на этом фото ему 41 с половинкой годика (41.5858), не знаю сколько Константину Хабенскому лет на этом фото, но думаю алгоритм близок к истине.

Хороший пример, четкое изображение и довольно впечатляющий результат. Однако, когда начинаешь применять алгоритм к реальным данным, все не так радужно, как хотелось бы. И дело здесь не сколько в алгоритме, а в качестве исходных данных.

В моем случае это был набор из 1542 изображений с разрешением 300х300. Для 64 изображений алгоритм не смог определить характеристики лица. Основная причина – плохая освещенность в момент фотофиксации (лиц почти не видно). Для 1478 изображений медианное значение ошибки определения возраста составило 4,96 года. На рисунке ниже представлено распределение ошибки:

Для 8.5% изображений (125 из 1478) алгоритм совершил ошибку в определении пола человека. Из них в 122 случаях алгоритм ошибочно принял женщину за мужчину. Повторюсь, не стоит винить алгоритм во всех случаях. В большинстве ошибочных примеров встречалось много лиц в очках, которые могут скрывать некоторые особенности лица. На рисунке ниже представлено распределение возраста для набора данных UTKFace DataSet:

Можно заметить, что большая часть набора данных содержит изображения людей c возрастом 20-40 лет. Несмотря на это алгоритм чаще всего ошибался именно для указанного интервала, т.е скорее всего ошибки связаны с особенностью набора данных, для которого был применен алгоритм. На рисунке ниже представлено распределение возраста людей, на которых алгоритм ошибся:

Py-Agender – интересный инструмент, который может помочь автоматизировать ряд рутинных задач или по крайней мере уменьшить размер выборки для ручного анализа. В статье представлена оценка для специфичного набора данных, возможно в вашем случае алгоритм сработает более результативно.

Советуем почитать