虚拟人的快速实现:语音驱动图片

背景

由于业务需要,近期调研了如何使用开源工具快速的实现一个虚拟人,这个虚拟人来自于一个图片,我们需要做的是要让这个图片动起来,且图中人物的口型能够跟对应的语音对应上。为此,我了解几个开源的工具或模型,最终选择使用SadTalker来实现该功能。

本文是对SadTalker的使用以及其用到的基础模型做一总结。希望能够对想要实现该功能的同学有所帮助。

要达成的目标

需要有个开源工具,能够实现如下的输入输出,效果要尽可能的好,并且方便我们将该服务本地化。

输入:一段文字脚本、一个音色模型、一张人物图片

输出:一个视频,该视频中的人物能够开口说话,并且用指定的音色说出文字脚本的内容

SadTalker相关信息

Github地址:https://github.com/OpenTalker/SadTalker

hugging face地址:https://huggingface.co/spaces/vinthony/SadTalker

SadTalker的使用

关于SadTalker的使用,其官方文档已经写的比较全面了,这里不再赘述。只提一下其中一些参数的使用要点。

  1. 如果要用preprocess的full参数,则一定要加上–still参数,不然效果会很糟糕。
  2. free-view Mode参数可以用于控制头像的转动,其中参数的详细含义如下:

input_yawinput_pitch 和 input_roll 通常用于描述物体或相机在三维空间中的旋转角度,也被称为欧拉角或俯仰、偏航和翻滚角。

  • input_yaw 表示绕垂直于地面的轴旋转的角度,也称为偏航角。通常以正北方向为0度,顺时针方向为正方向,逆时针方向为负方向。
  • input_pitch 表示绕水平轴旋转的角度,也称为俯仰角。通常以水平面为0度,向上旋转为正方向,向下旋转为负方向。
  • input_roll 表示绕前后轴旋转的角度,也称为翻滚角。通常以垂直于水平面的轴为0度,向右旋转为正方向,向左旋转为负方向。
  1. 就我目前来看,如果我们需要头部动起来,那么还是不设置旋转参数的效果更好。

SadTalker使用到的模型

模型介绍

shape_predictor_68_face_landmarks.dat

shape_predictor_68_face_landmarks.dat是一个基于dlib库的人脸关键点检测模型文件,可以用于检测人脸的68个关键点,包括眼睛、眉毛、鼻子、嘴巴等部位的位置信息。这个模型文件在很多人脸识别、表情识别、人脸姿态估计等领域都有广泛的应用。(基于随机森林的回归算法)

Deep3DFaceReconstruction

**Deep3DFaceReconstruction**是一种基于深度学习的人脸三维重建技术。它通过利用深度学习算法对人脸图像进行分析和处理,从而实现对人脸的三维重建。这种技术可以广泛应用于计算机视觉、虚拟现实、增强现实等领域,为人们带来更加逼真的视觉体验。

Deep3DFaceReconstruction的核心技术是利用深度学习算法对人脸图像进行分析和处理,从而提取出人脸的三维信息。具体来说,它通过对大量的人脸图像进行训练,学习到了一种高效的特征提取方法,可以快速准确地提取出人脸的关键特征,包括面部轮廓、眼睛、鼻子、嘴巴等。然后,它通过对这些特征进行三维重建,从而得到了一个高度逼真的人脸三维模型。

Deep3DFaceReconstruction具有许多优点,例如可以实现快速高效的三维重建、可以处理不同角度和光照条件下的人脸图像、可以处理不同种族和性别的人脸图像等。此外,它还可以应用于人脸识别、人脸动画、人脸表情识别等领域,具有广泛的应用前景。

auido2pose_00140-model.pth

auido2pose_00140-model.pth是一个训练好的PyTorch模型文件,用于音频到人体姿态的转换。该模型可以根据输入的音频数据,预测出对应的人体姿态信息。在这个文件中,auido2pose_00140-model.pth表示训练过程中的第140个epoch。在每个epoch中,模型会对训练数据进行一次完整的训练,以更新模型参数。通常情况下,训练的epoch次数越多,模型的预测效果会越好,但是也会增加训练时间和计算资源的开销。该模型文件可以被应用于很多领域,如虚拟现实、运动分析、人体姿态识别等。(PoseVAE模型,基于transformer模型的)

auido2exp_00300-model.pth

auido2exp_00300-model.pth是一个训练好的模型文件,用于将音频数据转换为对应的面部表情。该模型通过分析音频数据和面部表情数据之间的关系,可以预测出对应的面部表情信息。auido2exp_00300-model.pth可以被应用于很多领域,如虚拟现实、面部表情识别、情感分析等。通过分析音频数据和面部表情数据之间的关系,该模型可以实现对面部表情的快速、准确的预测。(ExpNet模型,基于transformer模型的)

wav2lip.pth

