FaceSwap é um aplicativo que criei originalmente como um exercício para meus alunos de "Matemática em Multimídia" na Universidade de Tecnologia de Varsóvia. O aplicativo é escrito em Python e usa alinhamento facial, otimização de Gauss Newton e combinação de imagens para trocar o rosto de uma pessoa vista pela câmera pelo rosto de uma pessoa em uma imagem fornecida.
Você encontrará uma breve apresentação das capacidades do programa no vídeo abaixo (clique para ir ao YouTube):
Para iniciar o programa você terá que executar um script Python chamado zad2.py (em polonês para o exercício 2). Você precisa ter o Python 3 e algumas bibliotecas adicionais instaladas. Assim que o Python estiver em sua máquina, você poderá instalar automaticamente as bibliotecas executando pip install -r requirements.txt
no diretório raiz do repositório.
Você também terá que baixar o modelo de alinhamento facial aqui: http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 e descompactá-lo no diretório principal do projeto.
Uma versão mais rápida e estável do FaceSwap está disponível no Dropbox aqui. Esta nova versão é baseada no método Deep Alignment Network, que é mais rápido que o método usado atualmente se executado em uma GPU e fornece pontos de referência faciais mais estáveis e precisos. Consulte o repositório GitHub da Deep Alignment Network para obter instruções de configuração.
Espero encontrar tempo para incluir esta versão mais rápida no código do repositório em breve.
O esboço geral do método é o seguinte:
Primeiro pegamos a imagem de entrada (a imagem de uma pessoa que queremos ver em nosso rosto) e encontramos a região do rosto e seus pontos de referência. Assim que ajustarmos o modelo 3D a esses pontos de referência (mais sobre isso mais tarde), os vértices desse modelo projetado no espaço da imagem serão nossas coordenadas de textura.
Feito isso e tudo inicializado, a câmera começa a capturar imagens. Para cada imagem capturada são executados os seguintes passos:
O elemento mais crucial de todo o processo é o ajuste do modelo 3D. O modelo em si consiste em:
O modelo é projetado no espaço da imagem usando a seguinte equação:
onde s é a forma projetada, a é o parâmetro de escala, P são as duas primeiras linhas de uma matriz de rotação que gira a forma da face 3D, S_0 é a forma da face neutra, w_1-n são os pesos da forma de mistura, S_1-n são os blendshapes, t é um vetor de tradução 2D en é o número de blendshapes.
O ajuste do modelo é realizado minimizando a diferença entre a forma projetada e os pontos de referência localizados. A minimização é realizada em relação aos pesos, escala, rotação e translação da blendshape, utilizando o método de Gauss Newton.
O código é licenciado sob a licença MIT, alguns dos dados do projeto são baixados de sites de terceiros:
Se precisar de ajuda ou se você achou o aplicativo útil, não hesite em me avisar.
Marek Kowalski [email protected], página inicial: http://home.elka.pw.edu.pl/~mkowals6/