Как написать программу распознавания лиц на python

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

Что такое обнаружение лиц?

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

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

Существует много алгоритмов обнаружения лиц. Одним из старейших является алгоритм Виолы-Джонса. Он был предложен в 2001 году и применяется по сей день. Чуть позже мы тоже им воспользуемся. После прочтения данной статьи вы можете изучить его более подробно.

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

Урок #1 Python / Распознавание лиц OpenCV

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

Что такое распознавание лиц?

Итак, в создании алгоритмов обнаружения лиц мы (люди) преуспели. А можно ли также распознавать, чьи это лица?

Распознавание лиц — это метод идентификации или подтверждения личности человека по его лицу. Существуют различные алгоритмы распознавания лиц, но их точность может различаться. Здесь мы собираемся описать распознавание лиц при помощи глубокого обучения.

Итак, давайте разберемся, как мы распознаем лица при помощи глубокого обучения. Для начала мы производим преобразование, или, иными словами, эмбеддинг (embedding), изображения лица в числовой вектор. Это также называется глубоким метрическим обучением.

Для облегчения понимания давайте разобьем весь процесс на три простых шага:

Обнаружение лиц

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

Читайте также:
Программу чтобы установить диск на компьютер

Извлечение признаков

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

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

Теперь давайте разберемся, как это помогает в распознавании лиц разных людей.

Распознавание лиц на Python | Определение возраста, эмоций и расы по фотографии лица

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

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

Чтобы определять лица одного и того же человека, сеть будет учиться выводить векторы, находящиеся рядом в векторном пространстве. После обучения эти векторы трансформируются следующим образом:

Здесь мы не будем заниматься обучением подобной сети. Это требует значительных вычислительных мощностей и большого объема размеченных данных. Вместо этого мы используем уже предобученную Дэвисом Кингом нейронную сеть. Она обучалась приблизительно на 3000000 изображений. Эта сеть выдает вектор длиной 128 чисел, который и определяет основные черты лица.

Познакомившись с принципами работы подобных сетей, давайте посмотрим, как мы будем использовать такую сеть для наших собственных данных.

Создание модели распознавания лиц с использованием глубокого обучения на языке Python

Адаптировали статью Файзана Шайха о том, как создать модель распознавания лиц и в каких сферах её можно применять.

Создание модели распознавания лиц с использованием глубокого обучения на языке Python

Елена Борноволокова

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

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

Одна из таких технологий — распознавание лиц. При правильном и этичном использовании эта технология может применяться во многих сферах жизни.

Читайте также:
Как вернуть удаленную программу на Андроид Хуавей

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

Настройка системы: требования к аппаратному и программному обеспечению

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

Я использовал следующие инструменты, которые рекомендую вам:

  • Веб-камера (Logitech C920) для построения модели распознавания лиц в реальном времени на ноутбуке Lenovo E470 ThinkPad (Core i5 7th Gen). Вы также можете использовать встроенную камеру своего ноутбука или видеокамеру с любой подходящей системой для анализа видео в режиме реального времени вместо тех, которые использовал я.
  • Предпочтительно использовать графический процессор для более быстрой обработки видео.
  • Мы использовали операционную систему Ubuntu 18.04 с необходимым ПО.

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

Шаг 1. Настройка аппаратного обеспечения

Проверьте, правильно ли настроена камера. С Ubuntu это сделать просто: посмотрите, опознано ли устройство операционной системой. Для этого выполните следующие шаги:

1. Прежде чем подключить веб-камеру к ноутбуку, проверьте подключенные видеоустройства, напечатав в командной строке ls /dev/video*. В результате выйдет список всех устройств, подключенных к системе.

2. Подключите веб-камеру и задайте команду снова. Если веб-камера подключена правильно, новое устройство будет отражено в результате выполнения команды.

3. Также можете использовать ПО веб-камеры для проверки её корректной работы. В Ubuntu для этого можно использовать программу «Сheese».

