04 fevereiro 2018

DeepFakes - criando vídeos (porn) falsos - FakeApp tutorial

Atenção: o tutorial abaixo tem o intuito apenas educacional, não nos responsabilizamos pelos seus atos ou o de nossos leitores. Não será exibido conteúdo para maiores de idades (+18) durante a leitura, mas os link que direcionam para outras páginas podem conter conteúdo NSFW.

Atualizado em 12/02/18

Uma nova cultura vem surgindo na internet, a cultura de manipular vídeos colocando rosto de outra pessoa no vídeo (face swap) - infelizmente isto vem sendo utilizado para colocar rosto de famosos/pessoas públicas, em corpos de atores pornôs. 

Fazer este tipo de conteúdo em fotos, é fácil para quem está acostumado com photoshop. Mas este tipo de manipulação em vídeo só se tornou relativamente mais simples graças ao aprendizado de máquinas (machine learning) que permitem que usuários criem filmagens falsas realistas em questão de horas e com algumas imagens da vítima. Como ilustra o vídeo abaixo, Donald Trump foi colocado sobre o rosto do personagem Biff em uma cena do filme De volta para o Futuro.


O processo para fazer este tipo de vídeo ainda continua um pouco complexo para usuários leigos, mas uma comunidade chamada DeepFakes no Reddit (a comunidade foi banida), está tornando isso muito mais simples lançando versões melhoradas de um programa para Windows, o FakeApp.

Mas antes de começar a utilizar o programa é necessário que entenda que o processo de criação do vídeo falso ainda demanda horas de processamento, é necessário que você possua pelo menos 8GB de memória RAM e uma placa de vídeo nvidia com 4GB de RAM pelo menos. Embora você ainda possa utilizar seu processador... o processo demorará muito mais. *Caso utilize placa de vídeo da AMD, existe uma gambiarra utilizando o sistema operacional Ubuntu (linux) - você pode conferir um tutorial sobre clicando aqui (artigo em inglês - portanto recomendo compreender como funciona o processo lendo nosso artigo abaixo primeiro).



A versão do FakeApp recomendada é a 1.1, embora exista a versão 2.0... ela está instável no momento em que escrevo este tutorial. O link para download você encontra clicando aqui.

Depois de ter feito o download do FakeApp, copie a pasta para seu disco local C:\FakeApp


Ainda em seu disco local, crie uma pasta chamada "fakes" (sem aspas) e dentro dela, crie 2 pastas... uma chamada "data_A" e outra "data_B" (sem aspas).




Em data_B você colocará suas celebridades, ou seja, o rosto de quem você quer em um vídeo e em data_A você colocará seus vídeos ou pornos, ou seja, o vídeo em que o rosto desejado irá aparecer. 

Antes de continuar, certifique que possui instalado o Java, acesse o site oficial java.com e confira se possui instalado o Java, caso contrário faça download e instale-o.



Bom, dentro da pasta FakeApp você encontrará um arquivo chamado fakeapp.bat, executando ele abrirá uma janela preta... o prompt de comando do Windows, que executará um código para abrir o programa FakeApp - demora um pouco até abrir.




*No caso da imagem apareceu A:\DF\FakeApp no prompt, pois tive que colar a pasta FakeApp em outro disco em vez do disco local 'C', devido a questões de falta de espaço para continuar com o tutorial.

Na aba "Extract" é onde será possível extrair os rostos dos vídeos e imagens que estão na pasta data_A e data_B. Quando terminar de extrair todos os rostos, você irá para a aba "Train" que é onde a mágica acontece, ou seja, é onde uma inteligência artificial é treinada para sobrepor os rostos. Por fim, a ultima aba... "Convert" permite você colocar os rostos trocados de volta nas imagens do vídeo.

Bom, caso for utilizar uma placa de vídeo nvidia, é necessário que tenha instalado o nvidia CUDA 8.0 (sim, a versão 8.0), o link para download pode ser encontrado clicando aqui, certifique de baixar o instalador "exe (local)" em vez do "exe (network)" para evitar problemas.

Você também precisará de um programa que extraia as imagens de vídeos que for usar como base, por exemplo para colocar na pasta data_B. Portanto, recomenda-se utilizar o software ffmpeg - link para download clicando aqui. Infelizmente o processo de instalar ele é diferente, mas felizmente um tutorial do wikihow em português de como instalar o ffmpeg pode ser encontrado clicando aqui.

Feito isto, escolha um vídeo em boa qualidade, e coloque dentro da pasta do ffmpeg que criou em seu disco local conforme seguiu o tutorial do wikihow. *É recomendado que tenha apenas 1 rosto no vídeo para facilitar... caso insista em ter mais de 1 rosto no vídeo, terá que fazer passos extras que avisarei mais a frente.

Abra o prompt de comando (cmd) do Windows e acesse a pasta do ffmpeg como ilustra a imagem abaixo:
*note que ali em "video%04.png" o correto seria "video%04d.png" .

Comandos:

cd C:\ffmpeg

ffmpeg -i [nome do vídeo].[tipo do vídeo] -vf fps=0.5 "[nome da imagem]%04d.png"

Em seguida dê enter e aguarde as imagens serem extraídas do vídeo. Depois, copie todas as imagens para a pasta "data_B" criada dentro de "fakes".

De volta para a janela do FakeApp, vamos preencher a aba "Extract". Em "Data:" você coloca o caminho para onde está as imagens do vídeo que extraiu, no caso data_B. 

Já em "File Type" escreva o tipo do arquivo das imagens, é recomendo utilizar png ou jpeg. Em "Processor" deixe "GPU" caso utilize placa de vídeo da nvidia e tenha instalado o CUDA 8.0 ou escreva "CPU" (sem aspas) para usar seu processador. *Caso seu vídeo utilizado possuir mais de um rosto, escreva "true" (sem aspas) em "Mult Faces" - dependendo do vídeo, mesmo que tenha mais de uma pessoa e você for utilizar apenas 1 rosto, deixe false.

Feito isto, aperte Start e aguarde o processo terminar.


Dentro da pasta data_B, surgirá uma pasta chamada aligned que conterá imagens dos rostos do vídeo extraído. Acesse está pasta e apague as imagens ruins, imagens borradas dos rostos, ou rostos que não forem da pessoa que deseja por exemplo.

taeyeon face
Taeyeon face
Agora é necessário um vídeo para que o rosto extraído acima apareça nele e claro não utilizaremos vídeos impróprios. Repetiremos o mesmo processo de extração de imagens com o ffmpeg e colaremos as novas imagens dentro da pasta data_A. Mas em vez de utilizar 0.5 frames por segundo, vamos utilizar a quantidade de frames do vídeo.. clique com o botão direito sobre o vídeo e depois em 'propriedades', depois na aba 'Detalhes' descubra a taxa de quadros por segundos do vídeo e em vez de usar 0.5 no comando do ffmpeg... utilize o valor que aparecer lá.. no exemplo da imagem abaixo foi de 29.95 .


Depois copie as imagens para a pasta "data_A" e repita o processo com o programa FakeApp em que na aba "Extract" extraímos os rostos.

Dentro da pasta "aligned" em "data_A" as imagens que não são de rostos ou que estão ruins devem ser apagadas assim como fizemos em "data_B".

Agora é hora de começar o treinamento, na aba "Train" do programa. Antes disto, acesse a pasta "fakes" onde contém as pasta "data_A" e "data_B" e então crie uma pasta chamada "model".

Depois acesse a pasta "FakeApp" onde contém o programa, e acesse uma pasta também chamada "model", dentro dela copie todos os arquivos e cole na pasta "model" que você criou dentro de "fakes".

Agora no programa, na aba "Train" preencha os campos com o caminho para a pasta model, também para a pasta "data_A" e "data_B", e caso use o processador em vez de placa de vídeo, altere de GPU para CPU no campo "Processor". Deixe os outros campos como estão e aperte "Start".
*Se você possui uma GTX1070 ou 1080 você pode alterar aumentando o campo batch por números que sejam potencias de 2 e o campo nodes para 1024, assim obtendo melhor resultados no treinamento.

Uma janela do prompt de comando abrirá e demorará um pouco até começar aparecer mensagens na tela. Se tudo estiver certo, uma janela com um preview do que o software está fazendo aparecerá como ilustra as imagens abaixo:


Note que quanto mais próximo de zero o valor de "Loss", é um momento ideal para finalizar o treinamento clicando na janela de preview e depois apertando a letra "q".. demorará um pouco até tudo ser salvo. *Como ilustra a imagem abaixo, quanto mais nítido, bonito... estiver o resultado da terceira coluna, é sinal que já se passou tempo suficiente de treinamento.


Feito isto, é hora de juntar os rostos nas imagens para depois converter as imagens em vídeo. Para isto, no programa FakeApp clique na aba "Convert". 


Em "Model" coloque o caminho para a pasta "model", em "Data" coloque o caminho para a pasta "data_A". As outras opções deixe como estão e em "Processor" escreva CPU caso utilize processador ou deixe GPU caso utilize placa de vídeo. Aperte "Start" e aguarde o processo terminar.

