提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
该模型能够利用输入的语音信号生成与之高度匹配的嘴唇动作,实现逼真的语音驱动数字人物动画效果
。
模型结构:
wav2lip模型基于生成对抗网络(GAN)设计,包含生成器和判别器两个主要部分。生成器负责生成逼真的面部动画,而判别器的目标是区分生成的动画与真实的面部动画。
模型训练分为两个阶段:第一阶段是专家音频和口型同步判别器预训练;第二阶段是GAN网络训练,包括生成器和两个判别器(专家音频和口型同步判别器和视觉质量判别器)。
技术特点:
wav2lip引入了一个在真实视频中预训练的专家口型同步判别器,用于判断音频和口型是否同步,这个专家判别器在口型同步判别任务上比基于像素的人脸重建方法更精准
。
训练过程中,专家判别器保持冻结状态,以保证判断结果不受伪影的干扰
。
应用场景:
wav2lip因其能够提供高质量的语音到面部动画转换,在多个领域显示出广泛的应用前景,如VR/AR环境、电影和游戏制作、智能语音助手等
。
Wav2Lip-HD项目:
Wav2Lip-HD项目提供了语音驱动人脸和超分辨率重建两种模型,用于实现数字人的语音和图像方面的功能,可以快速使用这两种模型完成高清数字人形象的打造
。
超分辨率重建技术:
与wav2lip模型结合使用的还有图像超分辨率模型Real-ESRGAN,主要用于数字人的图像处理,通过将低分辨率的图像进行处理,生成高分辨率的图像
。
模型性能:
wav2lip模型在具有挑战性的基准上的广泛定量评估表明,生成的视频的唇同步准确性几乎与真实同步视频一样好
。
这些信息提供了wav2lip模型的基本理解,包括其结构、技术特点、应用场景以及与其他技术的结合使用。
一、wav2lip是什么?
wav2lip是一个先进的深度学习模型,专注于将音频波形直接转换为面部动画,尤其关注唇部动作的生成与同步
二、使用步骤
1.引入库
代码如下(示例):
import tempfile
import time
import uuid
import warnings
from glob import glob
import pdb
import cv2
import numpy as np
from tqdm import tqdm
import audio
from utils import img_warp_back_inv_m
warnings.filterwarnings('ignore')
mel_step_size =16
def load_model(model_path):
import onnxruntime as ort
sess_opt = ort.SessionOptions()
sess_opt.intra_op_num_threads =8
sess = ort.InferenceSession(model_path, sess_options=sess_opt, providers=['CUDAExecutionProvider','CPUExecutionProvider'])return sess
def post_process_frame(params):
p, f, c, af, inv_m = params
y1, y2, x1, x2 = c
p = cv2.resize(p.astype(np.uint8),(x2 - x1, y2 - y1))
af[y1:y2, x1:x2]= p
f =img_warp_back_inv_m(af, f, inv_m)return f
class Runner(object):
def __init__(self, args):
self.batch_size = args.batch_size
self.img_size =(256,256)
self.fps =25
self.a_alpha =1.25
self.audio_smooth = args.audio_smooth
model_a_path ='weights/wav2lip/model_a_general.onnx'
model_g_path ='weights/wav2lip/model_g_general.onnx'
self.model_a =load_model(model_a_path)
self.model_g =load_model(model_g_path)print("Model loaded")
self.avatars ={}
avatar_info_file_list =glob(f'app/assets/*.pkl')for avatar_info_file in avatar_info_file_list:
try:
with open(avatar_info_file,"rb") as f:
avatar_info = pickle.load(f)
avatar_name, ext = os.path.splitext(os.path.basename(avatar_info_file))
self.avatars[avatar_name]= avatar_info
except:print("Error {}".format(avatar_info_file))print('avatar_list: ',list(self.avatars.keys()))
def get_input_imginfo_by_index(self, idx, avatar):return avatar['frame_info_list'][idx]
def get_input_mel_by_index(self, index, wav_mel):
T =5
mel_idx_multiplier =80./ self.fps
start_idx =int((index -(T -1)// 2) * mel_idx_multiplier)if start_idx <0:
start_idx =0if start_idx + mel_step_size >len(wav_mel[0]):
start_idx =len(wav_mel[0])- mel_step_size
mel = wav_mel[:, start_idx: start_idx + mel_step_size]return mel
def get_intput_by_index(self, index, wav_mel, avatar):
mel = self.get_input_mel_by_index(index, wav_mel)
frame_num = avatar['frame_num']
idx = index % frame_num
idx = idx if index // frame_num % 2 == 0 else frame_num - idx - 1
input_dict ={'mel': mel}
input_imginfo = self.get_input_imginfo_by_index(idx, avatar)
input_dict.update(copy.deepcopy(input_imginfo))return input_dict
AI高清数字人源码,本地部署,无限形象无限使用,更高自由度定制,可以做很多自动化视频项目
总结
今天介绍的这个AI高清数字人本地部署的源码,用的是wav2lip256的模型,从目前来看,我觉得它是性价比最高的AI数字人方案了。
不管是生成速度,清晰度,口型的匹配度,还有性价比,对电脑配置的要求,这些方面综合均衡起来是最好的一个方案了。有了这个源码,可以做很多这种自动化的生产这个数字人视频的项目,比如说结合这个AI大模型,给一个关键词,让它自动生成内容,自动做成口播视频,然后自动上传到自媒体平台。这也是我下一步的这个计划,准备做这个数字人自动化的一些东西,如果对这个感兴趣可以持续关注我。(+ zhiweizhiyuan)
版权归原作者 weixin_42158644 所有, 如有侵权,请联系我们删除。