基础环境

  • 硬件:nvidia 3060ti

  • 虚拟化:pve8.1 / 基于官方cloud image的纯净ubuntu22.04 / docker 25.0.0

驱动及docker

有了上次折腾stable-diffusion,这次部署基础的nvidia环境就快多了,主要流程如下

  1. pve中给vm直通显卡
  2. lspci确定显卡已经识别
  3. apt install ubuntu-drivers-common
  4. 安装显卡驱动ubuntu-drivers autoinstall
  5. 安装nvidia container toolkit
  6. 验证vm和容器中的nvidia-smi可正常使用

准备测试数据

项目的输入是一张包含人脸的照片,一段wav格式的语音

输出为匹配语音的说话视频

因此需要准备一张含人脸的照片和一段wav语音

项目的huggingface提供了一些测试用例,直接下载一个即可使用

mac下的say命令

# 粤语女声
say --voice=Sinji -o audio.wav --data-format=LEF32@22050 做人呢,最重要的是开心

容器运行

项目的wiki里有提供一个docker镜像,但是看了下仓库,用的代码是比较旧的,一直没有更新。

但是开发测试阶段影响不大,于是先按照wiki试了下

docker pull wawa9000/sadtalker

docker run --rm --gpus "all" -v /root/sadtalker:/data wawa9000/sadtalker \
--driven_audio /data/audio.wav \
--source_image /data/image.jpg \
--result_dir /data/ \
--enhancer gfpgan

经过初步验证,用huggingface自带的样例可以跑,但是换自己的照片后

每次都要联网下载外部模型或数据,会出现EOF错误

issue里搜索可以找到一些类似的问题,从中看到项目作者回复:老版本联网下载,后续增加了新功能,支持纯离线完成,不再需要联网

宿主机运行

为了解决上述问题,我们用最新的代码直接在linux下跑试试。

下面是完全按照项目文档中的方法配置环境

git clone https://github.com/OpenTalker/SadTalker.git
cd SadTalker 
conda create -n sadtalker python=3.8
conda activate sadtalker
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
conda install ffmpeg
pip install -r requirements.txt
# Coqui TTS is optional for gradio demo. 
# pip install TTS

pip无限循环问题

在最后一步,虽然TTS模块的安装是可选的,但是处于好奇,准备一起安装下TTS模块,但是遇到了问题:pip会一直循环遍历包,直到达到上限抛了异常。

pip install TTS failure: 
...
pip._vendor.resolvelib.resolvers.ResolutionTooDeep: 200000

经过搜索,找到issue,并且使用评论中一个fork后改过的pip,解决了该问题。

pip install git+https://github.com/notatallshaw/pip@prefer-conflicting-causes

命令行

conda activate sadtalker
python inference.py \
--driven_audio data/audio.wav \
--source_image data/image.jpg \
--enhancer gfpgan

测试发现,可以正常合成视频,运行中GPU的使用情况如下

image-20240130135621486

webui

项目里通过gradio自带了web ui,文档里也提到了可以通过bash webui.sh快速启动。

在启动webui的过程中,同样遇到了一些问题:

  1. 启动时看到提示Coqui api没有配置,去coqui网站看了下,提示已经shutting down了:sweat_smile:

  2. 由于webui并不使用命令行用到的conda环境,而是单独在目录下安装了venv,所以依赖全部都得重新下载。且默认会安装TTS,所以也需要替换该venv中的pip,才能正常安装TTS,运行完整的脚本

  3. 跑起来后可能提示ffmpeg不存在,因为shell环境不一样,需要注意ffmpeg能被主程序执行

  4. 启动时代码异常:AttributeError: 'Row' object has no attribute 'style' · Issue #693 · OpenTalker/SadTalker (github.com)改gradio版本解决:pip install gradio==3.41.2

  5. 默认启动时监听127.0.0.1,如果是在服务器上跑,需要修改launcher.py

     demo.launch(server_name='0.0.0.0')
  6. 致命问题:一切就绪,从webUI提交任务后,后台抛异常

     ......
     >  - Can't parse 'dsize'. Sequence item with index 0 has a wrong type
     >  - Can't parse 'dsize'. Sequence item with index 0 has a wrong type

    调了各种参数都解决不了,最后在issue里发现早有人提过,且作者表示后续有时间修复,至今半年多了还未修复。因此webui目前属于不可用阶段

参考

macos say批量将文本转换为语音_mac say -o 音质-CSDN博客

macos - Error on say when output format is wave - Stack Overflow

文章目录