Создаем эффект змеиных глаз при помощи Python

Snapchat, Instagram, а теперь и Apple практически одновременно выпустили видео-эффекты с наложением на лица в реальном времени.

Создаем эффект змеиных глаз при помощи Python

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

Инструменты для определения лиц в Python

Создаем эффект змеиных глаз при помощи Python

Мы воспользуемся двумя самыми главными и удивительными библиотеками обработки изображений для Python 3: Dlib и OpenCV.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

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

Установка Dlib – это достаточно просто, спасибо за доступность на большей части платформ.

Однако для OpenCV установка несколько сложнее. Если вы работаете в MacOS, в интернете легко можно найти информацию по установке OpenCV. Это касается и Ubuntu. Пользователи Windows могут воспользоваться неофициальным источником.

После установки OpenCV, можете расслабиться до конца статьи ;)

Архитектура Эффекта Линз

Создаем эффект змеиных глаз при помощи Python

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

После получения частоты кадров, мы конвертируем кадр видео веб-камеры в черно-белый, затем передадим его Dlib для определения лица.

get_frontal_face_detector возвращает набор ограненных прямоугольников для каждого обнаруженного лица на изображении. Таким образом мы можем использовать это как модель (в нашем случае, shape_predictor_68_face_landmarks на Github), и получить набор из 68-и точек с нашей лицевой ориентацией.

Из точек возле глаз мы можем сформировать полигон аналогичной формы в новом канале.

Таким образом, выполняем bitwise_and и копируем наши глаза из кадра.

Далее создаем объект для отслеживания n числа позиций, в которых были наши глаза. Функция OpenCV под названием boundingRect дает нам базовую координату x и y для рисования.

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

Для запуска своих Python приложений вам нужно воспользоваться провайдером firstvds который предоставляет качественные сервера и быструю тех. поддержку. FirstVDS предоставляет отличные VPS для начинающих (от 90 руб в месяц) где вы сможете тестировать свои Python приложения на реальном сервере. Для более больших проектов, FirstVDS предоставляет выделенные сервера по лучшей цене на русском рынке.

Пишем Код!

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

Запускаем код!

Для запуска этого кода, нам нужно скачать предсказатель dlib, работающий с 68-и точками. Мы можем скачать его, после чего извлечь в нашу папку, в которой хранится наша программа Python. Из нее мы можем выполнить следующее:

Мы должны сделать наш кадр движущимся. Здесь, нажав на клавишу “S» мы запускаем эффект змеиных глаз. Нажав “R”, мы записываем кадры на диск, для сохранения в качестве цельного видео в будущем. Если вы хотите сделать это, вам нужно для начала создать папку под названием image_seq в той же папке, в которой лежит ваша программа Python.

Пример работы

Исходный код на Github: https://github.com/burningion/snapchat-lens-effect-in-python

Вторая часть:

Подведем итоги

Если вам понравилась данная статья, и если вы охотитесь за годными и креативными статьями о программировании, вы в правильном месте! Буду благодарен, если вы разместите этот текст в соц.сетях.