Рубрики
Без рубрики

Программирование фильтров, подобных Snapchat

Узнайте, как программировать и имитировать знаменитые особенности лица Snaphchat, используя Python и Pixlab Rest API. Помечено компьютерным зрением, обнаружением лица, Python, Snapchat.

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

В этом посте мы постараемся вытеснить и ответить на некоторые вопросы о них: как они на самом деле сделаны? Какие программные библиотеки необходимы, чтобы имитировать их поведение? И, наконец, мы будем реализовать некоторые известные фильтры, используя Python или любой язык, который поддерживает HTTP -запросы с помощью Pixlab API Анкет

Без дальнейших слов, давайте немного выкопаем этот вывод Snapchat (на самом деле, он сделан нашей программой что мы реализуем ниже):

Чтобы получить такой эффект, на самом деле необходимы две фазы: Анализ & Обработка Анкет

Компьютерное зрение на спасение

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

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

Учитывая входное изображение или видео кадр, узнайте все присутствующие человеческие лица и выводят их ограничивающую коробку (то есть прямоугольные координаты в форме: X , Y , Ширина & Высота )

Обнаружение лица было решением с начала 2000 -х годов, но сталкивается с некоторыми проблемами, включая обнаружение крошечный , частично & не фронтальный лица. Наиболее широко используемая техника – это комбинация гистограммы ориентированных градиентов ( hog для короткометражных) и векторной машины поддержки ( svm ), которые достигают посредственных к относительно хорошим коэффициентам обнаружения с учетом изображения хорошего качества, но этот метод является методом. Не способен обнаружить в реальном времени, по крайней мере, на ЦП Анкет

Вот как работает детектор HOG/SVM :

Учитывая входное изображение, вычислите пирамидальный Представление этого изображения, которое является пирамидой мультикшнетированного (может быть, Гауссунсский ) сбитой версии исходного изображения. Для каждой записи на пирамиде используется подход скользящего окна. Концепция скользящего окна довольно проста. Померяя изображение с постоянным размером шага, небольшие пятна изображения обычно размером 64 x 128 пикселей извлекаются в разных масштабах. Для каждого патча алгоритм принимает решение, если он содержит лицо или нет. Бога рассчитывается для текущего окна и передается в классификатор SVM (линейный или нет) для принятия решения (то есть лицом или нет). Когда сделано с пирамидой, а Не максимальное подавление (NMS для короткого) Обычная операция обычно проводится, чтобы отказаться от сложенных прямоугольников. Вы можете прочитать больше о комбинации Hog/Svm Здесь Анкет

Лицевые достопримечательности

Это следующий шаг на нашем этапе анализа и работает следующим образом:

Для каждого обнаруженного лица выводит координаты локальной области для каждого члена или лицевой особенности этого лица. Это включает в себя глаза , кость , губы , нос , рт , … координирует обычно в форме точек ( X , Y )

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

Вы можете узнать больше об извлечении достопримечательностей лица Здесь или этот PDF: Один миллисекундной выравнивание с ансамблем деревьев регрессии .

В некоторых и явно полезных случаях обнаружение лица и добыча достопримечательности объединяются в одну операцию. Dlib достигает этого (Нет, на самом деле Dlib Требуется обнаружение лица сначала и извлечение формы затем Так что это двухэтапная операция).

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

Обработка изображений и видео

После того, как у нас появятся достопримечательности лица, 70% работы выполняются, все, что мы должны сделать прямо сейчас, – это то, чтобы противостоять целевому фильтру, такому как венок , Собачья нос и т. д. в верхней части желаемой области лица, как кость Для корпуса цветочной короны. Эта операция названа Композиция Анкет То есть объедините несколько визуальных элементов из отдельных источников в одно изображение.

Ради простоты мы будем придерживаться только обработки изображений. Обработка видео аналогична в концепции, но требует некоторых дополнительных шагов, таких как извлечение каждого кадра с использованием декодера (т.е. ffmpeg или Cvcapture от OpenCV) и лечить эту рамку точно так же, как вы делаете с изображением.

