AR-фильтры с использованием Mediapipe, развернутые с помощью FastAPI/Heroku
MediaPipe — это платформа для создания конвейеров машинного обучения для обработки данных временных рядов, таких как видео, аудио и т. д. Эта кроссплатформенная платформа работает на настольных компьютерах/серверах, Android, iOS и встроенных устройствах, таких как Raspberry Pi и Jetson Nano.
Чтобы использовать этот инструмент, создайте виртуальную среду и pip install mediapipe.
Введение
Вы когда-нибудь задумывались, что скрывается за фразой "Окей, Google!". Ну, это медиапайп.
С 2012 года Google использует его в нескольких продуктах и сервисах. Первоначально он был разработан для анализа видео и аудио на YouTube в режиме реального времени. Как правило, он был интегрирован во многие продукты, такие как:
- Система восприятия в Nestcam.
- Реклама дополненной реальности
- Обнаружение возражений с помощью Google Lens
- Gmail
- Облачное видение
- Google Фото
- 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:
- Обнаружение 468 лицевых ориентиров с помощью Mediapipe Face Mesh.
- Выберите соответствующие ориентиры, потому что нам не нужно 468 ориентиров.
- Аннотируйте фильтры с выбранными ориентирами.
- Загрузить аннотации.
- Обнаружение ориентиров на лице.
- Стабилизировать ориентиры.
- Преобразуйте фильтр на лице, используя ориентиры.
Теперь, когда у вас есть обзор конвейера, давайте проверим детали.
Ориентирные точки из сетки лица
Начнем с импорта 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), Мариам, Сильвестр, Селорм Адукону и Ричард, вы все лучшие, спасибо за все ваши неустанные усилия, приложенные для обеспечения того, чтобы эта исследовательская работа увенчалась успехом.