AniTalker介绍

AniTalker是由来自上海交大X-LANCE实验室和思必驰AISpeech的研究人员推出的一个对口型说话视频生成框架,能够将单张静态人像和输入的音频转换成栩栩如生的动画对话视频。该项目已于今年五月开源,github项目地址:https://github.com/X-LANCE/AniTalker

相关技术详解可以参考这篇文章:AniTalker - 上海交大开源的对口型说话视频生成框架

前几天在部署这个项目时遇到了不少坑,同时也积累了一点经验,于是打算写一篇博客来记录一下AniTalker的本地部署方式。参考官方录制的视频教程:https://www.youtube.com/watch?v=x1ZP3e830DY

B站搬运传送门:AniTalker本地部署教程

环境配置

为了便于相关包的管理,推荐使用Anaconda创建虚拟环境,请事先下载Anaconda并配置对应的环境变量。

将项目下载到本地后,用conda命令创建对应python版本的虚拟环境后打开,并在该环境下安装对应的包。

conda create -n anitalker python==3.9.0
conda activate anitalker
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
pip install -r requirements.txt
pip --default-timeout=1688 install torch==1.10.0+cu113 torchvision==0.11.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple

这里我用的是清华镜像来下载torch和torchvision的gpu版本。下载过程可能较为漫长,请耐心等待。

注意:在安装时请务必确保在对应的虚拟环境下,否则可能会出现不必要的错误。检查终端前的环境是否显示为(anitalker) 如下图所示

Snipaste_2024-10-14_22-57-44.png

下载预训练模型

AniTalker使用HuBERT和MFCC两种音频处理模型,我们需要将预训练好的模型从Huggingface下载并安放到对应的文件夹下。在AniTalker根目录下创建ckpts文件夹,并从AniTalker_ckpts中下载对应的模型文件后放置在该文件夹下。其中中文模型需要单独再下载。

文件夹结构如下:

ckpts/
├── chinese-hubert-large
├──── config.json
├──── preprocessor_config.json
├──── pytorch_model.bin
├── stage1.ckpt
├── stage2_pose_only_mfcc.ckpt
├── stage2_full_control_mfcc.ckpt
├── stage2_audio_only_hubert.ckpt
├── stage2_pose_only_hubert.ckpt
└── stage2_full_control_hubert.ckpt

本地测试

环境配置完成、模型下载到对应的文件夹之后,打开这个项目提供的前端框架,也就是对应code文件夹下的webgui.py文件并运行:

这个界面可以直观地调整的一些图像参数,也可以选择不同的模型进行视频生成。你也可以在AniTalker根目录,打开命令行通过指定对应的文件路径和对应的模型来进行测试。示例代码如下:

python ./code/demo.py --infer_type mfcc_pose_only --stage1_checkpoint_path "./ckpts/stage1.ckpt" --stage2_checkpoint_path "./ckpts/stage2_pose_only_mfcc.ckpt" --test_image_path "./test_demos/portraits/Monalisa.jpg" --test_audio_path "./test_demos/audios/Monalisa.wav" --result_path "./outputs/monalisa_mfcc" --control_flag --seed 0 --pose_yaw 0.25 --pose_pitch 0 --pose_roll 0

注意:需要修改webgui.py中的模型路径与前面的模型下载的文件路径相对应,否则会无法运行。源码中写的文件路径对应的是在code文件夹下的ckpts文件夹,而且文件名也与原模型文件名不同。

下面两个是我在本地跑的两个demo(普朗克的大胡子把嘴型挡住了显得不是很明显哈哈哈哈)

毫无代价唱最幸福的歌