项目介绍
这是一个将语音对话与人体感知接入 UE 数字人的交互项目。用户说话后,系统识别语音、生成回答并合成音频,再由数字人通过声音、嘴型和表情回应。人体感知提供另一条输入,使角色能够跟随用户方向,并通过动作触发场景交互。
我负责后端服务与 UE 数字人表现之间的集成,包括服务通信、对话流程组织、嘴型与表情驱动、Kinect 数据接入,以及本地、云端和混合部署方式下的联调。
系统组成
| 环节 | 本地接入方案 | 云端接入方案 |
|---|---|---|
| 语音识别 | sherpa-ncnn | Azure Speech,通过 AzSpeech 接入 |
| AI 对话 | ChatGLM,或通过 Ollama 运行 DeepSeek | 网络接口调用远端大模型服务 |
| 语音合成 | ChatTTS、VITS | Azure Speech,通过 AzSpeech 接入 |
| 嘴型与表情 | Ynnk Voice Lip-sync 等音频驱动方案 | UE 接收并应用 Azure Speech 的 Viseme 等动画数据 |
| 人体感知 | Azure Kinect 骨骼数据,结合 UE 与 Control Rig | 在 UE 侧接入与处理 |
| 数字人表现 | UE、MetaHuman 的角色渲染、声音播放与动画 | 角色仍由 UE 端呈现 |
不同部署方式按需要组合这些服务。云端部署指 AI 服务运行在远端,数字人的渲染和场景交互仍由 UE 端完成。
我负责的功能
语音对话流程集成
串联语音识别、AI 问答、语音合成和角色回应,组织文本、音频与表现数据的传递。UE 与后端通过 HTTP、UDP 等方式交换数据,后续也接入了使用 WebSocket 的 AI 问答后端。
对话流程依次处理用户语音、识别文本、模型回答、合成音频和角色播放,使每个环节有明确的输入与输出。
数字人声音、嘴型与表情
组织音频播放与嘴型、表情驱动的配合。不同服务提供的数据形式不同,UE 端需要把它们接到角色表现,而不只是播放一段声音。
本地接入使用音频驱动方案;云端方案接收语音服务提供的嘴型及相关动画数据,再由 UE 端应用到角色。
人体感知与场景互动
通过 Azure Kinect 读取骨骼数据,结合角色与场景逻辑实现视线跟随和动作触发,例如让数字人看向用户、通过用户动作控制场景中的电梯升降。
人体感知与语音对话分别接入:前者提供位置和动作信息,后者提供对话内容,两条输入共同参与场景交互。
部署与流程模块化
联调纯本地、纯云端和混合三种部署方式。本地服务通过 Miniconda 分别管理 Python 环境,并处理 PyTorch、CUDA 等依赖;UE 端连接对应服务并组织交互。
后续将原有固定线性逻辑拆分为流程控制与功能模块。C++ 提供基础支持,蓝图组织具体交互,使服务替换与流程调整不必同时改动整套角色表现逻辑。
解决的难点
多个服务需要形成连续的角色回应
语音识别、问答和语音合成各自完成一个环节,返回的数据也不同。单独接通服务,并不意味着数字人已经能够完成一次完整对话。
我把服务调用与角色表现按流程组织,明确文本、回答和音频怎样进入下一步,并在 UE 侧衔接声音播放与嘴型、表情。这样可以分别检查服务处理和角色回应,避免把所有问题都归到数字人动画上。
同一套交互需要适配不同部署方式
纯本地方案需要管理模型运行环境,云端方案需要处理远端接口,混合方案还需要把不同来源的结果送入同一套 UE 交互流程。
我将识别、问答、合成和表现拆成独立接入模块,由流程控制逻辑组织执行。部署方式改变时,主要调整服务的组合与接入,UE 端继续承担场景、角色和具体互动。
语音与人体感知是两种不同输入
语音链路以识别和生成结果推进,人体感知持续提供用户位置与骨骼动作。两者处理的数据和用途不同,不能简单套进同一条线性调用逻辑。
项目中分别接入两条输入,让语音负责对话内容,让人体感知参与视线和场景动作,再在具体交互中组合使用。
实现结果与适用范围
项目完成了语音识别、AI 回答、语音合成与数字人表现的集成,并接入人体感知形成视线跟随和动作触发。部署方面完成了本地、云端与混合三种服务组合的联调,流程控制与功能模块也进行了拆分。
我的工作范围是服务集成、流程组织和 UE 端表现,语音识别、大模型与语音合成使用已有方案。不同组合的响应速度与资源占用取决于所用模型、设备和网络条件。
相关记录
- 本地集成 AI 数字人交互流程:服务选型、本地环境、通信方式、三种部署组合及人体交互的技术记录。