Теперь, когда мы понимаем, как создаются эти фильтры, пришло время начать производить несколько, используя какой -то код в следующем разделе!

Restful API приходят на помощь

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

Первые два (Microsoft & Google) предлагает только машинное видение. Другими словами, вы сможете обнаружить лица, извлекать их формы, используя современные алгоритмы машинного обучения Но вам решать выполнить Фаза обработки . То есть составьте цветочную корону или любой другой фильтр, используя ваш Собственная библиотека обработки изображений Анкет

Pixlab С другой стороны, предложение И компьютерное зрение, и обработка медиа В качестве единого набора унифицированных RESTFUL API и поставляется с более чем 130 API конечные точки .

Достаточно разговоров сейчас , давайте начнем программировать наши фильтры …

Программирование нашего первого фильтра

Учитывая входное изображение с некоторыми красивыми лицами:

И эта цветочная корона:

расположен в pixlab.xyz/images/flower_crown.png

Вывести что -то вроде этого:

Используя этот код:

Вывод программы при запуске должен выглядеть так:

Detecting and extracting facial landmarks..

4 faces were detected

Coordinates...
        width: 223 height: 223 x: 376 y: 112

Landmarks...
        Nose: X: 479.3, Y: 244.2
        Bottom Lip: X: 481.7, Y: 275.3
        Top Lip: X: 481.6, Y: 267.1
        Chin: X: 486.7, Y: 327.3
        Bone Center: X: 490, Y: 125
        Bone Outer Left: X: 356, Y: 72
        Bone Outer Right: X: 564, Y: 72
        Bone Center: X: 490, Y: 125
        Eye Pupil Left: X: 437.1, Y: 177.3
        Eye Pupil Right: X: 543.7, Y: 173.3
        Eye Left Brown Inner: X: 458.2, Y: 161.1
        Eye Right Brown Inner: X: 504.9, Y: 156.1
        Eye Left Outer: X: 417.5, Y: 180.9
        Eye Right Outer: X: 559.4, Y: 175.6

Resizing the snap flower crown...

Composite operation...

Snap Filter Effect: https://pixlab.xyz/24p596187b0b1b68.jpg

Если это первый раз, когда вы видите API Pixlab в действии, вам предлагается прочитать Отличное введение к API за 5 минут или меньше.

Чтобы имитировать такое поведение, только три Команды (Конечные точки API) действительно необходимы для создания такого фильтра:

  1. FacelandMarks это команда анализа, которую мы назвали первым онлайн 29 ПИТОН ГИСТ. Как сказано ранее, это Все в одном операция Он пытается обнаружить все присутствующие человеческие лица, извлечь их координаты прямоугольника и, что более важно, выводит достопримечательности Для каждой функции лица, такой как глаза , кость , нос , рт , Чин , губы и т. д. целевого лица. Мы будем использовать эти координаты позже, чтобы составить вещи на вершине желаемой области лица. В нашем случае только кость региона Координаты были действительно необходимы для сочинения цветочной короны. См. Pixlab документация Для получения дополнительной информации о FacelandMarks командование
  2. Теперь для каждого обнаруженного лица выполните следующие операции по обработке (мы сделали с фазой анализа на этом этапе):
  3. Smartresize называется следующим онлайн 84 Чтобы соответствовать изображению для композиции (то есть цветочной короны) к желаемый измерение такой как Ширина кости целевого лица. Это Основной шаг Поскольку цветочная корона на этом этапе довольно большая по сравнению с шириной кости. Предполагается, что ширина кости такая же, как и ширина лица, поэтому мы используем это значение. Двигатель достаточно умен, чтобы рассчитать высоту для нас, поэтому мы оставим высота поле нетронуто.
  4. слияние ака составной это основная команда обработки, которую мы вызовываем дальше. Он ожидает Список координат (X, y) и a Список изображений для композиции (то есть Цветочная корона) на вершине области целевой области (центр костей в нашем случае). Координаты были собраны на линии 97 и передал дословную команду Merge On Line 108 Анкет См. Pixlab документация Для получения дополнительной информации о слияние командование
  5. При желании у вас может возникнуть соблазн использовать некоторые команды фотофильтров, такие как: Greyscale , размытие , Oilpaint и т. д. для некоторых прохладных фоновых эффектов при желании.

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

