Face Swap em Python

Um dia desses estava pensando em algo divertido para fazer. Já que estava aprendendo sobre detecção de faces, decidi escrever um mini código para trocar faces! Aqui vou mostrar o código que preparei para brincar de face swap! Pois é isso que faremos agora. E usando Python. Prontos?

A ideia básica do face swap não é lá tão complicada. Você tem dois rostos na imagem, você troca os rostos. Então, vamos fazer isso para o caso mais simples, em que temos uma imagem contendo duas faces. A primeira fase do processo consiste em detectar a presença das faces e obter suas posições, isso significa obter as coordenadas de um retângulo, dentro da imagem, que contém uma face. Criamos uma cópia de cada retângulo. A ideia mais simples seria apenas colar o retângulo da primeira face nas coordenadas da segunda e vice-versa, tcharam, face swap realizado. Mas não. Veja que provavelmente esses dois retângulos terão tamanhos diferentes, portanto é necessário redimensionar o primeiro retângulo para que tenha o tamanho do segundo e vice-versa.

Também não para por aí. É altamente provável que as faces tenham colorações diferentes e isso faz com que as bordas das faces, quando trocadas, mostrem descontinuidades de cor bem fortes. Para diminuir esse efeito, podemos tentar ajustar o brilho de cada face de forma que uma assuma a cor média da outra. Além disso, uma segunda ideia com o objetivo de minimizar esse efeito de borda, é usar uma máscara alpha nos retângulos das faces. Essa máscara faz com que os pixels das bordas sejam gradualmente mais transparentes que os pixels centrais. Finalmente, após processar os retângulos das faces, colamos os pixels de um nas coordenadas do outro e podemos dizer que fizemos um face swap. Se ficou bom ou não, é outra história.

Conhece esses dois?

Preparando o ambiente

Usando o comando pip, é possível instalar os pacotes da linguagem Python facilmente.

Mas um aviso deve ser dado. Usando o pacote opencv-python disponível pelo pip será possível trocar as faces apenas de vídeos já gravados, pois o pacote não suporta captura pela webcam. Para poder capturar pela webcam, é preciso instalar o OpenCV completo correspondente ao seu sistema. Algumas opções são: Ubuntu/Debian, Windows e Mac.

No código os pacotes instalados serão importados assim:

Detecção de faces

Primeiro, vamos detectar as faces para trocar

Recorte e redimensionamento

Vamos ter que recortar uma cópia das faces detectadas para que possamos ajustá-las antes de realizar a troca

Ajuste de cor e brilho

Antes de trocar, é bom fazer um ajuste de cor em cada face, para que as bordas não fiquem tão bizarramente aparentes.

Programa principal

Agora vamos usar as funções que escrevemos para fazer o trabalho de verdade!

Finalmente, para executar o código acima, você precisará de alguns arquivos adicionais: o arquivo do detector de faces, a máscara para melhorar o contorno da face e também um pequeno vídeo para testar. Tudo isso está também no repositório desse projeto no github do Dragão.

Para usar o código nas imagens da sua própria webcam, basta habilitar a linha 12 e desabilitar a linha 13 do programa principal. Note que você precisará então da instalação completa do OpenCV.

Divirta-se!

David Borges

Um dia... Boom! Dragão sem Chama.

Leave a Reply

Your email address will not be published. Required fields are marked *