First Order Motion model原理:
First Order Motion model的任务是image animation,给定一张源图片,给定一个驱动视频,生成一段视频,其中主角是源图片,动作是驱动视频中的动作,源图像通常包含一个主体,驱动视频包含一系列动作。
通俗来说,First Order Motion能够将给定的驱动视频中的人物A的动作迁移至给定的源图片中的人物B身上,生成全新的以人物B的脸演绎人物A的表情的视频。
以人脸表情迁移为例,给定一个源人物,给定一个驱动视频,可以生成一个视频,其中主体是源人物,视频中源人物的表情是由驱动视频中的表情所确定的。通常情况下,我们需要对源人物进行人脸关键点标注、进行表情迁移的模型训练。
只需要在同类别物体的数据集上进行训练即可,比如实现太极动作迁移就用太极视频数据集进行训练,想要达到表情迁移的效果就使用人脸视频数据集voxceleb进行训练。训练好后,使用对应的预训练模型就可以达到前言中实时image animation的操作。
简单的说,First Order Motion 能够通过自监督的方式学习到图像中的关键点。不需要先验地知道目标的一些信息,比如骨架等就可以实现动作迁移。
下载PaddleGAN代码:
1)从github上克隆PaddleGAN代码
git clone https://gitee.com/paddlepaddle/PaddleGAN
报错:fatal: Not a git repository
解决:git init
2)安装所需安装包
pip install -r requirements.txt
pip install imageio-ffmpeg
执行命令:
上传自己准备的视频和图片,并在如下命令中的source_image参数和driving_video参数分别换成自己的图片和视频路径,然后运行如下命令,就可以完成动作表情迁移,程序运行成功后,会在ouput文件夹生成名为result.mp4的视频文件,该文件即为动作迁移后的视频。本项目中提供了原始图片和驱动视频供展示使用。具体的各参数使用说明如下:
- driving_video: 驱动视频,视频中人物的表情动作作为待迁移的对象
- source_image: 原始图片,视频中人物的表情动作将迁移到该原始图片中的人物上
- relative: 指示程序中使用视频和图片中人物关键点的相对坐标还是绝对坐标,建议使用相对坐标,若使用绝对坐标,会导致迁移后人物扭曲变形
- adapt_scale: 根据关键点凸包自适应运动尺度
export PYTHONPATH=$PYTHONPATH:/workspace/yansy/PaddleGAN && python -u /workspace/yansy/PaddleGAN/applications/tools/first-order-demo.py --driving_video /workspace/yansy/PaddleGAN/work/testv1.mp4 --source_image /workspace/yansy/PaddleGAN/work/xizi.png --relative --adapt_scale
使用moviepy为生成的视频加上音乐:
# add audio
!pip install moviepy
#为生成的视频加上音乐
from moviepy.editor import *
videoclip_1 = VideoFileClip("/home/aistudio/work/fullbody.MP4")
videoclip_2 = VideoFileClip("./output/result.mp4")
audio_1 = videoclip_1.audio
videoclip_3 = videoclip_2.set_audio(audio_1)
videoclip_3.write_videofile("./output/qiaoge.mp4", audio_codec="aac")