Определяем возраст и пол человека используя нейронную сеть

Определяем возраст и пол человека по лицу

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

Если вам интересны такие темы и вы хотите и дальше видеть новые публикации и развитие данного модуля, то просим вас поставить нам звездочку ⭐ на Github!

Определяем возраст и пол человека используя нейронную сеть

Ссылка на модульhttps://github.com/mowshon/age-and-gender

Содержание статьи:

После анализа доступных библиотек, мы нашли интересный репозиторий на Github: https://github.com/davisking/dlib-models

Автор Davis E. King @davisking, он же создатель замечательной библиотеки dlib, предоставил уже натренированную модель на несколько тысяч лиц людей. Но, вот беда… код написан на C++ а рабочей альтернативы на Python мы не нашли.

Модель для определения формы лица

Модель для определения формы лица (shape_predictor_5_face_landmarks.dat)

Это 5-точечная модель, которая определяет уголки глаз и дно носа. Она обучена на наборе данных из 5-точечных ориентиров от 7198 лиц людей. Автор @davisking создал этот набор данных, загружая изображения из Интернета и комментируя их с помощью инструмента imglab от dlib.

Ссылка на скачивание: https://github.com/davisking/dlib-models/blob/master/shape_predictor_5_face_landmarks.dat.bz2


Определяем возраст человека в Python

Модель для предсказывания возраста (dnn_age_predictor_v1.dat)

Первоначальный источник для создания модели пришел из документа Z. Qawaqneh: «Глубокая сверточная нейронная сеть для оценки возраста на основе модели VGG-Face». Тем не менее, наши исследования привели нас к значительным улучшениям в CNN модели, что позволило нам оценить возраст человека, превосходящего существующие результаты, с точки зрения  точности результата.

Таким образом, эта модель является определителем возраста, использующим архитектуру ResNet-10, и обучается с использованием частного набора данных из примерно 110 тыс. различных  изображений людей с комментарием в виде их возраста.

Определяем возраст женщины в Python

Эта модель прогнозирования возраста предоставляется компанией Cydral Technology бесплатно и распространяется по лицензии Creative Commons Zero v1.0 Universal.

Ссылка на скачивание: https://github.com/davisking/dlib-models/blob/master/age-predictor/dnn_age_predictor_v1.dat.bz2


Определяем пол человека по лицу

Модель для определения пола человека по лицу (dnn_gender_classifier_v1.dat)

Эта модель является гендерным классификатором, обученным с использованием частного набора данных из примерно 200 000 различных изображений лиц, и она была сгенерирована в соответствии с определением сети и настройками, заданными в «Минималистической модели на основе CNN для прогнозирования пола по изображениям лиц«. Даже если набор данных, использованный для обучения, отличается от того, который использовался Г. Антиповым, результаты классификации по оценке LFW в целом схожи (± 97,3%).

Эта гендерная модель предоставляется бесплатно компанией Cydral Technology и распространяется по лицензии Creative Commons Zero v1.0 Universal.

Ссылка на скачивание: https://github.com/davisking/dlib-models/blob/master/gender-classifier/dnn_gender_classifier_v1.dat.bz2

Перенос C++ кода на Python

Изначально, @davisking предоставил два C++ файла которые показывали как работать с натренированными им моделями:

Они выводили результат сразу в консоль, но вот использовать код в рабочем проекте даже на C++ было крайне неудобно. Используя pybind11 мы имеем возможность применить код на C++ в нашем коде на Python. Мы не будем акцентироваться долго на pybind11, но если вы хотите ознакомиться с ним, то рекомендуем статью: Создаем С++ Python расширения с помощью pybind11

Структура С++ класса AgeAndGender

Полный код можно увидеть тут: https://github.com/mowshon/age-and-gender/blob/master/src/main.cpp

  • Метод load_shape_predictor() принимает путь к файлу shape_predictor_5_face_landmarks.dat;
  • Метод load_dnn_gender_classifier() принимает путь к файлу dnn_gender_classifier_v1.dat для загрузки модели гендерной классификации;
  • Метод load_dnn_age_predictor() принимает путь к файлу dnn_age_predictor_v1.dat для загрузки модели предсказывания возраста;
  • Метод predict() принимает два аргумента, первый обязательный в виде матрицы пикселей изображения, второй не обязательный в виде списка из лиц которых удалось найти на изображении.

 Компиляция и установка модуля для определения возраста и пола

Это не обычный модуль которого можно установить без каких либо дополнительных зависимостей. Для удачной компиляции модуля, нам нужно установить:

  • CMake >= 3.14 — кроссплатформенная система автоматизации сборки программного обеспечения из исходного кода;
  • Компилятор gcc или c++.
  • python-dev;
  • setuptools.

Установка age-and-gender на Ubuntu & Debian

Рекомендуем любые новые проекты и тестирование модулей делать в виртуальном окружении, этим самым вы не засорите свой системный интерпретатор ненужными модулями. Первым делом создаем виртуальное окружение и активируем её.

Устанавливаем необходимые зависимости:

Скачиваем файлы с github и выполняем установку:

В папке example есть тестовый файл example.py запустив которого вы увидите как скрипт определил возраст членов семьи Билла Гейтса.

Определение пола и возраста людей из изображения

Пример определения пола и возраста человека в Python

В качестве примера, мы решили протестировать весьма забавный конспирологический спор о двойниках президента Российской Федерации. Мы скачали из интернета изображение с несколькими вариантов клонов В. Путина и предложили нейронной сети определить пол и возраст всех лиц на фото.

Использованные файлы:

  • putin.jpg (файл с предполагаемыми «клонами»)
  • Lemon.ttf (шрифт для Pillow)

Результат применения нейронной сети:

Возраст Путина

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

Онлайн проверка возраста и пола по фотографии

Для того, чтобы протестировать данный модуль, вам не нужно его устанавливать, достаточно воспользоваться ниже предоставленной формой. Загрузите изображение с лицами людей и увидите результат.

Возникла внутренняя ошибка, загрузите только .JPG и .PNG изображения или выберите другой файл.