Как установить face recognition python на windows

Обновлено: 05.07.2024

Детекция (т.е. нахождение) и распознавание лиц — очень популярная задача в современном мире: в метро уже давно следят за нашими передвижениями, а в загородных домах все чаще ставят «умные дверные глазки».

Так уж сложилось, что сейчас уже нельзя просто написать программу для распознавания лиц и присвоить себе должность Senior Data Scientist — таких знаний требуют даже от начинающих специалистов.

Если Вы еще не игрались с распознаванием лиц, но хотите развиваться в области нейронных сетей (ну или просто Вам интересна эта область), то эксперты IT Resume подготовили для вас этот гайд — давайте вместе пройдем все шаги:

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

Для работы нам потребуется:

    — среда для работы с Python в браузере. Они еще доступ к GPU дают (а для нейронных сетей это очень нужно).
  1. И все 🙂

Этап 1. Подключение модулей

Перед тем, как начать работу, давайте сменим среду выполнения на «Ускорение GPU». В будущем нам это понадобится для работы нейронной сети. Для этого в Google Colab нажимаем «Среда выполнения» → «Сменить среду выполнения» → «Аппаратный ускоритель GPU».

3–5 декабря, Онлайн, Беcплатно

Теперь подключим необходимые библиотеки. В Colab большинство библиотек уже установлено, поэтому нам осталось их только импортировать:

  • cv2 — для загрузки и обработки изображений;
  • dlib — для детекции лиц;
  • numpy — для работы с матрицами.

Помимо этого, с помощью команды pip install face_recognition мы устанавливаем библиотеку face_recognition — с ее помощью мы будем обрабатывать лицо нейронной сетью.

Примечание Вообще сделать полную обработку можно всего за несколько строчек кода, потому что в библиотеке face_recognition многие процессы (например, детекция лиц) уже завернуты в функции. Но мы намеренно некоторые вещи будем делать «с нуля», чтобы вы лучше во всем разобрались.

Этап 2. Первичная настройка

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

Начнем с настройки детектора лиц. Сначала скачиваем файл с готовой моделью с помощью команды wget (да, именно этой командой Цукерберг запустил Фэйсбук в фильме Социальная сеть) и распаковываем файл в формат .dat.

Далее создаем детектор лиц и передаем скачанную модель в shape_predictor , который будет предсказывать ключевые точки человеческого лица — контур головы, глаза, нос и рот.

Отлично, теперь мы готовы переходить к содержательной части — обработке фотографий.

Этап 3. Загрузка и обработка фотографий

Перед тем, как загружать фотографию в переменную Python, ее надо загрузить в файловое хранилище Google Colab. Для этого достаточно нажать на иконку Папки на левом сайдбаре и выбрать Upload.


Мы, например, загрузим фотографию Конора МакГрегора.


Отлично, теперь надо «прочитать» изображение в переменную Python. Это можно сделать несколькими способами, но нам удобнее представить изображение сразу в виде матрицы. Это можно сделать с помощью функции imread из модуля cv2 .

Если вы загружаете цветную картинку, то «матрица» будет иметь размерность 3*height*width , где 3 — количество цветовых каналов (RGB), а width и height — размерность картинки в пикселях. Проверить это можно с помощью метода shape . Каждое число в матрице — значение пикселя по конкретному цветовому каналу.

Кстати говоря, если вы хотите посмотреть на загруженную картинку, то вам нужно:

  1. Импортировать команду cv2_imshow : from google.colab.patches import cv2_imshow .
  2. Передать в функцию cv2_imshow нужную картинку: cv2_imshow(img) .


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

Поэтому давайте переведем нашу цветную картинку в черно-белую:


Теперь переходим к следующему этапу — детекция лица.

Этап 4. Детекция лица

Детектор лиц у нас уже настроен, поэтому можем переходить непосредственно к детекции. Делать это будем в 2 этапа:

  1. Ищем прямоугольники, в которых находятся лица.
  2. По этим прямоугольникам предсказываем контуры и ключевые точки лица.

С помощью detector мы получим координаты нужного прямоугольника. Если лиц несколько, то и наборов точек будет несколько. Чтобы выбрать конкретное лицо, нужно указать индекс (в нашем случае — ноль).

Чтобы посмотреть на результат, можно нарисовать рамку вокруг лица с помощью метода rectangle и посмотреть фото с помощью cv2_imshow . Только будьте осторожны — рамка останется на фото навсегда, так что лучше потом загрузить изображение заново.


Теперь по найденным квадратам нужно «предсказать» ключевые точки лица. Для этого используем predictor , а потом извлекаем координаты точек.

  • лямбда-функции;
  • функцию map ;
  • распаковку.

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


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

Этап 5. Обработка нейронной сетью

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

Итак, получить итоговый вектор очень просто — достаточно вызвать функцию face_encodings .

Примечание Обратите внимание, что в качестве аргументов мы передали только изображение, а полученные ранее ключевые точки мы не использовали. Причина очень проста — функция face_encodings делает все те же самые действия, которые мы с вами проделали вручную ранее для понимания процесса «изнутри».

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

