本地部署SadTalker,让你的照片开口说话

SadTalker是一个开源项目,专注于实现基于单张图片的音频驱动人脸动画生成。它通过学习从音频中生成3DMM(3D Morphable Models)的头部姿态系数和表情系数,并隐式调制一个3D感知的人脸合成模型,来解决不自然头部移动、扭曲表情和身份编辑等问题。

SadTalker能够捕捉和模拟人类面部表情和口型变化,呈现出更加生动、自然的表情和动作,增强用户的沉浸感和交互体验。

项目地址:https://github.com/OpenTalker/SadTalker

项目论文:https://sadtalker.github.io/

上传图片时,图片名请勿包含中文字符,否则会报错。

在线体验:SadTalker - a Hugging Face Space by vinthony

在线文字转语音:Text To Speech - 在线文本转语音

课程体验地址:pic2vid.kedaya.online

账号:kedaya,密码:kedaya

本文介绍如何在本地部署SadTalker,以便可以在自己的电脑上使用图片和语音生成动画。

本次部署基于Windows10操作系统,使用conda虚拟环境。

1、在conda中创建并激活虚拟环境:

#此项目基于Python3.8开发
#创建名为sadtalker的虚拟环境
conda create -n sadtalker python=3.8
#激活sadtalker虚拟环境
conda activate sadtalker

2、安装git、ffmpeg

conda install git ffmpeg

3、使用git命令下载项目文件,下载后会保存到当前目录的SadTalker文件夹

git clonehttps://github.com/OpenTalker/SadTalker.git
#切换到SadTalker文件夹
cd SadTalker 

4、安装pytorch

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-urlhttps://download.pytorch.org/whl/cu113

5、修改pip源,清华的pip源中缺少tb-nightly库,将源修改为阿里云的pip源

pip config set global.index-urlhttps://mirrors.aliyun.com/pypi/simple

6、安装依赖

pip install -r requirements.txt

7、下载模型

下载预训练模型:

谷歌网盘

百度网盘 (Password:sadt)

下载GFPGAN离线补丁

谷歌网盘

百度网盘 (Password:sadt)

将下载好的sadtalker.zip解压后重命名为checkpoints,复制到SadTalker文件夹下

将下载好的gfpgan解压后,将里面的weigths/GFPGANv1.4.pth文件,复制到SadTalker虚拟环境的Lib\site-packages\gfpgan\weights文件夹下

首先,在conda命令行通过conda indo查看 active env location文件夹路径。

然后,打开虚拟环境文件夹下的Lib\site-packages\gfpgan\weights文件夹,将GFPGANv1.4.pth到这个文件夹中。

8、修改虚拟环境下的site-packages/basicsr/data/degradations.py文件

将第8行:

from torchvision.transforms.functional_tensor import rgb_to_grayscale

修改为:

from torchvision.transforms.functional import rgb_to_grayscale

9、替换app_sadtalker.py文件

下载app_sadtalker.py文件

替换SadTalker文件夹下的app_sadtalker.py

10、修改SadTalker\src\test_audio2coeff.py文件的第102到105行:

由:

            savemat(os.path.join(coeff_save_dir, '%s##%s.mat'%(batch['pic_name'], batch['audio_name'])),  
                    {'coeff_3dmm': coeffs_pred_numpy})

            return os.path.join(coeff_save_dir, '%s##%s.mat'%(batch['pic_name'], batch['audio_name']))

修改为:

            savemat(os.path.join(coeff_save_dir, '%s %s.mat'%(batch['pic_name'], batch['audio_name'])),
                    {'coeff_3dmm': coeffs_pred_numpy})

            return os.path.join(coeff_save_dir, '%s %s.mat'%(batch['pic_name'], batch['audio_name']))

11、如果想在局域网下访问,或者使用frp+nginx进行内网穿透,可以设置为允许局域网访问

修改SadTalker文件夹下的app_sadtalker.py文件最后一行,将username和password替换成你的用户名和密码:

#auth=("kedaya", "kedaya")为设置访问密码
demo.launch(server_name='0.0.0.0',server_port=7860, auth=("username", "password"))