1 Wav2Lip模型介绍
2020年,来自印度海德拉巴大学和英国巴斯大学的团队,在ACM MM2020发表了的一篇论文《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild 》,在文章中,他们提出一个叫做Wav2Lip的AI模型,只需要一段人物视频和一段目标语音,就能够让音频和视频合二为一,人物嘴型与音频完全匹配。
对口型的技术,此前其实已经有很多,甚至在基于深度学习的技术出现之前,就有一些技术使角色的嘴唇形状与实际的语音信号相匹配。但这Wav2Lip 在目前的众多方法中,显示出了绝对优势。现有的其它方法,主要是基于静态图像,来输出与目标语音匹配的唇形同步视频,但对于动态的、在讲话的人物,唇形同步往往效果不佳。而 Wav2Lip 则可以直接将动态的视频,进行唇形转换,输出与目标语音相匹配的视频结果。
论文地址:论文地址
2 Wav2Lip模型结构
Wav2Lip模型是一个两阶段模型。
- 第一阶段是:训练一个能够判别声音与嘴型是否同步的判别器;
- 第二阶段是:采用编码-解码模型结构(一个生成器 ,两个判别器);
也可基于GAN的训练方式,在一定程度上会影响同步性,但整体视觉效果稍好。
在模型训练阶段,作者提出了两个新指标, “Lip-Sync Error-Distance”(越低越好)和 “Lip-Sync Error-Confidence”(越高越好),这两个指标可以测量视频的中的唇语同步精度。结果发现,使用Wav2Lip生成的视频几乎和真实的同步视频一样好。
需要注意的是,这个模型只在LRS2上的训练集上进行了训练,在对其他数据集的训练时需要对代码进行少量修改。
生成效果如下所示
3 Wav2Lip部署及使用
(1)github项目下载:
git clone https://github.com/Rudrabha/Wav2Lip
(2)运行环境构建
conda环境准备详见:annoconda安装与使用
conda create -n wav2lip pyton==3.9
conda activate wav2lip
conda install ffmpeg
cd Wav2lip
pip install -r requirements.txt
(3)预训练模型获取
预训练模型下载:预训练模型地址
下载完成后解压,并按如下目录方式存放
- wav2lip.pth存放到checkpoints目录下
- wav2lip_gan.pth存放到checkpoints目录下
- lipsync_expert.pth存放到checkpoints目录下
- visual_quality_disc.pth存放到checkpoints目录下
- s3fd.pth存放到
face_detection/detection/sfd/目录下
(4)视频合成
- 通过视频和音频进行合成
python inference.py --checkpoint_path checkpoints/wav2lip_gan.pth --face data/demo.mp4 --audio data/demo.wav
- 通过图片和音频进行合成
python inference.py --checkpoint_path checkpoints/wav2lip_gan.pth --face data/demo.png --audio data/demo.wav
最后,生成的新视频文件保存在 results/result_voice.mp4
,生成的中间文件存放在 temp
下
4 问题处理
如遇到处理过程报错,显示没有检测到头像,如下所示
ValueError: Face not detected! Ensure the video contains a face in all the frames.
这个一般是由于片头或者片尾视频帧没有检测到人脸,解决方法是使用ffmpeg或者剪辑软件,将片头或片尾相应的帧剪掉,保存为一个新的视频,合成时作为输入,即可成功