专注LLM深度应用,关注我不迷路
简单地说,数字人就是在数字世界的“人”。当前语境下我们谈到的数字人通常指的是借助AI技术驱动的虚拟世界人物,具备与真实人类相似甚至接近的外形、感知、交互与行为能力。
AI技术在智能数字人的应用中举足轻重,特别是随着大模型能力的涌现,一个完整的数字人系统是一个融合多种AI能力、形象设计、建模、高性能渲染引擎等多种计算机技术的综合体。
本文将一起来认识一个完整的交互式数字人系统的结构、原理与相关工具。并借助开源的数字人项目Fay,演示一个简单的基于LLM的实时对话的3D数字人。
一个完整的交互式数字人系统的整体架构可以用下图来表示:
即使对于一个非专业技术人员,这个系统原理也并不难理解:
语音输入与识别:这是数字人能“听”的基础。这部分借助于自动语音识别(ASR)技术来完成,将语音输入首先转化为自然语言的文本。通常可以借助在线云服务来完成,或者部署本地ASR模型来实现。
AI交互处理:这是交互型数字人的“大脑”功能。在大语言模型(LLM)出现以后,其给数字人赋予了真正的智慧与灵魂。借助LLM,理解自然语言的输入,并推理生成需要响应的内容。
语音合成:这是数字人能“说”的基础。在获得文本的响应内容后,为了让数字人能够用语音“说话”,需要借助语音合成(TTS)的AI模型来把文本转化为音频流。在这个阶段,为了让数字人更像“人”,会涉及到合成音色的选择,甚至采用真人语音来训练合成模型(还记得AI孙燕姿吗?)。
数字人驱动:这一步就是用合成的音频流等数据来驱动已经创建好的前端数字人,让数字人边“说”边“动“,包括声音、动作、表情。根据数字人的不同类型,这可能需要借助不同的引擎或者AI模型。比如:
数字人:这是终端呈现出的虚拟数字人形象与动画视频,可以是3D或者2D。比如一个3D高保真的数字人最常见的是借助Metahuman做建模,然后通过Unreal引擎导入模型进行渲染与运行。
显然,一个完整的交互式数字人系统需要有效地集成不同的模型、引擎与工具,才能最终呈现完美的效果。
让我们首先来简单了解前端3D数字人的创建过程。
PART 02 创造躯体:3D数字人建模与开发我们经常提到的一些任务机器人,一般只是一个能够自动工作的计算机程序。但数字人的特点是需要一个具体的虚拟人物形象,并且这个形象能够像“人”一样能说会动。因此,对于数字人项目来说,首当其冲的是需要准备这样的虚拟人物。这其中最逼真、应用场景最广泛,而且也是最复杂的,是3D高保真高解析度数字人,创建这样的虚拟人你需要完成形象设计、建模、动画制作,以及定义在虚拟场景中的行为逻辑(类似游戏场景)。
这里我们用著名的游戏引擎Unreal Engine系列工具来认识3D数字人的制作过程:
这个步骤是数字人设计的核心。借助UE提供的一种可视化编辑环境与脚本语言,你无需太多编程知识,就可以创建数字人的行为逻辑,比如控制角色在场景里的动作等。当然,作为交互式数字人最重要的环节也需要在这里进行定义:如何接受音频流、情绪数据等信息来驱动数字人说话、唇形甚至动作。
借助iPhone实现面部表情捕捉并用于数字人:
本图片来自Unreal官方网站
可视化的设计数字人的交互行为逻辑:
现在,我们直接下载Fay开源项目中已经完成的一个UE5数字人工程用于测试:
1. 安装Unreal引擎环境
进入https://www.unrealengine.com/官网,下载EpicGames Launcher安装包,并注册账号;下载完成后,根据提示自行安装即可。
运行已经安装的程序,安装Unreal引擎版本,建议安装5.0.3。此处安装包较大,注意留足够的空间。
2. 在Unreal商城中安装以下插件:
3. 选择下载Fay开源项目中的一个数字人工程(github搜索fay-ue5),这里我们选择一个UE5版本的数字人。
4. 运行数字人。下载完成后解压,双击fay_ue5.uproject文件会自动使用UE环境打开项目,点击运行按钮,即可以看到运行中的数字人:
5. 【可选】数字人工程查看与编辑。借助环境中的编辑器,可以看到数字人的相关行为逻辑,比如是如何借助websocket接收语音流并驱动数字人“说话”。如果你有兴趣驱动自己设计的数字人,可以参考此处的程序设计。
当然,此刻运行的数字人是无法互动的,原因是她目前只有“躯体”,还缺乏真正的智慧告诉她怎么与你互动,这也就是后端的数字人控制器。
PART 03 赋予智慧:构建数字人的控制器我们把前面的基本原理图稍稍细化下,这里的黄色部分就构成了数字人的控制器:
控制器作为数字人的大脑中枢,承担着借助各种AI技术来与真实人类完成最终交互所需的关键能力,并将输出通过数字人的语音、动作、表情进行呈现,从而完成整个交互闭环。
这里简单介绍每个模块构建的基础技术及可能选择:
【语音识别模块】
语音识别模块通过监听设备语音输入设备(麦克风),采集语音流,并借助ASR模型与接口实时转换为文本内容,用于后续交互处理模块。ASR接口的实现可以借助现成的API或者模型:
【AI交互处理模块】
这是控制器的核心模块。在LLM出现以后,很容易想到借助其强大的自然语言理解与生成能力来做出更加自然的数字人响应,只需要简单的将语音识别出来的文本内容组装到Prompt,并调用大模型的API接口输出即可。
当然,对于企业客户来说,直接的LLM响应可能无法满足企业的实际需求,因此,借助RAG(检索增强生成)给LLM补充企业私有知识,以生成更个性化与企业相关的响应内容是一种常见的方案。
这个模块中常见的技术选择有:
【语音合成模块】
AI响应生成以后的文本交给TTS模块,进行语音合成音频后用于后续驱动数字人的语音输出。为了让生成的语音更加自然与拟人,此处通常会涉及到两个额外的选项:
这个模块中常见的技术选择有:
【数字人通信】
这个模块用来把合成的音频流、情绪数据、甚至唇形数据传递给前端的数字人,用来驱动数字人的语音与动作输出。
在本文演示的Fay开源项目中,这部分由前端数字人项目中UE的WebSocket插件与后端控制器通过WebSocket通道来完成:将TTS模块生成的音频/情绪等数据发送给数字人,数字人使用收到的数据来合成动画视频,最后播放音视频给交互者。
现在,我们来下载 Fay开源项目控制器代码进行测试(这里采用最常见的助理版本,通常用来构建一问一答型的交互数字人):
4. 开启麦克风:启动控制器的麦克风音频采集,这样,数字人就能够听到你的声音,并给予回复:
在控制器的后台,你可以完整的看到处理过程与日志:
PART 04 数字人系统的优化挑战上文我们使用一个开源的数字人项目Fay(再次感谢Fay项目的贡献者)来拆解并学习了一个完整的3D交互数字人的架构,并做了简单测试。但是请注意,这里只是一个演示基本工作流程的数字人,而在真实的企业应用中,根据数字人的应用场景,还有大量的需要个性化设计、优化与完善的环节,包括:
这些都是在实际数字人工程中可能会面临的挑战,我们也期待有更多优秀的数字人开源项目与工程平台的出现。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved