Определение пола и возраста людей с помощью Raspberry Pi и OpenCV


В данной статье мы рассмотрим использование библиотеки OpenCV и моделей глубокого обучения (Deep Learning) в плате Raspberry Pi для точного определения пола и возраста изображения человека, получаемого из видео потока реального времени. Модели глубокого обучения для определения пола и возраста человека, которые мы будем использовать в нашем проекте, были разработаны учеными Levi и Hassner в 2015 году. Их статью, описывающую данные модели, вы можете прочитать по следующей ссылке (на английском языке).

Внешний вид проекта определения пола и возраста человека с помощью Raspberry Pi и OpenCV

Наш проект будет состоять из двух основных шагов (этапов):

  1. Обнаружение лиц людей в видео потоке реального времени.
  2. Извлечение области, существенной для анализа лица (Region of Interest, ROI) и использование на ней алгоритмов для определения пола и возраста человека.

Определяемый пол в нашем проекте будет ‘Male’ (мужской) или ‘Female’ (женский), а возраст мы будем определять в одном из следующих диапазонов: (0 – 2), (4 – 6), (8 – 12), (15 – 20), (25 – 32), (38 – 43), (48 – 53), (60 – 100).

Также на нашем сайте вы можете посмотреть другие проекты, в которых библиотека OpenCV использовалась в плате Raspberry Pi для обработки изображений:

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. Камера для Raspberry Pi (купить на AliExpress).

Установка OpenCV на Raspberry Pi

Перед установкой OpenCV и других необходимых пакетов обновите программное обеспечение Raspberry Pi до последней версии с помощью команды:

Затем используйте следующие команды, чтобы установить пакеты, необходимые для последующей установки библиотеки OpenCV.

После этого установите OpenCV на Raspberry Pi с помощью установщика pip:

Объяснение программы для Raspberry Pi для распознавания пола и возраста человека

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе мы импортируем OpenCV и библиотеку для математических вычислений.

Затем мы запрограммируем функцию highlightFace() для определений координат лица человека. В первых трех строках кода этой функции мы получим пустую копию кадра (frame), с помощью которой мы определим высоту и ширину кадра. Далее мы сконструируем blob (Binary Large Object – большой двоичный объект) и пропустим его через нейронную сеть для обнаружения лица. После этого в цикле по обнаруженным лицам мы извлечем координаты этих лиц, которые мы будем затем использовать для рисования ограничивающих прямоугольников вокруг лиц.

В следующих строках кода мы укажем пути к моделям обнаружения лиц, определения пола и возраста.

Далее укажем диапазоны определяемых возрастов и список определяемых полов (мужской, женский).

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

После этого инициализируем видео поток (video stream) и пробудим модуль камеры "ото сна".

Далее, внутри цикла, мы будем извлекать кадры из видео потока и вызывать функцию highlightFace() с параметрами faceNet и frame. Возвращаемые функцией результаты будут сохраняться в переменных resultimg и faceboxes.

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

Далее мы будем пропускать этот большой двоичный объект (blob) через модель определения пола и получать уровень доверия для двух классов - Male & Female. Для какого класса уровень доверия будет больше, тот и будет определенным на изображении полом человека.

Далее мы осуществим такую же процедуру с определением возраста человека.

Теперь, когда у нас есть результаты определения пола и возраста, мы добавим их в результирующее изображение с помощью функции cv2.putText() и отобразим их с помощью функции imshow().

Тестирование работы проекта

Перед тем, как запускать программу проекта на выполнение, подключите к плате Raspberry Pi модуль камеры как показано на следующем рисунке.

Подключение модуля камеры к плате Raspberry Pi

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

Тестирование работы проекта по определению пола и возраста людей

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы на Python

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
848 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *