百度飞桨系列文章:
关注专栏:百度飞桨
情人节这天,爱豆居然对我「说情话」!? ̊ଳ ̊
情人节将至,当其他人还在苦思冥想如何准备情人节礼物时,我却已经收到了我最喜欢的爱豆说给我的情话视频~无论是女神还是男神,只要是你喜欢的,你全都能拥有!
不仅仅是让爱豆圆了你的梦想,现实生活中的你也将享受爱情的甜蜜!!
羞涩的你是否还在:抓耳扰腮给另一半准备惊喜⭐?绞尽脑汁如何给暗恋的人直击TA❤️的告白?
那来看看如何利用我们的技能让女神男神刮目相看吧,说不定最后就眉目传情,就有对象了。有对象的拿去跟对象表达爱也是可以的。
本项目使用的是paddlepaddle 2.x 框架,基于PaddleGAN实现的视频唇形同步模型Wav2lip, 它实现了爱豆口型与告白台词语音同步。 比如这样:
Wav2lip模型还可以将你本人的图片或者视频,进行唇形转换,其中音频用于驱动唇形合成,而图片/视频中的人物则根据此音频进行唇形合成。输出与目标语音相匹配的视频,Wav2lip 实现唇形与语音精准同步的关键在于,它采用了唇形判别器来强制生成器产生准确而逼真的唇部运动。从此动人情话不再害羞说出口,你也可以成为魅力四射的情感大师。
同时,Wav2Lip模型在判别器中使用了多连续帧,通过视觉质量损失来提升视觉的质量,这样解决了时间相关性的问题。
此外,本项目支持大家上传自己准备的爱豆/自己的人脸素材视频和告白台词音频, 合成任意想要的情话/情歌告白视频!!!只需在如下命令中的face参数和audio参数分别换成自己的人脸素材视频和告白台词音频路径,然后运行如下命令,就可以生成和台词音频同步的爱豆告白视频。程序运行完成后,会在当前文件夹下生成文件名为outfile参数指定的爱豆告白视频文件,该文件即为和台词音频同步的爱豆告白视频文件。
本项目中提供了demo展示所用到的爱豆人脸视频和告白台词音频文件。具体的参数使用说明如下:
代码基于飞桨的 BML CodeLab 编写
# 下载PaddlePaddle安装包
%cd /home/aistudio/work
# 从github上克隆PaddleGAN代码(如下载速度过慢,可用gitee源)
!git clone https://gitee.com/PaddlePaddle/PaddleGAN
# 安装所需安装包
!mkdir sndfile
%cd sndfile
!wget http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz
!tar xzvf libsndfile-1.0.28.tar.gz
%cd libsndfile-1.0.28
!./configure --prefix=/home/aistudio/build_libs CFLAGS=-fPIC --enable-shared
!make
!make install
%cd /home/aistudio/work/PaddleGAN
!pip install -r requirements.txt
%cd applications/
!export PYTHONPATH=$PYTHONPATH:/home/aistudio/work/PaddleGAN && python tools/wav2lip.py --face /home/aistudio/work/jieyi13s.mp4 --audio /home/aistudio/work/gaobai12s.m4a --outfile pp_gaobai_jieyi.mp4
要是想保存视频的话,可以直接在上述路径 work/PaddleGAN/applications/pp_gaobai_jieyi.mp4 下找到文件并下载到本地。
# display the output video
import cv2
import imageio
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML
import warnings
# video display function
def display(driving, fps, size=(8, 6)):
fig = plt.figure(figsize=size)
ims = []
for i in range(len(driving)):
cols = []
cols.append(driving[i])
im = plt.imshow(np.concatenate(cols, axis=1), animated=True)
plt.axis('off')
ims.append([im])
video = animation.ArtistAnimation(fig, ims, interval=1000.0/fps, repeat_delay=1000)
plt.close()
return video
# Display the output video
# 视频比较长的话,运行时间会稍长,建议把视频下载到本地预览,视频保存路径为'/home/aistudio/work/PaddleGAN/applications'
video_path = 'pp_gaobai_jieyi.mp4'
video_frames = imageio.mimread(video_path, memtest=False)
# 获得视频的原分辨率
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
HTML(display(video_frames, fps).to_html5_video())