或更确切地说,是... ! ! !!

该项目为万圣节打造了一个互动投影装置。当访客请求“不给糖就捣蛋”时,装置会以一位脾气暴躁的老海盗的声音进行回应;而当访客表现出礼貌时,态度则会随之转变。该方案基于 NVIDIA Nemotron 语音代理、NVIDIA Nemotron ASR、Nemotron 3.5 Bolt E4B 4GB、Magpie TTS Zeroshot 以及 Audio2Face-3D 构建,并可在单个工作站上运行。
设计初衷是为儿童提供一种有趣且独特的万圣节互动体验。虽然房屋负责处理分发糖果等逻辑,但整体氛围侧重于趣味而非恐怖。解决方案是将车库门拟人化为一张嘴,赋予其抱怨的性格。
最终呈现的“怪物之家”是一座充满海盗故事、笑容狰狞且对“请”字敏感的古旧建筑。NVIDIA Audio2Face-3D 技术使得木质结构的嘴巴能够同步说话。
怪物之家的技术架构
听觉:NVIDIA Nemotron Speech ASR 将访客语音转换为文本。思考:NVIDIA Nemotron 3.5 Bolt E4B 4GB(一个用于对话代理的开放小型语言模型)生成回复,并通过 LoRA 适配器注入个性特征。发声:NVIDIA Magpie TTS Zeroshot 利用角色的简短参考样本合成语音。动画:NVIDIA Audio2Face-3D 在虚幻引擎 5 中将清晰的语言转化为口型动画。视觉:NVIDIA Nemotron 3 Nano Omni 描述访客服装,YOLO 和 ByteTrack 负责计算与跟踪。硬件:NVIDIA Nemotron 语音代理协调所有组件,运行于配备 NVIDIA RTX PRO 6000 Blackwell Max-Q 和 NVIDIA RTX PRO 4000 Blackwell 的工作站。
破碎的笑容与角色构建
核心在于嘴巴的设计。木制车库门板被分裂成地狱般的嘴唇,内部燃烧的火焰照亮车道,营造出古老、富有表现力且略带冒犯性的视觉效果。
创建定制动画设备是开发过程中劳动密集度最高的环节之一。面部表情形状通过导出供 Audio2Face-3D 后续动画使用。角色 SkelMesh 在 Autodesk Maya 中构建,随后导入虚幻引擎,并在门后添加虚拟火焰特效。由于没有眼睛、眉毛或耳朵,这是一个极具经济性的怪物形象。
在开发期间,NVIDIA 推出了 Nemotron 语音代理。原本艰难的构建过程变得相对简单,因为倾听、交谈和说话的基础设施已具备。房子有了嘴,现在需要的是抱怨的理由。
性格塑造与交互逻辑
为了匹配其顽固的性格,项目设计了背景故事:这艘船重生为房地产,但对现状并不满意。表演需要一个从问候到告别的路径指南。初始阶段,房子会通过诸如“我正忙着吟唱,去打扰邻居!”之类的言论拒绝访客。一旦听到“请”,态度会立即软化;而“谢谢”则换来热烈的告别。一旦访客赢得好感,房子便会保持这一状态,避免重复谈判。
语音代理的核心优势在于 LLM 的可选择性。为了实现离线自主运行,系统配备了记忆功能和计算预算控制。角色不仅需要提示词,还需遵循主对话流程,响应访客实际内容,跟踪遭遇状态,并为剩余管道预留算力。
经过十余个模型的测试,最终选择 E4B Bolt 提供现场对话。这是一款专为本地对话代理和交互式角色构建的开放小型语言模型。作为默认响应模型,使用了 4 位量化版本(名称中的 4GB),并与 BF16 检查点进行了对比测试。
Bolt 提供了对话基础,而系统提示、应用逻辑以及基于数千次复习示例对话训练的 LoRA 适配器,将其塑造为特定的固执船只形象。
数据集包含超过 5000 次多轮对话,用于训练 LoRA。部分模型训练耗时约一小时,部分则需数小时。一名本地代理负责监控一切并比较结果,数据集由该代理和一个大型 LLM共同创建。此过程通常在夜间或非工作时间完成。
评估标准包括回复的连续性、时机、音调、质量、重复性和速度。目标是让房子最终屈服,而不是变成快乐的门卫。适度的抵抗是其魅力的一部分,无休止的争论则不然。
低延迟音频管线
系统采用两条捷径:创作文本跳过新的对话生成,保存的音频跳过合成。清晰的语音分离了动画与观众效果。
为了避免失去权威感,管道会在答案完整前发出可说的文字。预备好的问候语和糖果笑话掩盖了熟悉遭遇的延迟:文本银行节省语言模型工作,缓存录音节省语音合成。
median end-of-speech-to-audio with Bolt Q4 & TTS = 1.70 seconds
median end-of-speech-to-audio cached responses = 0.72 seconds
(note: speech-end detection currently waits for 300 ms of silence )
NVIDIA Magpie TTS Zeroshot 将文本转换为女王的英语。其零样本语音调节使用简短参考样本而非预训练语音,此处提供了老海盗的角色声音。房子拥有七种情绪,从愤怒威胁到开心高兴,情绪标签由提示模板决定。由于每种情感需要不同的 3-10 秒语音样本,UI 工具标签上添加了“Sample your Voice”模块,允许录制最佳快乐或愤怒海盗声音。Bolt E4B 决定说什么,Magpie 将文本转化为语音。
Audio2Face-3D 配合 Epic 虚幻引擎创建的 3D 角色场景处理动画。默认模型权重最适合中性男女声,不适用于深沉恶魔音。由于参考样本缺乏戏剧性重量,这反而成为优势。第二个音频流添加可调节的实时音效,通过扬声器播放。
为确保流畅运行,工作负载分配给一对 GPU:语言和语音模型管道运行在 NVIDIA RTX PRO 6000 Blackwell Max-Q 上,带 Audio2Face-3D 的虚幻引擎图形运行在 NVIDIA RTX PRO 4000 Blackwell 上。瓶颈在于计算而非内存。
语音、动画和特效必须同步落地。令人信服的怪物需要听起来像是投诉属于建筑本身。通过调整同步音频传输设置(例如设置 100ms 以弥补 Audio2Face-3D 缓冲),实现了稳定运行。
控制台与视觉识别
界面包含大量控件:试听缓存句子、调整开场情绪、跟随对话、改变语音处理、调整口型动画。标签涵盖对话、模型选择、录音、提示、性能监控和摄像头。此外还有模型加载控制和虚幻引擎连接指示器。
火焰和光效融入场景。可编辑规则将视觉线索与交付联系起来:现场线索从语音开始,录制表演遵循保存的时间线。无需重建场景即可改变情绪。
系统支持三种模式:“不给糖就捣蛋”角色模式、演示模式(说服房子解释自己)以及麦克风模式(直接通过房子发言,绕过识别、生成和合成)。清洁的声音驱动嘴部动作,观众听到处理后的版本,而房子认为这是财产声音。
NVIDIA Nemotron 3 Nano Omni 作为可选观察者,解析摄像机图像并描述可见服装。结合流行的物体检测和跟踪模型 YOLO 及 ByteTrack 来计算和跟踪当前可见人员。这种分工使房子能注意到群体,而无需 Omni 逐一讲述。
测试中,一段五只装扮成羊的视频被分析,识别出海盗、吸血鬼、女巫、南瓜和鬼魂等服装标签。尽管这是合成测试,但展示了时尚服装识别和机智回应的潜力。由于房子没有眼睛,它依靠回声定位来感知访客。
未来工作包括改进动画和进行真实访客的性能测试。目标仍是实现自动化管理万圣节,以便开发者与家人参与其他活动。最终愿景是孩子遇到一座老房子,尝试一点善意,并获得糖果棒。
构建自定义角色指南
虽然 MonsterHouse 代码未公开打包,但其使用的 NVIDIA 模型已可用,NVIDIA Nemotron 语音代理可辅助大部分工作。建议路径如下:
从语音管道开始。复制 NVIDIA Nemotron 语音代理并运行通用助理示例。利用语音活动检测和语音结束处理确定说话时机。让 Bolt E4B 成为大脑。语音代理包括用于云、服务器和单个 GPU 部署的 Bolt E4B 配置文件。可在 build.nvidia.com 的对话模式中尝试该模型,获取简短语音答复并禁用推理以简化交流。赋予个性。首先使用系统提示符和几个连接的示例对话框。在应用程序中保持对话状态(如谁说过“请”),而非依赖模型记忆。当提示不足时,训练 LoRA 适配器;NVIDIA NeMo 汽车模型提供 Bolt E4B 的 LoRA 配方。赋予声音。Magpie TTS 多语言是默认选项。对于定制角色,Magpie TTS Zeroshot 从简短参考样本工作。可在 build.nvidia.com 试用并申请访问权限。仅使用有权使用的声音。赋予面孔。NVIDIA Audio2Face-3D 将语音转化为角色面部动画。先使用清晰语言,再添加效果。可选:赋予眼睛。语音代理的 Nemotron Omni 助理副代理示例增加了与 Nemotron 3 Nano Omni 的现场网络摄像头理解功能。如需计数,配对轻量级人群追踪器。
缓存响应库和最常用声音能让缓慢的怪物感觉更快。若计算能力有限,可使用 Nemotron Speech ASR 的 Live 版本。可利用 Bolt E4B 和 Magpie 管道在线生成数百个响应。
资源
GitHub 和 build.nvidia.com 上的 NVIDIA Nemotron 语音代理;Hugging Face 上的 NVIDIA Nemotron 3.5 Bolt E4B 4GB 及其技术博客;NVIDIA Nemotron Speech ASR (流媒体,英语);NVIDIA Magpie TTS Zeroshot;NVIDIA Audio2Face-3D;NVIDIA Nemotron 3 Nano Omni