Шаг 2. Настройка программного обеспечения

Шаг 2.1. Установка Python

Код, указанный в этой статье, написан с использованием Python (версия 3.5). Для установки Python рекомендую использовать Anaconda – популярный дистрибутив Python для обработки и анализа данных.

Шаг 2.2. Установка OpenCV

OpenCV – библиотека с открытым кодом, которая предназначена для создания приложений компьютерного зрения. Установка OpenCV производится с помощью pip:

pip3 install opencv-python

Шаг 2.3. Установите face_recognition API

Распознавание и обнаружение лиц с использованием Python OpenCV

Распознавание лиц — это современная технология. И сегодня мы собираемся изучить распознавание и обнаружение лиц с помощью библиотеки Python OpenCV.

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

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

Читайте также:
Лучшая программа форматирования sd карт

Как работает распознавание лиц?

Самый популярный способ обнаружения лиц и объектов — использование классификаторов HOG.

HOG — это гистограмма ориентированных градиентов. Суть вопроса заключается в поиске подходящих дескрипторов признаков для изображения, будь то лица или другие объекты.

В 2005 году функции гистограммы ориентированных градиентов (HOG) были реализованы Навнитом Далалом и Биллом Триггсом.

Гистограмма ориентированных градиентов (HOG) — это дескриптор функции, используемый в основном для распознавания объектов при обработке изображений. Дескриптор функции — это представление изображения или фрагмента изображения, которое, извлекая из него ценную информацию, упрощает изображение.

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

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

Поэтому гистограммы градиентных путей используются как свойства этого дескриптора:

HOG лица

Шаги по вычислению дескрипторов HOG для распознавания и обнаружения лиц

Расчет HOG<br></p><p><ol>  <li>Изображение делится на блоки 8х8 ячеек, и для каждого блока 8х8 ячеек измеряется гистограмма градиентов.</li>  <li>Вектор из 9 сегментов (чисел), соответствующих углам от 0 до 180 градусов, в основном представляет собой гистограмму (с шагом 20 градусов).</li>  <li>Значения этих 64 ячеек (8X8) объединяются в эти 9 сегментов и вставляются кумулятивно.</li>  <li>Это в принципе ограничивает 64 значения 9 значениями.</li></ol>

Использование библиотеки face_recognition для обнаружения лиц

Существует библиотека face_recognition, в которой есть оптимизированный код для распознавания лиц.

pip install face_recognition
import PIL.Image import PIL.ImageDraw import face_recognition as fr

Затем я загрузил изображение из Интернета, на котором было много лиц:

Итак, теперь мы можем загрузить указанный выше файл:

img = fr.load_image_file(«/content/boyband.jpg») print(img)

Когда мы запускаем приведенный выше код, мы получаем такой вывод:

array([[[223, 218, 248], [223, 218, 248], [223, 218, 248], . [248, 248, 248], [248, 248, 248], [248, 248, 248]], [[223, 218, 248], [223, 218, 248], [223, 218, 248], . [248, 248, 248], [248, 248, 248], [248, 248, 248]], [[223, 218, 248], [223, 218, 248], [223, 218, 248], . [248, 248, 248], [248, 248, 248], [248, 248, 248]], . [[201, 28, 30], [205, 32, 34], [206, 32, 34], . [160, 14, 15], [179, 18, 23], [185, 18, 25]], [[201, 27, 29], [203, 29, 31], [204, 30, 32], . [152, 8, 8], [171, 12, 16], [181, 14, 21]], [[201, 27, 29], [201, 27, 29], [200, 27, 29], . [150, 8, 7], [167, 13, 15], [180, 15, 21]]], dtype=uint8)

Любое цветное изображение состоит из 3-х каналов: синего, зеленого и красного. Это три матрицы, представленные в приведенном выше массиве. Таким образом, цветное изображение 50 × 50 станет матрицей 50x50x3.

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru