数字人部署

在之前数字人模型优化,并且封装成模块之后,再进一步集成输入输出,前端输入大模型回答内容,也就是sentence参数,以及前端输入的role,对应需要的角色

1. 模型优化与模块封装

首先,我对数字人模型进行了优化,并将其封装成一个独立模块。这一模块能够处理从输入文本到输出视频的整个流程。为了实现这一目标,我进一步集成了输入输出功能

2. 输入参数与角色选择

在前端,用户可以输入他们想要大模型回答的内容,即 sentence 参数,同时选择需要的角色,这一参数用 role 表示。不同的角色对应不同的文本到语音转换(TTS)声音和图像,因此我们可以将这些步骤串联起来:

sentence & role => TTS => sadTalker => video

3. Flask 路由实现

通过一个 Flask 应用,将前端输入的文本和角色信息转化为动态视频,

以下是我们如何通过 Flask 路由来实现文本到视频的转换:

@app.route('/texttovideo')
def texttovideo():
    data = request.args
    sentence = data.get('sentence', 'Hello, I am SpeakSpark! Nice to meet you!')
    role = data.get('role','girl')
    voicename = 'en-US-AvaMultilingualNeural' if role == 'girl' else 'en-US-BrianMultilingualNeural'
    tts(voicename=voicename, path_to_save='./files/audio.wav', text=sentence)
    video = talker.test(
            pic_path=pic_path.format(role=role),
            crop_pic_path=crop_pic_path.format(role=role),
            first_coeff_path=first_coeff_path.format(role=role), 
            crop_info=crop_info, 
            driven_audio=audio,
            preprocess=preprocess_type, 
            still_mode=is_still_mode,
            use_enhancer=enhancer,
            batch_size=batch_size,
            size=size_of_image, 
            pose_style = pose_style, 
            facerender=facerender,
            exp_scale=exp_weight, 
            use_idle_mode = use_idle_mode,
            length_of_audio = length_of_audio,
            use_blink=blink_every, 
            fps=20
    )
    print(sentence)
    return send_from_directory(directory='./files', path=f'{role}_audio.mp4')

4. 详细实现过程

  1. 获取前端输入:通过 request.args 获取前端传递的 sentencerole 参数。如果没有传递,则使用默认值。

  2. 选择 TTS 声音:根据角色选择不同的 TTS 声音。这里我们使用微软 Azure 提供的 TTS 服务,其中女孩角色使用 en-US-AvaMultilingualNeural,男孩角色使用 en-US-BrianMultilingualNeural

  3. 生成音频文件:调用 TTS 服务,将文本转换为语音,并保存为 audio.wav 文件。

  4. 生成视频:调用 sadTalker 模块,将生成的音频与对应角色的图像结合,生成最终的视频。

  5. 返回视频文件:将生成的视频文件通过 Flask 的 send_from_directory 返回给前端。

具体配置如下:

blink_every = True

size_of_image = 256

preprocess_type = 'crop'

facerender = 'facevid2vid'

enhancer = False

is_still_mode = False

pic_path = './inputs/{role}.png'

crop_pic_path = './inputs/first_frame_dir_{role}/{role}.png'

first_coeff_path = './inputs/first_frame_dir_{role}/{role}.mat'

crop_info = ((403, 403), (19, 30, 502, 513), [40.05956541381802, 40.17324339233366, 443.7892505041507, 443.9029284826663])

exp_weight = 1

batch_size = 10

pose_style = random.randint(0, 45)

use_ref_video = False

ref_video = None

ref_info = 'pose'

use_idle_mode = False

length_of_audio = 5

audio = './files/audio.wav'

talker = SadTalker()

通过以上步骤,我实现了从文本到视频的转换功能。用户可以在前端输入文本并选择角色,系统将自动生成对应的角色视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值