SadTalker 模型应用

        SadTalker 是一个使用静态人物图片与音频文件自动合成人物说话的视频动画开源模型。它从音频中生成 3DMM(3D Morphable Model,三维可变形模型)运动系数,包括头部姿势和表情等信息,通过对音频特征的分析和学习,将其转化为人物头部与面部的运动参数,并映射到面部渲染器的三维关键点空间,以生成最终的视频。该模型支持中英文在内的多种语言,根据自己的需求进行参数定制和调整,获得符合自己期望的视频动画效果。在内容创作、智能交互、情感分析和表达等诸多领域有着广泛的应用。

        首先调用 init_path 函数对模型做初始化操作,model_sad_talker_path 参数为模型的 checkpoints 路径,第二个参数为模型配置路径,size 参数为控制程序在进行面部渲染时生成图像的大小,preprocess 参数为用户选择的预处理方法调整输入图像的尺寸、内容或边界。接下来构造了三个模型对象:Audio2Coeff 为将音频转换成系数的对象,CropAndExtract 为裁剪并提取特征的对象,AnimateFromCoeff 为从系数生成动画的对象,cuda 参数表示指定使用 CUDA 支持的 GPU 进行处理。

from utils.sad_talker.src.utils.init_path import init_path
from utils.sad_talker.src.test_audio2coeff import Audio2Coeff
from utils.sad_talker.src.utils.preprocess import CropAndExtract
from utils.sad_talker.src.facerender.animate import AnimateFromCoeff

path = init_path(
    model_sad_talker_path,
    os.path.join(os.path.split(sys.argv[0])[0], config_dir),
    size,
    None,
    preprocess
)
audio_to_coeff = Audio2Coeff(path, 'cuda')
preprocess_model = CropAndExtract(path, 'cuda')
animate_from_coeff = AnimateFromCoeff(path, 'cuda')

        接下来调用 preprocess_model 对象的 generate 方法来对图片提取 3DMM 运动系数, pic_path 参数为图片素材的存放路径, frame_dir 参数为处理帧的存放路径,preprocess 参数为调整输入图像的尺寸、内容或边界的预处理参数,source_image_flag=True 标记是否使用源图像, pic_size=size 为指定图片的尺寸大小。

first_coeff_path, crop_pic_path, crop_info = preprocess_model.generate(
    pic_path,
    frame_dir,
    preprocess,
    source_image_flag=True,
    pic_size=size
)

        再然后是调用 audio_to_coeff 对象的 generate 方法来对音频数据进行处理,其中 get_data 方法用于获取音频数据,该方法的 first_coeff_path 参数为初始系数路径, audio_path 参数为传入的音频文件存放路径,device 参数为设备类型,可以是 CPU 或 CUDA 支持的 GPU, still 参数用于控制生成视频时头部运动的幅度。audio_to_coeff 对象的 generate 方法的 save_dir 参数指定了保存结果的路径, pose_style 参数允许用户根据需求选择不同的姿势风格参与到程序的处理或生成任务中。

coeff_path = audio_to_coeff.generate(
    get_data(first_coeff_path, audio_path, device, None, still),
    save_dir,
    pose_style,
    None
)

        接下来调用 animate_from_coeff 对象的 generate 方法来生成视频动画。其中 get_facerender_data 方法用于获取面部渲染数据,coeff_path 参数为前面生成的系数路径,crop_pic_path 参数为裁剪后图片路径,first_coeff_path 参数为初始系数路径,audio_path 参数为音频文件路径, batch_size 参数为批处理大小,expression_scale 参数为表情缩放比例, still_mode 参数指定人物头部运动幅度,preprocess 参数限制图像的尺寸、内容或边界,size 参数为渲染结果尺寸。animate_from_coeff 对象的 generate 方法的第二个参数 save_dir 指定保存结果的目录,pic_path 参数为输入图片素材的路径,crop_info 参数为裁剪图片的信息, enhancer 参数为增强器, background_enhancer 参数为背景增强器。

result = animate_from_coeff.generate(
    get_facerender_data(
        coeff_path,
        crop_pic_path,
        first_coeff_path,
        audio_path,
        batch_size,
        None,
        None,
        None,
        expression_scale=expression_scale,
        still_mode=still,
        preprocess=preprocess,
        size=size
    ),
    save_dir,
    pic_path,
    crop_info,
    enhancer='gfpgan',
    background_enhancer=background_enhancer,
    preprocess=preprocess,
    img_size=size
)

模型参数清单

字段名称

字段数值

数值选项

参数名称

参数描述

pose_style

0

0 - 45

姿势风格

根据需求选择不同的姿势风格参与到程序的处理或生成任务中。

batch_size

2

1 - 20

面部渲染

该参数控制程序在处理面部渲染任务时一次性处理的数据样本数量,以适应不同的计算资源和性能需求。

size

256

256、512

渲染尺寸

该参数控制程序在进行面部渲染时生成图像的大小,以满足不同的应用场景或输出要求。

expression_scale

1.0

0.0 - 3.0

表情修正

该参数控制面部渲染时调整表情的大小或夸张程度。

input_yaw

None

10 20 30

头部偏航角

该参数允许用户指定与头部姿态相关的偏航角,用于影响面部渲染、姿态估算或其他与头部方向相关的处理。

input_pitch

None

10 20 30

头部俯仰角

该参数允许用户指定与头部姿态相关的俯仰角,用于影响面部渲染、姿态估算或其他与头部朝向相关的处理。

input_roll

None

10 20 30

头部翻滚角

该参数允许用户指定与头部姿态相关的翻滚角,用于影响面部渲染、姿态估算或其他与头部旋转相关的处理。

enhancer

None

None

gfpgan

RestoreFormer

面部清晰度

该参数允许用户选择使用特定的人脸增强算法来改善输入图像中人脸的质量或清晰度。

background_enhancer

None

None

realesrgan

背景清晰度

该参数允许用户选择使用特定的背景增强算法来改善输入图像中非人脸区域(背景)的质量或清晰度。

cpu

cuda

cpu

cuda

CPU 优先

该参数通常用于控制程序运行时是否优先使用 CPU 资源。

still

True

True

False

头部运动幅度

该参数用于控制生成视频时头部运动的幅度。

preprocess

full

crop

extcrop

resize

full

extfull

取景范围

该参数允许用户选择不同的预处理方法来调整输入图像的尺寸、内容或边界。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉力文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值