faceswap

简介

Faceswap是一种利用深度学习手段来交换图片和视频中的面孔的工具。

github 地址

github 教程

环境准备

  1. cuda 环境 (详情见另一博客 -> cuda/cudnn 安装)

  2. tensorflow-gpu 准备

    linux tensorflwo版本对应

    1
    pip install tensorflow_gpu==1.12.0

基本步骤详解

  1. 准备工作 提取图片、视频中人脸信息

    这里要注意的是可能提取到其他的环境图片需要手动删除部分数据

    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
  2. 训练模型

    训练数据只需要上一步提取到的人脸数据

    一般用cpu训练需要数周, gpu训练需要 12-48 小时, 当loss下降到0.015一下才能有所效果

    1
    python faceswap.py train -A ./faces/demo/ -B ./faces/ll/ -m ./demo_ll_model
  3. 使用模型生成换脸图

    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
  4. 分解视频音频并将合成后的视频与音频合并

    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
  5. 使用 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. 安装

    1
    2
    3
    brew install you-get

    brew install youtube-dl
  2. 使用详解

    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. 安装

    1
    2
    # mac 安装
    brew install ffmpeg
  2. 基本使用

    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