Maison  >  Article  >  développement back-end  >  C'est la première fois que vous jouez à DeepFakes

C'est la première fois que vous jouez à DeepFakes

coldplay.xixi
coldplay.xixiavant
2020-11-13 16:55:244200parcourir

La colonne

tutoriel vidéo Python présente DeepFakes. C'est la première fois que vous jouez à DeepFakes

Target

Je n'ai jamais touché à DeepFakes auparavant, et du coup j'ai envie de poster une vidéo de Bilibili pour jouer avec. C'est assez difficile de l'essayer, je vais donc enregistrer les pièges que j'ai rencontrés.

Le but de cet article est de remplacer la vidéo de The Singing Trump avec notre camarade Chuan Jianguo.

Effet final :

Lien vidéo : https://www.bilibili.com/video/BV12p4y1k7E8/

Description de l'environnement

L'environnement tenté dans cet article est un environnement serveur Linux, car il s'exécute plus rapidement.

Environnement Python : version Anoconda python3.7

GPU : K80, mémoire vidéo 12G

Version DeepFake : 2.0

Autres outils : ffmpeg

Préparation du matériel

Vous devez d'abord préparer une ou plusieurs The Singing Trump vidéos, ainsi que la vidéo du camarade Chuan Jianguo. Utilisé comme matériau pour changer de visage.

Partage vidéo

Tout d'abord, divisez le matériel vidéo en plusieurs images via ffmpeg.

mkdir output
ffmpeg -i 你的视频.mp4 -r 2 output/video-frame-t-%d.png复制代码

La vidéo ici ne doit pas nécessairement être mp4, d'autres formats sont également acceptables, et -r 2 signifie 2 images, c'est-à-dire que deux images sont collectées par seconde. Vous pouvez l'essayer en fonction de votre propre vidéo. . Enfin, il est affiché dans le dossier de sortie. Le préfixe peut être défini de manière informelle et le nom n'est pas critique.

Il est préférable de trouver plus de vidéos ici, car deepfake vous demandera de vous assurer que le nombre de visages est supérieur à 200. J'ai préparé 3 vidéos ici, pour un total de 6 vidéos.

ffmpeg -i sing_trump1.mp4 -r 2 sing_trump_output/st1-%d.png
ffmpeg -i sing_trump2.flv -r 2 sing_trump_output/st2-%d.png
ffmpeg -i sing_trump3.mp4 -r 2 sing_trump_output/st3-%d.png复制代码
rrree

C'est assez gros quand c'est fait, le gâchis total est de 3,7G.

Code clone + dépendances installées

Il n'y a rien à dire ici, téléchargez le code depuis github.

ffmpeg -i trump1.webm -r 2 trump_output/t1-%d.png
ffmpeg -i trump2.mp4 -r 2 trump_output/t2-%d.png
ffmpeg -i trump3.mp4 -r 2 trump_output/t3-%d.png复制代码

Ensuite, installez l'environnement en fonction de votre situation réelle. Ici, j'installe le processeur sur le PC, puis j'installe nvidia sur le serveur.

Extraire les visages

Ensuite, extrayez tous les visages.

git clone https://github.com/deepfakes/faceswap.git复制代码

C'est tout après avoir été giflé.

Filtrer les visages

Ensuite, nous devons manuellement supprimer tous les visages dont nous n'avons pas besoin.

Modifier l'alignement

Lorsque nous appelons extraire pour générer un visage, un fichier de relecture sera automatiquement généré pour Enregistrer les informations sur le visage sur l’image originale. Après avoir supprimé le visage, vous devez l'aligner sur l'image originale.

Ici, vous pouvez ouvrir l'outil graphique

python3 faceswap.py extract -i trump_output -o trump_output_face
python3 faceswap.py extract -i sing_trump_output -o sing_trump_output_face复制代码

et sélectionner Alignements sous Outils.

Sélectionnez ensuite Remove-Faces, puis entrez le chemin du fichier d'alignement, le chemin du visage et le chemin de l'image d'origine.

Cliquez ensuite sur le bouton vert pour démarrer et exécuter.

Puis faites de même avec sing_trump_out.

Démarrer l'entraînement

Vous pouvez ensuite commencer l'entraînement. Le paramètre -m est l'emplacement où le modèle est enregistré.

python3 ./faceswap.py train -A sing_trump_output_face -ala sing_trump_output/alignments.fsa -B trump_output_face -alb trump_output/alignments.fsa  -m model复制代码

小问题

这里如果用gpu的话,我发现tensorflow2.2开始要用cuda10.1以上,但我这边儿没法装,所以需要用tensorflow1.14或者tensorflow1.15,这就需要deepfake的1.0版本才能用。

github.com/deepfakes/f…

训练截图

我发现faceswap1.0和master分支的操作是一样的,没太大变化。

我这里的速度大概是2分钟100个step。

转换视频

准备视频帧

首先要准备我们要转换的视频,然后把视频切分,这里就不是按照之前的帧数了。

ffmpeg –i sing_trump2.flv input_frames/video-frame-%d.png 
复制代码

这里我的视频是1分41秒。

转换完了大概有3050张图片,也就是差不多30帧的,然后一共7.1G(mac就256G真的有点儿遭不住)

再次对齐一遍

接下来,需要对我们要转换的视频图片再来一遍人脸对齐,首先抽脸。

python3 faceswap.py extract -i input_frames -o input_frames_face复制代码

然后再把多余的脸删掉,像前面的步骤一样的操作用gui工具选择Remove-Faces,然后进行对齐。

对每一帧进行AI换脸

通过convert命令进行转换

python3 faceswap.py convert -i input_frames/ -o output_frames -m model/复制代码

我这里的速度大概是每秒1张图片,不过真正的脸只有600多张,如果脸比较密集的话我估计可能没有那么快,所有的图片转换完大概是5分多钟(这个gpu当时有别的程序在跑真实可能会更快一点儿)。

效果

训练20分钟后

在训练了1200step之后,大概是这个样子,效果看着还不是很好哈,不过已经有点儿意思了。

训练一个小时后

训练一天以后

把图片合成视频

最后通过ffmpeg把图片合成一个视频。

ffmpeg -i output_frames/video-frame-%d.png -vcodec libx264 -r 30  out.mp4复制代码

这里合并完了我发现是2分钟,不过影响也不大,毕竟后面还要进行剪辑,用PR等软件再编辑一下就好了。

总结

看视频可以发现当脸比较小的时候,faceswap并没有识别出来脸,所以也就没有做替换,还是有点儿遗憾。

个人感觉整个deepfake的最费时间的流程其实就是在删掉多余的脸上面。

相关免费学习推荐:python视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer