在构建一个复杂的语音 AI 机器人系统时,从接受自然语言命令到安全地与环境和周围的人实时交互,开发人员很容易被其复杂性吓倒。但事实上,利用开发工具,今天的语音 AI 机器人系统可以将任务执行到以前机器无法实现的水平。
国外一个开发者,将Jetson AGX Orin开发套件装到一个机器狗上,让它摇身一变,变成一款支持语音 AI 的机器人,可以自行取饮料。为了轻松添加语音 AI 技能,例如自动语音识别(ASR) 或文本转语音 (TTS),许多开发人员在构建复杂的机器人系统时会利用更简单的低代码构建块。
让我们一起来了解一下语音 AI 技术如何使智能机器人能够接受食品订单,将这些订单转发给餐厅员工,并最终在出现提示时导航回家吧!
项目背景和目标
复杂的系统由几个构建块组成。每个构建块本身都更容易理解。
当您了解每个组件的功能时,最终产品就会变得不那么令人生畏。如果您使用的是低代码构建块,您现在可以专注于需要更多努力的特定领域的自定义。
这个项目使用四足机器人“Spot”和通过以太网电缆连接到 Spot的NVIDIA Jetson Orin 。
该项目是使用 AI 构建块形成复杂的语音 AI 机器人系统的主要示例。
我们的目标是制造一个机器人,它可以自己从当地餐馆给我们拿零食,而我们的干预尽可能少。我们还着手使用开源库和工具中的内容尽可能少地编写代码。该项目中使用的几乎所有软件都是免费提供的。
为了实现这一目标,人工智能系统必须能够与人类进行语音交互,感知其环境(在我们的例子中,使用嵌入式摄像头),并安全地在周围环境中导航。下图显示了交互、平台和导航如何代表 Spot 机器人的三个基本操作组件,以及这些组件如何进一步细分为低代码构建块。
注意:这篇文章只关注来自 Riva SDK 的人机交互模块。
使用 Riva 添加语音识别和语音合成技能
我们每天与人们进行如此多的互动,以至于很容易忽视这些互动实际上是多么复杂。说话对人类来说很自然,但对于智能机器来说,理解和说话并不是那么简单。
Riva 是一个完全可定制的、GPU 加速的语音 AI SDK,可处理 ASR 和 TTS 技能,并可在本地、所有云、边缘和嵌入式设备上部署。它促进了人机语音交互。
Riva 完全在 Spot 机器人上本地运行。因此,处理是安全的,不需要互联网访问。它也可以通过一个简单的参数文件完全配置,因此不需要额外的编码。
每个语音 AI 任务的 Riva 代码示例
Riva 提供即用型 Python 脚本和命令行工具,用于将麦克风捕获的音频数据实时转换为文本(ASR、语音识别或语音到文本),并将文本转换为音频输出( TTS,或语音合成)。
调整这些脚本以与 Open Robotics (ROS) 兼容只需要进行微小的更改。这有助于简化机器人系统开发过程。
ASR 自定义
Riva OOTB Python 客户端 ASR 脚本名为transcribe_mic.py。默认情况下,它将 ASR 输出打印到终端。通过修改它,ASR 输出被路由到一个 ROS 主题,并且可以被 ROS 网络中的任何东西读取。以下代码示例显示了脚本 main() 函数的关键添加:
inter_pub = rospy.Publisher('intermediate', String, queue_size=10) final_pub = rospy.Publisher('final', String, queue_size=10) rospy.init_node('riva_asr', anonymous=True)
以下代码示例包括对 main 的更重要的添加:
for response in responses: if not response.results: continue partial_transcript = "" for result in response.results: if not result.alternatives: continue transcript = result.alternatives[0].transcript if result.is_final: for i, alternative in enumerate(result.alternatives): final_pub.publish(alternative.transcript) else: partial_transcript = transcript if partial_transcript: inter_pub.publish(partial_transcript)
TTS 自定义
Riva 还为 TTS 提供了talk.py脚本。默认情况下,您在终端或 Python 解释器中输入文本,Riva 从中生成音频输出。为了让 Spot 说话,修改了输入文本 talk.py 脚本,以便文本来自 ROS 回调而不是人类的击键。OOTB 脚本的主要更改包括用于提取文本的此功能:
def callback(msg): global TTS TTS = msg.data
它们还包括对 main() 函数的这些添加:
rospy.init_node('riva_tts', anonymous=True) rospy.Subscriber("speak", String, callback)
main() 函数中这些更改的条件语句也是关键:
while not rospy.is_shutdown(): if TTS != None: text = TTS
语音交互脚本
像voice_control.py这样的简单脚本主要由回调函数和 talker 函数组成。他们告诉 Spot 要听什么词以及如何回应。
def callback(msg): global pub, order rospy.loginfo(msg.data) if "hey spot" in msg.data.lower() and "fetch me" in msg.data.lower(): order_start = msg.data.index("fetch me") order = msg.data[order_start 9:] pub.publish("Fetching " order)
def talker(): global pub rospy.init_node("spot_voice_control", anonymous=True) pub = rospy.Publisher("speak", String, queue_size=10) rospy.Subscriber("final", String, callback) rospy.spin()
换句话说,如果文本包含“Hey Spot,……来找我……” Spot 会将句子的其余部分保存为命令。在 ASR transcript指示句子完成后,Spot 激活 TTS 客户端并背诵“Fetching”一词以及订单内容。然后其他脚本会使用 ROS 操作服务器,指示 Spot 导航到餐厅,同时注意避开汽车和其他障碍物。
当 Spot 到达餐厅时,它会通过说“Hello Spot”等人来点餐。如果 ASR 分析脚本检测到此序列,Spot 会背诵该命令并以“please”结束。餐厅员工将订购的食物和任何零钱放在适当的容器中,放在 Spot 的背上。在 Riva ASR 发现餐厅工作人员说“回家吧,Spot”后,Spot 回家了。
Riva等语音 AI SDK 背后的技术用于构建和部署完全可定制的实时语音 AI 应用程序,可在本地、所有云、边缘和嵌入式中部署,将 AI 机器人技术带入现实世界。
当机器人与人无缝交互时,它开辟了一个新领域的世界,机器人可以在其中提供帮助,而无需计算机上的技术人员进行翻译。
使用低代码解决方案部署您自己的语音 AI 机器人
总体而言,像 NVIDIA、Open Robotics 和机器人社区这样的团队在解决语音 AI 和机器人问题以及让日常机器人用户可以使用和使用该技术方面做得非常出色。
任何渴望进入该行业或改进现有技术的人都可以向这些团体寻求灵感和尖端技术的示例。这些技术可通过免费 SDK(Riva、ROS、NVIDIA DeepStream、NVIDIA CUDA)和功能强大的硬件(机器人、NVIDIA Jetson Orin、传感器)使用。
更多:
NVIDIA Jetson Orin NANO模组发布,会是大冤种么?
AI如何协助牙科医生解决难以发现的牙齿问题
NVIDIA AI技术如何燃爆“美国达人秀”半决赛现场
使用预训练模型,在Jetson NANO上预测公交车到站时间