欢迎访问我的网站,希望内容对您有用,关注公众号后台领取免费AI学习资料。

嘴型同步模型Wav2Lip

算法 迷途小书童 6年前 (2021-03-05) 18959次浏览 5个评论

软硬件环境是

  • ubuntu 18.04 64bit
  • nvidia gtx 1070Ti
  • cuda 11
  • anaconda with python 3.7

视频看这里

Youtube

Bilibili

简介

2020年,来自印度海德拉巴大学和英国巴斯大学的团队,在 ACM MM2020 发表了的一篇论文 《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild 》,在文章中,他们提出一个叫做 Wav2Lip 的 AI 模型,只需要一段人物视频和一段目标语音,就能够让音频和视频合二为一,人物嘴型与音频完全匹配。

算法流程

Wav2Lip 的主要原理是将音频信号与面部图像进行联合训练,以实现从音频信号预测出与之匹配的唇形。

具体来说,Wav2Lip 的算法流程如下

首先,从音频中提取出相应的语音特征,例如 MFCC、Mel 频谱等。接着,将音频特征与面部图像进行联合训练,使用一种生成对抗网络(GAN)的结构,学习出一个从音频特征到唇形图像的映射。在生成唇形图像时,首先对输入的音频进行预处理,包括进行采样、滤波、预测等操作。然后,将预处理后的音频特征输入到已经训练好的生成器中,生成与之匹配的唇形图像。最后,将生成的唇形图像与原始视频进行融合,得到最终的结果。

快速体验

可以先到作者提供的体验站体验一番,地址是:https://bhaasha.iiit.ac.in/lipsync/example3/

嘴型同步模型Wav2Lip

按照上图中的选择视频和音频上传即可同步。

实践

准备环境

首先使用 conda 创建新的虚拟环境,然后激活这个环境

conda create -n lip python=3.7
conda activate lip

接着来到官方网站,使用 git 克隆代码,或者直接下载源码压缩包解压,安装依赖

git clone https://github.com/Rudrabha/Wav2Lip.git
pip install -r requirements.txt

在 windows 平台上,使用了阿里云的 pip 源,发现找不到 torch 1.1 的版本,后来使用了最新稳定版1.7也没有问题,其它依赖库使用最新版也是 ok 的。

接下来需要安装 ffmpeg,这是音视频处理的神器,ubuntu 版本使用 apt 安装

sudo apt install ffmpeg

windows 用户的话,可以到 https://github.com/BtbN/FFmpeg-Builds/releases 下载,解压后将 bin 对应的路径添加到系统环境变量 PATH 中。

准备素材

下面开始准备素材,我们把官方体验站上的测试视频下载下来,使用下面的命令

wget --no-check-certificate https://bhaasha.iiit.ac.in/lipsync/static/samples/game.mp4

这个测试视频只有3秒,那接下来就去找个对应3秒的音频。如果能有现成的音频文件最好,如果没有的话,我的做法是这样的,从某个视频文件中提取音频,然后进行裁剪,这里需要的时长是三秒。这两步会使用到 ffmpeg 这个工具

# 视频裁剪,从第10秒开始,总时长是3秒,目标视频的音视频编码格式与原始的保持一致
ffmpeg -ss 00:00:10 -t 00:00:03 -i input.mp4 -vcodec copy -acodec copy test.mp4

# 从视频中提取音频
ffmpeg -i test.mp4 -vn test.mp3

准备模型文件

第一个需要的模型是脸部检测预训练模型,下载地址是: https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth,下载后放到目录 face_detection/detection/sfd 中,并重命名为 s3fd.pth。脸部模型主要

接下来去下载模型文件,这里作者提供了3个,可以任选一个,后两个优于第一个。它们的区别如下表所示,本文使用的是 Wav2Lip + GAN,下载地址:https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/EdjI7bZlgApMqsVoEUUXpLsBxqXbn5z8VTmoxp55YNDcIA?e=n9ljGW ,下载后放在项目根目录

嘴型同步模型Wav2Lip

运行代码

执行下面的命令将视频 test.mp4 和音频 3s.mp3 进行合成

python inference.py --checkpoint_path wav2lip_gan.pth --face test.mp4 --audio 3s.mp3

最后,生成的新视频文件保存在 results/result_voice.mp4,生成的中间文件存放在 temp 下,像单独处理后的音频 temp.wav、视频 result.avi 等。

FAQ

ValueError: Face not detected! Ensure the video contains a face in all the frames.

这个一般是由于片头或者片尾没有脸,解决方法也很简单,使用 ffmpeg 或者剪辑软件,将片头或片尾相应的帧剪掉就可以了

OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\videoio\src\cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): C:\Users\gabri\Desktop\2019-11-22_13\a.avi in function 'cv::icvExtractPattern'.

编辑 inference.py,将文件中的 temp/result.avi 改为 temp/result1.mp4,共2处

高清版本看这里

Youtube

Bilibili

下载地址

链接:https://pan.quark.cn/s/4a207febafeb

参考资料

喜欢 (2)

您必须 登录 才能发表评论!

(5)个小伙伴在吐槽
  1. 有没有高清模型呀
    匿名2022-07-16 20:37
  2. 别的模型请问怎么运行?
    匿名2022-05-13 00:50
  3. 请问运行之后报错TypeError: mel() takes 0 positional arguments but 2 positional arguments (and 3 keyword-only arguments) were given 是哪里的问题
    匿名2022-02-14 02:24