Однако, от этого вектора нам толку мало — чтобы оценить эффективность «нейросетевых технологий», нужно сравнить два вектора для двух разных фотографий. Давайте немного поэксперементируем — будем подавать разные фото на вход и сравнивать с нашим изначальным фото МакГрегора.

Этап 6. Сравнение векторов

Чтобы сравнивать лица между собой, мы будем действовать следующим образом:

  1. Загружаем новое фото и производим обработку, которую уже разобрали на предыдущих этапах. На выходе получаем вектор.
  2. Сравниваем вектора между собой.
  3. На основании расстояния принимаем решение — один и тот же человек на фото или разные.

Встает вопрос — что значит «сравнить вектора»? Самый простой способ — посчитать расстояние в некоторой метрике. Мы выберем обычную евклидову метрику. Вычислять ее без лишнего кода нам позволит функция pdist из scipy.spatial.distance .

Итак, сначала загрузим еще одну фотографию Конора.


Сохраняем полученный вектор для первой фотографии в vector1 , для второй — в vector2 и вычисляем расстояние:

Получаем ответ — 0,48. Это достаточно близкое расстояние, из чего делаем вывод, что это один и тот же человек. Сеть справилась отлично!

Ну хорошо, еще пару экспериментов — давайте возьмем снова Конора, но усложним задачу — пусть он будет в очках.


Результат — 0,56. Снова в яблочко (разработчик библиотеки face_recognition рекомендует придерживаться порога 0,6 — если больше 0,6, то это другой человек).

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


Снова проводим уже известную процедуру и ответ… — 0.72. По утвержденному ранее порогу, делаем вывод: Хабиб — не Конор. Сеть снова нас не подвела, и мы со спокойной душой можем переходить к более сложным проектам.

Эпилог

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

Вот несколько вещей, которые мы рекомендуем вам сделать, чтобы прокачаться в области Computer Vision (компьютерное зрение):

  • Научитесь выстраивать процесс распознавания с нуля, без использования оберток (чем является библиотека face_recognition ). Начните хотя бы с изучения исходников этой библиотеки на GitHub — там ничего сверхсложного нет.
  • Попробуйте разные нейронные сети. Погуглите state-of-the-art решения и посмотрите — чем будет различаться результат.
  • Изучите структуру нейронных сетей (например, сверточных) с математической точки зрения. Это можно сделать с помощью многочисленных туториалов и официальной документации библиотек (например, PyTorch).

Есть много и других точек роста, но начните с этих — остальные мысли придут в процессе 🙂

Добрый день! Только начинаю пользоваться PyCharm'ом, но это просто .
Подскажите пожалуйста как установить библиотеки? Нажимаю установить face-recognition в настройках, он выдаёт ошибку:
Command errored out with exit status 1: 'C:\Users\Vlad\PycharmProjects\face_rec\venv\Scripts\python. exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Vlad\\AppData\\Local\\Temp\\pip-install-80sebdi0\\dlib_f328f3bba7fe49da87661b5e8a036595\\setup.py'"' "'; __file__='"'"'C:\\Users\\Vlad\\AppData\\Local\\Temp\\pip-install-80sebdi0\\dlib_f328f3bba7fe49da87661b5e8a036595\\setup.py'"' "';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Vlad\AppData\Local\Temp\pip-record-k8dq_msn\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Vlad\PycharmProjects\face_rec\venv\include\site\py thon3.8\dlib' Check the logs for full command output.

Нажимаю установить cv2, он выдаёт

ERROR: Could not find a version that satisfies the requirement cv2
ERROR: No matching distribution found for cv2

Как их всё-таки установить? Ошибки могут быть связанны с тем, что у меня пробная версию PyCharm'а?

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

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

В Pycharm ставятся не все библиотеки
Периодически сталкиваюсь с тем, что в Pycharm не ставится какая-нибудь библиотека. На данный.

Ошибка установки библиотеки в PyCharm
Всем добрый день, не пойму с одной проблеммой, я новичок в языке программирования Python, ранее.

Подключение библиотеки Telebot к PyCharm
Вычитал статейку по созданию бота на API телеграма, установил все по jописанной там инструкции и.

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

Содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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


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

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

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

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Сравнение лиц

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


Итак, мы передали в сеть две фотографии, одна Владимира Путина, другая Джорджа Буша. Для изображений Буша у нас были вектора (эмбеддинги), а для Путина ничего не было. Таким образом, когда мы сравнили эмбеддинг нового изображения Буша, он был близок с уже имеющимися векторам,и и мы распознали его. А вот изображений Путина в нашей базе не было, поэтому распознать его не удалось.

Что такое OpenCV?

Компьютерное зрение работает как мост между компьютерным программным обеспечением и визуальной картиной вокруг нас. Оно дает ПО возможность понимать и изучать все видимое в окружающей среде.

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

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

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

Основные преимущества OpenCV :

  • имеет открытый программный код и абсолютно бесплатна
  • написана на C/C++ и в сравнении с другими библиотеками работает быстрее
  • не требует много памяти и хорошо работает при небольшом объеме RAM
  • поддерживает большинство операционных систем, в том числе Windows, Linux и MacOS.

Установка

Здесь мы будем рассматривать установку OpenCV только для Python. Мы можем установить ее при помощи менеджеров pip или conda (в случае, если у нас установлен пакет Anaconda).

1. При помощи pip

При помощи pip процесс установки может быть выполнен с использованием следующей команды:

2. Anaconda

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

Распознавание лиц с использованием Python

В этой части мы реализуем распознавание лиц при помощи Python и OpenCV. Для начала посмотрим, какие библиотеки нам потребуются и как их установить:

  • OpenCV
  • dlib
  • Face_recognition

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

Библиотека face_recognition , созданная Адамом Гейтгеем, включает в себя функции распознавания лиц dlib и является по сути надстройкой над ней. С ней очень легко работать, и мы будем ее использовать в нашем коде. Имейте ввиду, что ее нужно устанавливать после библиотеки dlib .

Для установки OpenCV наберите в командной строке:

Далее, для установки библиотеки face_recognition наберите в командной строке следующее:

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

Первый файл будет принимать датасет с изображениями и выдавать эмбеддинг для каждого лица. Эти эмбеддинги будут записываться во второй файл. В третьем файле мы будем сравнивать лица с уже существующими изображениями. А затем мы сделаем тоже самое в стриме с веб-камеры.

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

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

Затем разместите датасет в вашей рабочей директории, то есть там, где выбудете создавать собственные файлы.

Сейчас мы сохранили все эмбеддинги в файл под названием face_enc . Теперь мы можем их использовать для распознавания лиц на изображениях или во время видеострима с веб-камеры.

Распознавание лиц во время прямой трансляции веб-камеры

Вот код для распознавания лиц из прямой трансляции веб-камеры:

В данном примере для обнаружения лиц использовался метод cv2.CascadeClassifier() из библиотеки OpenCV. Но вы с таким же успехом можете пользоваться и методом face_recognition.face_locations() , как мы уже делали в предыдущем примере.

Распознавание лиц на изображениях

Код для обнаружения и распознавания лиц на изображениях почти аналогичен тому, что вы видели выше. Убедитесь в этом сами:

Результат:



На этом наша статья подошла к концу. Мы надеемся, что вы получили общее представление о задачах распознавания лиц и способах их решения.

Знаете ли вы, что каждый раз, когда вы загружаете фотографию в Facebook, платформа использует алгоритмы распознавания лиц для идентификации людей на этом изображении? Или что определенные правительства во всем мире используют технологию распознавания лиц для выявления и поимки преступников? Мне не нужно говорить, что теперь вы можете разблокировать смартфоны своим лицом!

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


В этой статье мы собираемся сделать именно это. Сначала мы разберемся с внутренними принципами распознавания лиц, а затем возьмем простой пример и реализуем его в Python. К концу статьи вы создадите свою самую первую модель распознавания лиц!

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

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

  • Высота/ширина лица.
  • Высота и ширина могут быть ненадежными, поскольку изображение может быть масштабировано по разному. Однако даже после изменения масштаба неизменными остаются отношения - отношение высоты лица к ширине лица не изменится.
  • Цвет лица.
  • Ширина других частей лица, таких как губы, нос и т. д.
  • Высота лица (см)
  • Ширина лица (см)
  • Средний цвет лица (R, G, B)
  • Ширина губ (см)
  • Высота носа (см)

По сути, учитывая изображение, мы можем отобразить различные объекты и преобразовать их в вектор объектов, например:

Итак, наше изображение теперь представляет собой вектор, который можно представить в виде (23.1, 15.8, 255, 224, 189, 5.2, 4.4). Конечно, на изображении может быть множество других черт (например, цвет волос, волосы на лице, очки и т. l.). Однако, для примера, давайте рассмотрим только эти 5 простых признаков.

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


Как видите, у нас есть такие знаменитости, как Барак Обама, Билл Гейтс, Джефф Безос, Марк Цукерберг, Рэй Далио и Шахрукх Кхан.


Примечание: все вышеперечисленные изображения были взяты из изображений Google.

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

Существует удивительно простая библиотека Python, которая инкапсулирует все, что мы рассматривали выше - создание векторов признаков из лиц и умение различать лица. Эта библиотека Python называется face_recognition и в глубине использует dlib - современный фреймворк C ++, который содержит несколько алгоритмов машинного обучения, которые помогают в написании сложных приложений на C ++.

Библиотека face_recognition в Python может выполнять большое количество задач:

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

На самом деле, есть также руководство по установке библиотеки face_recognition:

Перед установкой face_recognition вам также необходимо установить dlib. Вы можете найти инструкции по установке dlib здесь:

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


Читайте также: