本地部署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文件
替换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"))