Более сложный пример

Учитывает входное изображение:

И эти собачьи части лица:

Доступно отдельно:

Вывести что -то вроде этого:

Используя этот код:

Как вы можете заметить, независимо от того, насколько сложен ваш фильтр, логика всегда одинакова: FacelandMarks Сначала Smartresize Далее и, наконец, слияние Чтобы генерировать фильтр.

Совет : Если вы хотите немедленно загрузить вывод изображения без удаленного хранилища, установите Blob Параметр к TRUE в вашем последнем HTTP -запросе (строка 148).

Композицию Цветочной короны довольно легко реализовать. Все, что нам нужно сделать, это найти Костный центр область целевого лица и вызвать слияние с X & Y координатами этого региона. Не забудьте установить Центр и Центр y параметры для каждой записи слияние Команда берет на Верно Анкет Это рассчитает наилучшую позицию для фильтра. То же правило относится к носу собаки, за исключением того, что мы использовали координаты носа лица.

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

Последний пример

Учитывая эту женщину:

И эта глазная маска:

расположен на. pixlab.xyz/images/eye_mask.png

плюс это усы:

расположен на. pixlab.xyz/images/mustache.png

Выведите что -то подобное с некоторым текстом (то есть мемом) в нижней части изображения:

Используя этот код:

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

Мы также назвали DrawText Команда впервые нарисовать текст в нижней части изображения. Эта команда настолько гибкая, что вы можете поставить Имя шрифта , размер & цвета , Ширина хода & высота , так далее. Взгляните на Мем -документация Для получения дополнительной информации.

Создание собственных вещей

У вас может возникнуть соблазн выполнить код, перечисленный выше, и увидеть его в действии. Все, что вам нужно сделать, это поставить свой собственный API -ключ вместо фиктивного. Если у вас нет ключа, вы можете сгенерировать его из своего Pixlab Dashboard Анкет Если у вас нет учетной записи Pixlab, зарегистрируйтесь Здесь Анкет

Вас приглашают взглянуть на Образец Github Page Для дюжины других интересных образцов в действии, таких как Цензурирование изображений на основе их оценки NSFW , размытие и извлечение человеческих лиц , Создание GIFS и т.п. Все они задокументированы на Pixlab Пример страницы.

Вывод

Как мы видели, создание фильтров SNPACHAT – это два шага операция Анализ Фаза всегда является первым проходом, но также и самым сложным. Для каждого обнаруженного лица в изображении или видео кадре извлеките и запишите Лицевые достопримечательности для этого лица. Большинство фильтров требуют крошечный набор достопримечательностей, если не один вроде кость область для фильтра цветочной короны. Мы видели, что немногие библиотеки программного обеспечения с открытым исходным кодом способны выполнять обнаружение лица и одновременно добывать достопримечательности, кроме Dlib и будущее Symisc Sod Но альтернативы всегда возможны.

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

Наше предлагаемое решение состоит в том, чтобы полагаться на API PixLAB для такого рода задачи, поскольку он способен анализировать и обработку изображений на в то же время И это избегает нас всех хлопот интеграции необходимых библиотек, необходимых для выполнения такой работы. Простой HTTP -запрос от любого языка программирования в целевую конечную точку:

  • FacelandMarks Для добычи на лице.
  • Smartresize Чтобы соответствовать целевому фильтру к желаемому измерению, такому как ширина лица для Цветочная корона кейс.
  • слияние Чтобы противопоставить целевой фильтр на вершине желаемой области лица.
  • Необязательно, Greyscale , DrawText , Oilpaint и т. д. для некоторого фонового эффекта при желании.
  • И вуаля! ты закончил.

Наконец, если у вас есть какие -либо предложения или критики, пожалуйста, оставьте комментарий ниже.

Оригинал: “https://dev.to/unqlite_db/progamming-snapchat-like-filters-cod”