FaceSwap — это приложение, которое я изначально создал в качестве упражнения для своих студентов по специальности «Математика в мультимедиа» Варшавского технологического университета. Приложение написано на Python и использует выравнивание лица, оптимизацию по Гауссу Ньютону и смешивание изображений, чтобы заменить лицо человека, видимого камерой, на лицо человека на предоставленном изображении.
Краткую презентацию возможностей программы вы найдете в видеоролике ниже (нажмите, чтобы перейти на YouTube):
Чтобы запустить программу, вам нужно будет запустить скрипт Python с именем zad2.py (на польском языке для упражнения 2). Вам необходимо установить Python 3 и некоторые дополнительные библиотеки. Как только Python окажется на вашем компьютере, вы сможете автоматически устанавливать библиотеки, запустив pip install -r requirements.txt
в корневом каталоге репозитория.
Вам также необходимо будет скачать модель выравнивания лица отсюда: http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 и распаковать ее в основной каталог проекта.
Более быстрая и стабильная версия FaceSwap доступна в Dropbox здесь. Эта новая версия основана на методе Deep Alignment Network, который работает быстрее, чем используемый в настоящее время метод, если выполняется на графическом процессоре, и обеспечивает более стабильные и точные ориентиры лица. Инструкции по настройке см. в репозитории Deep Alignment Network на GitHub.
Я надеюсь в ближайшее время найти время для включения этой более быстрой версии в код репозитория.
Общая схема метода такова:
Сначала мы берем входное изображение (изображение человека, которого хотим видеть на своем лице) и находим область лица и ее ориентиры. Как только мы это получим, мы подгоним 3D-модель к этим ориентирам (подробнее об этом позже), вершины этой модели, спроецированные на пространство изображения, будут координатами нашей текстуры.
Как только все будет завершено и все инициализировано, камера начнет захватывать изображения. Для каждого захваченного изображения выполняются следующие шаги:
Наиболее важным элементом всего процесса является подгонка 3D-модели. Сама модель состоит из:
Модель проецируется в пространство изображения с помощью следующего уравнения:
где s — проецируемая форма, a — параметр масштабирования, P — первые две строки матрицы вращения, которая вращает трехмерную форму лица, S_0 — нейтральная форма лица, w_1-n — веса формы смешивания, S_1-n — это blendshapes, t — вектор двумерного перевода, а n — количество blendshapes.
Подгонка модели достигается за счет минимизации разницы между проецируемой формой и локализованными ориентирами. Минимизация выполняется в отношении весов blendshape, масштабирования, вращения и перемещения с использованием метода Гаусса Ньютона.
Код лицензируется по лицензии MIT, часть данных в проекте загружена со сторонних сайтов:
Если вам нужна помощь или вы нашли приложение полезным, не стесняйтесь, дайте мне знать.
Марек Ковальски [email protected], домашняя страница: http://home.elka.pw.edu.pl/~mkowals6/