wav2lip.pth是一个基于深度学习的语音和口型同步技术的模型文件,可以将音频和视频中的语音和口型同步,生成逼真的合成视频。该模型使用了深度学习中的卷积神经网络和循环神经网络等技术,实现了对音频和视频的特征提取和匹配。wav2lip.pth可以被应用于很多领域,如虚拟现实、视频编辑、电影制作等。通过将音频和视频进行同步,可以实现更加逼真的人机交互和视频合成效果,提高用户体验。(基于循环神经网络)

mapping_00109-model.pth.tar

mapping_00109-model.pth.tar的作用是将输入音频中学习到的逼真的3D运动系数转换为对应的基础向量,从而生成一个逼真的3D人脸。具体来说,mappingNet模型学习从显式的3DMM运动系数(头部姿态和表情)到隐式的基础向量之间的关系,并将这个关系应用于输入音频中学习到的逼真的3D运动系数,从而生成对应的基础向量。最后,这个基础向量与3DMM模型中的基础向量相结合,生成一个逼真的3D人脸。(基于GAN神经网络)

facevid2vid_00189-model.pth.tar

facevid2vid_00189-model.pth.tar是一个基于深度学习的人脸动作转换模型,可以将输入的人脸视频转换成指定动作的人脸视频。简单来说,可以将上述3D模型视频转为穿了图片皮肤的视频。(基于GAN神经网络)

GFPGANv1.4.pth

GFPGANv1.4.pth是一种图像超分辨率重建模型,用于将低分辨率图像(LR)提升至高分辨率图像(HR)。它是由腾讯优图实验室提出的一种基于生成对抗网络(GAN)的方法,可以在不失真的情况下提高图像质量。GFPGANv1.4.pth是该模型的一个预训练权重文件,可以用于对新的低分辨率图像进行重建。该模型可以应用于许多领域,如数字娱乐、医学影像、安防监控等。(基于GAN神经网络)

处理流程中的相关模型

  1. 对原始图片进行裁剪,这一步用到shape_predictor_68_face_landmarks.dat算法模型识别出人脸,并使用CV2进行裁剪处理。
  2. 将原始图片中的人脸识别成一个3D人脸模型系数,并存储在mat格式的文件中。
  3. 3DMM提出给定视频中的眨眼动作。(将视频中的人脸识别成一个3D人脸模型系数,并存储在mat格式的文件中。)
  4. 3DMM提出给定视频中的姿势动作。(将视频中的人脸识别成一个3D人脸模型系数,并存储在mat格式的文件中。)
  5. 从音频中提取出姿势、表情以及唇形,并存储在mat格式的文件中。
  6. 使用上述系数渲染出一个3D人脸模型,并用ffmpeg命令将音频与视频做结合。
  7. 将视频与图片做结合。
  8. 效果增强,使视频变得更加清晰。

模型处理的时延测试

音频时长:10秒

处理总时间:366054毫秒(6分钟)

模型处理时间总占比:97.20%

测试机器配置:半张NVIDIA Tesla T4显卡、显存:8GB

处理过程模型处理时间(单位:毫秒)处理时间占比
图片的预处理shape_predictor_68_face_landmarks.dat
epoch_20.pth92962.54%
眨眼视频的处理shape_predictor_68_face_landmarks.dat
epoch_20.pth4094811.19%
姿势视频的处理shape_predictor_68_face_landmarks.dat
epoch_20.pth300448.21%
音频提出系数auido2exp_00300-model.pth
auido2pose_00140-model.pth
wav2lip.pth10940.30%
3D人脸模型渲染mapping_00109-model.pth.tar12231233.41%
视频与图片做结合facevid2vid_00189-model.pth.tar66461.82%
效果增强gfpgan14544939.73%

可以看到,模型处理过程中,最耗时的是3D人脸模型渲染以及效果增强,两者耗时占比超70%。

SadTalker的部署与服务

SadTalker的项目代码是用Python编写的,我们可以用FastAPI很快速的把它改造为能够通过HTTP对外提供服务的方式,并且在服务器中用uvicorn启动该服务。这样就可以在自己的本地环境中稳定的提供服务了,在有代码变更的情况下,也无需手动重启服务。

我们的服务还与腾讯云COS存储打通了,语音和图片从COS中读取,并且将处理成功的视频文件写入到COS中,并将链接地址返回。

总结

本文是对SadTalker的使用以及其用到的基础模型做了一下总结,其中包括了模型的介绍以及各模型处理时长的试验结果,但并没有涉及到模型的原理以及优化细节。对于针对于业务的优化,可以后续视情况来续写分享。

参考资料

SadTalker Github地址:https://github.com/OpenTalker/SadTalker

SadTalker hugging face地址:https://huggingface.co/spaces/vinthony/SadTalker

SadTalker最佳实践:https://github.com/OpenTalker/SadTalker/blob/main/docs/best_practice.md

FastAPI:https://github.com/tiangolo/fastapi

发表评论

电子邮件地址不会被公开。 必填项已用*标注