faceswap
简介
Faceswap是一种利用深度学习手段来交换图片和视频中的面孔的工具。
环境准备
cuda 环境 (详情见另一博客 -> cuda/cudnn 安装)
tensorflow-gpu 准备
1
pip install tensorflow_gpu==1.12.0
基本步骤详解
准备工作 提取图片、视频中人脸信息
这里要注意的是可能提取到其他的环境图片需要手动删除部分数据
1
2
3
4# 提取视频中的人脸数据
python faceswap.py extract -i ./faces/demo_2_2018_smw_drsp.mp4 -o ./faces/demo
python faceswap.py extract -i ./faces/cutout.mp4 -o ./faces/lhy训练模型
训练数据只需要上一步提取到的人脸数据
一般用cpu训练需要数周, gpu训练需要 12-48 小时, 当loss下降到0.015一下才能有所效果
1
python faceswap.py train -A ./faces/demo/ -B ./faces/ll/ -m ./demo_ll_model
使用模型生成换脸图
ffmpeg 分解视频成图片数据然后使用模型替换图片中人脸数据
1
2
3
4
5
6
7# 使用训练数据替换
python faceswap.py convert -i ./faces/demo -o ./faces/converted/ -m ./demo_ll_model
# 使用原始视频数据替换 (先用ffmpeg将视频分解为每一帧图片数据)
ffmpeg -i ./faces/demo_2_2018_smw_drsp.mp4 ./faces/demo_output/video-frame-%d.png
python faceswap.py convert -i ./faces/demo_output/ -o ./faces/demo_converted/ -m ./demo_ll_model分解视频音频并将合成后的视频与音频合并
1
2
3
4
5
6
7
8# 分解视频 音频
ffmpeg -i demo_2_2018_smw_drsp.mp4 -vn -y -acodec copy 3.aac
# 换脸后的图片合成视频
ffmpeg -i ./faces/demo_converted/video-frame-%0d.png -c:v libx264 -vf "fps=25,format=yuv420p" lz_demo.mp4
# 合成音频与视频
ffmpeg -i 1.mp4 -i 1.aac -c:v copy -c:a aac -strict experimental 1_yzx.mp4使用 tensorboard 查看网络结构以及训练过程
这里能够看到整个faceswap的网络结构以及训练的收敛速度
1
2
3
4
5
6# 打开log文件
tensorboard --logdir ./demo_ll_model/
TensorBoard 1.12.2 at http://yixue-pc:6006 (Press CTRL+C to quit)
# 浏览器打开就可以观看了 这里只能看到序列
其他工具简介
you-get 视频下载工具
安装
1
2
3brew install you-get
brew install youtube-dl使用详解
1
2
3
4
5# 查看视频的信息以及可选格式
youtube-dl -F https://v.youku.com/v_show/id_XMzg0NjMzMjg2OA\=\=.html\?spm\=a2h0k.11417342.soresults.dtitle
# 下载 -F返回的具体格式视频
youtube-dl -f 3 https://v.youku.com/v_show/id_XMzg0NjMzMjg2OA\=\=.html\?spm\=a2h0k.11417342.soresults.dtitle
ffmpeg 视频处理工具
安装
1
2# mac 安装
brew install ffmpeg基本使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 提取视频的一部分
ffmpeg -i ./Downloads/5cdbcf72e6de1.mp4 -vcodec copy -acodec copy -ss 00:08:10 -to 00:13:00 ./Downloads/cutout.mp4 -y
# 将视频 MP4 转化为 GIF
ffmpeg -i small.mp4 small.gif
# 转化视频中的一部分为 GIF
ffmpeg -t 3 -ss 00:00:02 -i small.webm small-clip.gif
# 转化高质量 GIF
默认转化是中等质量模式,若要转化出高质量的 gif,可以修改比特率
# 加倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=0.5*PTS" output.mov
# 定义帧率 16fps:
ffmpeg -i input.mov -r 16 -filter:v "setpts=0.125*PTS" -an output.mov
# 慢倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=2.0*PTS" output.mov
# 静音视频(移除视频中的音频) -an 就是禁止音频输出
ffmpeg -i input.mov -an mute-output.mov
# 将 GIF 转化为 MP4
ffmpeg -f gif -i animation.gif animation.mp4
#也可以将 gif 转为其他视频格式
ffmpeg -f gif -i animation.gif animation.mpeg
ffmpeg -f gif -i animation.gif animation.webm
#获取 GIF 的第一帧图片
#使用 ImageMagick 可以方便第提取 gif 图片的第 N 帧图像。
#安装 ImageMagick
brew install imagemagick
#提取第一帧
convert 'animation.gif[0]' animation-first-frame.gif