AR-фильтры с использованием Mediapipe, развернутые с помощью FastAPI/Heroku

MediaPipe — это платформа для создания конвейеров машинного обучения для обработки данных временных рядов, таких как видео, аудио и т. д. Эта кроссплатформенная платформа работает на настольных компьютерах/серверах, Android, iOS и встроенных устройствах, таких как Raspberry Pi и Jetson Nano.

Чтобы использовать этот инструмент, создайте виртуальную среду и pip install mediapipe.

Введение

Вы когда-нибудь задумывались, что скрывается за фразой "Окей, Google!". Ну, это медиапайп.

С 2012 года Google использует его в нескольких продуктах и ​​сервисах. Первоначально он был разработан для анализа видео и аудио на YouTube в режиме реального времени. Как правило, он был интегрирован во многие продукты, такие как:

  1. Система восприятия в Nestcam.
  2. Реклама дополненной реальности
  3. Обнаружение возражений с помощью Google Lens
  4. Gmail
  5. Облачное видение
  6. Google Фото
  7. Google Home и т. д.

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

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

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

В этой статье мы узнаем, как мы можем создавать наши фильтры с помощью Mediapipe.

Почему Mediapipe?

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

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

Он поддерживает платформы Python, C, Javascript, Android и IOS и обладает такими функциями, как распознавание лиц, сетка лиц или распознавание ориентиров лица, сегментация лиц, распознавание объектов, оценка позы человека и т. д. Можно ли просить большего?

Обзор сетки лица?

В нашей статье мы сосредоточим наше исследование на лицевой сетке. Сетка лица Mediapipe обеспечивает колоссальные 468 3D-ориентиров лица в режиме реального времени даже на мобильных устройствах. Поддерживаются как IOS, так и Android, поэтому вы можете создавать с их помощью эти мобильные приложения и дать Snapchat возможность заработать деньги. В этом сообщении блога мы будем использовать Python с MediaPipe и OpenCV для реализации фильтров AR.

Как и любая модель Facial-Landmark, Mediapipe начинается с распознавания лиц и определяет ориентиры на обнаруженном лице. Для распознавания лиц используется Blazefast, который, как следует из названия, чрезвычайно быстр и легок и оптимизирован для логического вывода мобильного графического процессора. Обнаружение лица выводит обрезанную область из видеокадра. Затем мы запускаем модель 3D-Landmark на обрезанной области.

Обзор конвейера

Прежде чем углубляться в суть вещей, давайте обсудим наш конвейер для реализации фильтров AR с использованием Mediapipe и OpenCV:

  1. Обнаружение 468 лицевых ориентиров с помощью Mediapipe Face Mesh.
  2. Выберите соответствующие ориентиры, потому что нам не нужно 468 ориентиров.
  3. Аннотируйте фильтры с выбранными ориентирами.
  4. Загрузить аннотации.
  5. Обнаружение ориентиров на лице.
  6. Стабилизировать ориентиры.
  7. Преобразуйте фильтр на лице, используя ориентиры.

Теперь, когда у вас есть обзор конвейера, давайте проверим детали.

Ориентирные точки из сетки лица

Начнем с импорта MediaPipe. Затем мы создаем экземпляр Face Mesh с двумя настраиваемыми параметрами для обнаружения и отслеживания ориентиров.

min_detection_confidence=0.5

min_tracking_confidence=0.5

Наконец, мы передаем входное изображение и получаем список объектов лица.

Получение фильтров

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

Вот подборка фильтров:

Аннотирование фильтров точками

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

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

Общий обзор кода

импортировать необходимые библиотеки

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

определение путей для отфильтрованных изображений и аннотаций

Определить функцию для получения ориентира из медиаканала

Функция загрузки отфильтрованных изображений

Получить альфа-канал из изображения фильтра для последующего использования и преобразовать изображение в BGR

Загрузить ориентиры для аннотации

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

Функция для загрузки фильтра и применения триангуляции Денолея, если фильтр необходимо деформировать на лице

Развертывание в FastAPI

В проекте мы, наконец, развернули его с помощью FastAPI и разместили в приложении Heroku. Обратите внимание, что для запуска FastAPI вам потребуется pip install fastapi uvicorn в вашей среде conda.

Коды FastAPI

Для запуска кода fastAPI используйте:

Server.py

Демонстрационное видео



Заключение

Дополненная реальность была очень важной областью в последних технологиях и послужила мотивом для этого исследования. Тем не менее, среда Mediapipe ML сыграла важную роль в реализации этого исследования. Все благодаря Google и его исследовательской группе. В этом проекте мы использовали makeense для аннотации данных, mediapipe для реализации фильтров AR, FastAPI для развертывания модели и приложение Heroku для развертывания нашей модели на сервере Heroku.

Ограничения

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

Ссылки

Ссылка на гитхаб: https://github.com/judsongroups/AR-Filters-using-Mediapipe-deployed-with-fastapi

Ссылка на приложение heroku: http://snapchat-ar-filters.herokuapp.com/

Благодарность

Особая благодарность Всемогущему Богу, который провел нас через эту исследовательскую работу, Zummit Africa Inc. за возможность учиться, исследовать и расти в области данных, спасибо руководителю моей команды Валентину Энеде за поддержку и моему члены команды и соавторы Сэмюэл Окон (https://www.linkedin.com/in/samuel-okon-61456b1b4), Мариам, Сильвестр, Селорм Адукону и Ричард, вы все лучшие, спасибо за все ваши неустанные усилия, приложенные для обеспечения того, чтобы эта исследовательская работа увенчалась успехом.