VOCA 和 MakeItTalk 环境配置和使用方法

本文总结一下 VOCA 和 MakeItTalk 这几个相关的 Audio-Driven-Animation 工具的环境配置和使用方法。

VOCA

官网:https://github.com/TimoBolkart/voca

VOCA 是 CVPR19 的一篇论文:“Capture, Learning, and Synthesis of 3D Speaking Styles.”,它提出了一种新的audio/speech-driven facial animation creation framework,从 audio 生成三维脸部网格动画,结果非常惊艳。

环境配置

按照官网的步骤顺序一步一步来。这里的环境以 Ubuntu 18.04 和 RTX 3080 desktop 为例。

1. Set-up environment

这个参考官网的流程一步一步来。唯一例外是,安装 requirements.txt 中的 pyrender 时,建议安装一个老的版本:

   pip install pyrender==0.1.39

它更稳定一些,某些渲染功能不容易出错。其他的没遇到问题。

2. Data download

(1) Data to run the demo

  • Download the trained VOCA model, audio sequences, and template meshes from MPI-IS/VOCA. 这里的 model 只需要下载 trained model,大概 14M 那个文件,而不是 training data,这个有些大。model 文件下载并解压后全放入 ./model 路径下,audio 文件下载并解压后全放入 ./audio 路径,template meshes 下载并解压后全放入 ./template 路径下。不过,repo 中的 ./template 下已经提供了一个 FLAME_sample.ply 头模 mesh 供使用。
  • Download FLAME model from MPI-IS/FLAME. 这里有两个版本,2017 和 2019,当然都可以用。下载并解压后全放入 ./flame 路径下。
  • Download the trained DeepSpeech model (v0.1.0) from Mozilla/DeepSpeech (i.e. deepspeech-0.1.0-models.tar.gz)。这个文件近 1.4G。下载并解压后全放入 ds_graph路径下,它应该是一个名为 models的文件夹,内部有包括 out_graph.pb 在内的多个文件。

这几个文件都属于 MPI 版权的,每个都要注册后才能下载,并且同意其版权管理。

(2) Data used to train VOCA

training data 都给出了,一共有 12 个人的数据,每个文件都几百 G,有些大。只是跑 demo 的话就不需要下载了。

pyrender 环境配置和问题解决

参考:https://github.com/TimoBolkart/voca/issues/29

接下来使用 demo 中的 run_voca.py 代码时,它借用 pyrender 来渲染最终生成的 meshes 到图片上,再用 ffmpeg 合成最终的视频。但是,你很可能会遇到如下问题:

ValueError: Failed to initialize Pyglet window with an OpenGL >= 3+ context. If you're logged in via SSH, ensure that you're running your script with vglrun (i.e. VirtualGL). The internal error message was "Cannot connect to "None""

问题的原因是 pyrender 的 OffscreenRender 功能和 Pyglet 出现冲突,而在 Server 端我们必须要使用它的 OffscreenRender 的功能。你可以从官网随便找另一个 pyrender OffscreenRender 的 example 简单验证一下,一定会得到错误结果。

问题的解决方法分两步:

1. 配置 pyrender 的 OSMesa 环境

具体参见官网链接:Getting Pyrender Working with OSMesa。它一共有两个步骤。

(1) Installing OSMesa

这个建议采用官网给出的 Building From Source 方法。其中几个细节:

  • 可以用 mesa-18.3.3 版本不变;
  • PREFIX 安装路径建议换一个自定义的路径,不过记得使用绝对路径,例如/home/username/dev/mesa_install
  • 记得最后按要求更新 ~/.bashrc;

(2) Installing a Compatible Fork of PyOpenGL

这里给出的 repo 链接没法用,正确的其实是https://github.com/mmatl/pyopengl。clone 后,注意在该路径的外部使用 pip install ./pyopengl

不过,似乎这一步做不做并不影响 VOCA 中的 pyrender OSMesa 的使用。

2. 修改 pyrender 代码

在你的 pyrender python 代码的最开头加上:

import os
os.environ["PYOPENGL_PLATFORM"] = "osmesa"

这样 pyrender 的 OffscreenRender 功能应该就可以正常运行了。至于下面的 run_voca 代码,可以使用另一个别人提供的渲染代码,无需我们自己修改。

demo 运行

Run on untextured template mesh

python run_voca.py --tf_model_fname './model/gstep_52280.model' --ds_fname './ds_graph/models/output_graph.pb' --audio_fname './audio/test_sentence.wav' --template_fname './template/FLAME_sample.ply' --condition_idx 3 --out_path './animation_output'

这里你应该可以在 ./animation_output/meshes 中得到最终的 meshes。不过,pyrender 渲染依然有误,因为 VOCA 的 utils/rendering.py 中负责渲染的代码似乎有问题,即使增加了上面的 osma 环境后还是不能用。此时,可以使用别人提供的另一个代码来重新渲染所有的 meshes 并合并成最终视频:visualize.py。下载它到根目录。使用方法很简单:

python3 visualize.py --objects_path ./animation_output/meshes/ --audio_fname ./audio/test_sentence.wav --out_path ./animation_output

不过,该代码只能渲染 untextured mesh,之后的 texture mesh 就需要自己重新修改 utils/rendering.py 才行。

####

Search

    Table of Contents