Uma nova pasta chamada "merged" aparecerá dentro da pasta "data_A", lá conterá as imagens com rostos modificados.
Como cada imagem é um frame de vídeo, agora basta juntar as imagens para que um vídeo com o rosto modificado seja renderizado. Para isto copie todas as imagens que estão dentro da pasta merged e cole dentro da pasta do ffmpeg que estão no seu disco local (antes apague as imagens que estiverem na pasta do ffmpeg para não ficar bagunçado), depois abra o terminal e acesse a pasta do ffmpeg. O comando para juntar as imagens em um vídeo é o seguinte:

ffmpeg -f image2 -i img%04d.png -vcodec libx264 -crf 24 -pix_fmt yuv420p nome-do-video.mp4

Note que "img%04d.png" é o nome das imagens, ou seja se uma imagem sua tem o nome de video0001 então altere o trecho do código para "video%04d.png" onde o número 4 é a quantidade de casas numéricas após a palavra 'video'.



Agora é só abrir o vídeo e apreciar o que o aprendizado de máquina pode fazer.

Abaixo tem um gif de como ficou nosso teste com o FakeApp:


Um detalhe importante para que o resultado deste experimento fique bem próximo a de um vídeo real (coisa que não aconteceu no gif acima), é que é necessário de imagens de rostos em diferentes posições, luzes, ângulos, maquiagens, expressões - ou seja mais de mil imagens seria ainda pouco. E também como nós utilizamos o método apenas para escrever este tutorial, não tivemos tempo de deixar nossas máquina processando por horas as imagens na parte de treinamento.

Fizemos um outro teste com o rosto da atriz Jennifer Aniston (pré-alinhado, você pode encontrar este tipo de arquivo na página Facesets, clicando aqui [comunidade banida] - no caso basta colar o conteúdo na pasta data_B e usar o arquivo model que baixou junto) em cima do rosto da cantora sul coreana Irene (kpop). Abaixo você confere um trecho do vídeo original em formato gif e o trecho modificado:



Listaremos abaixo alguns erros e dúvidas comuns durante o processo:

-Não recomendo a utilização de acentuação ou outros caracteres em pastas, nomes de arquivos etc.

Erros na aba "Extract"

-Se você receber um erro de "from torch._C import *" significa que seu Visual C++ Redistributable packages está desatualizado. Portanto pesquise no Google por "vc redist" e baixe e instale o pacote.
-Se você receber um erro de "error while calling cudaMalloc() reason: out of memory" é porque você está usando imagens muito grandes, procure diminuir a qualidade do vídeo que está extraindo as imagens para ter imagens menores.

Erros na aba "Train"

-Se você receber um erro de "AssertionError in image_augmentation.py" significa que está treinando imagens de tamanho errado, confira se as imagens tem o tamanho de 256x256 criadas pelo Align Tool.

-Se o arquivo de log do "Train" tiver a mensagem "Missing cudart_64.dll" é porque você está com a versão errada do CUDA instalada.

-Se o arquivo de log do "Train" tiver a mensagem "MemoryError train.py line 60/line 61" provavelmente você está usando muitas imagens e sua GPU não está aguentando, umas 500 já é significante.

- Mensagem "OOM when allocating tensor with shape [W, X, Y, Z]" significa que 
o modelo atual é muito intensivo para sua placa de vídeo. Tente usar a seguinte configuração: batch=16, layers=4 e reduza os nodes em potencia de 2 (512, 256, 128...). Em placas de vídeos com 2GB alguns usuários conseguiram rodar na seguinte configuração: batch=64, layers=1, nodes=128. Se não resolver é porque sua placa de vídeo possui menos de 4GB de RAM.. portanto altere o campo "Processor" de GPU para CPU e use seu processador para fazer a tarefa.

Para mais informações sobre a ferramenta visite uma página no Reddit, clicando aqui!  [comunidade banida] .

No momento em que finalizo este artigo a versão 2.1 foi lançada! E agora ele tem até site, www.fakeapp.org . Dei uma olhada na ferramenta antes de publicar o artigo e vi que apenas facilitaram o processo. Portanto se você entendeu como funciona a ferramenta em sua versão 1.1, não terá dificuldades na utilização da nova versão!

Na primeira aba da versão 2.1 temos "Get Dataset" onde é que você aponta o endereço do vídeo que seria extraído as imagens e também os rostos (sim, o programa faz os 2 processos de uma vez).

Na segunda aba, em "Train" temos o mesmo processo apresentado para a versão 1.1 . E na aba "Create" facilita na hora de gerar o vídeo (sim, o processo do ffmpeg foi automatizado).

Gostou? Compartilhe com seus amigos e alerte eles sobre publicar muitas fotos por ai na internet.. afinal você pode virar a próxima estrela porno sem saber.

Fontes:





~ Artigos recomendados para você:









Please Donate To Bitcoin Address: [[address]]





Donation of [[value]] BTC Received. Thank You.


[[error]]