对话式人工智能/自然语言处理

语音 AI 机器人的低代码构建块

在研究复杂的语音人工智能机器人系统时,开发人员很容易被其复杂性吓倒。亚瑟· C ·克拉克声称:“任何足够先进的技术都无法与魔法区分开来。”

从接受自然语言命令到安全地与环境和周围的人实时交互,当今的语音人工智能机器人系统可以执行以前机器无法完成的任务。加入谷歌、 Meta 、 NVIDIA 等公司的专家,参加第一届年度 NVIDIA -Speech AI 峰会。 立即注册

Spot 为例,它是一个支持语音 AI 的机器人,可以自己取饮料。为了方便地添加语音 AI 技能,例如 自动语音识别 ( ASR )或文本到语音( TTS ),许多开发人员在构建复杂的机器人系统时使用更简单的低代码构建块。

Photograph of Spot, an intelligent robotic system, after it has successfully completed a drink order.
图 1.Spot ,一只机器狗,在使用 NVIDIA Riva 提供的 ASR 和 TTS 技能处理订单后,实时获取饮料。

对于开发具有语音 AI 技能的机器人应用程序的开发人员,本文将分解 NVIDIA Riva SDK 提供的低代码构建块。

通过跟随所提供的代码示例,您将了解 speech AI 技术 如何使智能机器人能够接受食物订单,将这些订单转发给餐厅员工,并最终在提示时导航回家。

使用构建块设计 AI 机器人系统

复杂系统由几个构建块组成。每个构建块都很容易理解。

当您了解每个组件的功能时,最终产品就不那么令人畏惧了。如果您使用的是低代码构建块,那么现在可以专注于需要更多努力的特定于域的定制。

我们的最新项目使用了“ Spot ”,一个四足机器人和一个 NVIDIA Jetson Orin ,通过以太网电缆连接到 Spot 。该项目是使用 AI 构建块形成复杂语音 AI 机器人系统的主要示例。

Architectural diagram of an AI robotics system with Riva low-code speech AI blocks shown as core components for platform, navigation, and interaction.
Figure 2. 带有 Riva 低代码语音 AI 块的语音 AI 机器人系统,可添加 ASR 和 TTS 技能

我们的目标是建造一个机器人,它可以在我们尽可能少的干预下,自己从当地的餐厅为我们取零食。我们还着手使用开源库和工具编写尽可能少的代码。这个项目中使用的几乎所有软件都是免费的。

为了实现这一目标,人工智能系统必须能够与人类进行语音交互,感知其环境(在我们的例子中,使用嵌入式摄像头),并安全地在环境中导航。图 2 显示了交互、平台和导航如何表示 Spot 机器人的三个基本操作组件,以及这些组件如何进一步细分为低代码构建块。

本文只关注 Riva SDK 中的人机交互块。

使用 Riva 添加语音识别和语音合成技能

我们每天都与人们进行如此多的互动,以至于我们很容易忽视这些互动到底有多复杂。说话对人类来说很自然,但对于智能机器来说,理解和说话并不是那么简单。

Riva 是一个完全可定制的 GPU 加速语音 AI SDK ,可处理 ASR 和 TTS 技能,可部署在本地、所有云端、边缘和嵌入式设备上。它有助于人机语音交互。

Riva 完全在 Spot 机器人上本地运行。因此,处理是安全的,不需要互联网访问。它也可以用一个简单的参数文件完全配置,因此不需要额外的编码。

Riva 每个语音 AI 任务的代码示例

Riva 提供了 现成的 Python 代码 和命令行工具,用于将麦克风捕获的音频数据实时转换为文本( ASR 、语音识别或语音到文本),并将文本转换为音频输出( TTS 或语音合成)。

修改这些脚本以与开放式机器人技术( ROS )兼容,只需稍作改动。这有助于简化机器人系统开发过程。

ASR 自定义

Riva OOTB Python 客户端 ASR 脚本名为 transcribe_mic.py 。默认情况下,它将 ASR 输出打印到终端。通过修改它, ASR 输出被路由到一个 ROS topic 和可以被 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 来说, input text talk.py script 已被修改 使文本来自 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 这样的简单脚本主要由回调和通话功能组成。他们告诉 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()

换言之,如果文本包含“嘿, Spot ,…给我拿…”, Spot 会将句子的其余部分保存为命令。在 ASR 记录表明句子结束后, Spot 激活 TTS 客户端并背诵单词“ Fetching ”加上订单内容。然后,其他脚本会让 ROS 动作服务器指示 Spot 导航到餐厅,同时注意避开汽车和其他障碍物。

当 Spot 到达餐厅时,它会等待一个人说“你好, Spot ”来接受订单。如果 ASR 分析脚本检测到这一序列, Spot 会背诵订单并以“请”结尾。餐厅员工将订购的食物和任何零钱放在 Spot 背后的适当容器中。在 Riva ASR 意识到餐厅员工说“回家吧, Spot ”后, Spot 回家了

类似 Riva 的语音 AI SDK 背后的技术用于构建和部署完全可定制的实时语音 AI 应用程序,这些应用程序可部署在本地、所有云端、边缘和嵌入式环境中,将 AI 机器人带入现实世界。

当机器人与人无缝交互时,它开辟了一个新的领域,机器人可以在这个领域提供帮助,而无需技术人员在计算机上进行翻译。

使用低代码解决方案部署您自己的语音 AI 机器人

通常, NVIDIA 、 Open Robotics 和机器人社区等团队在解决语音 AI 和机器人问题以及为日常机器人用户提供和访问该技术方面做了出色的工作。

任何渴望进入该行业或改进现有技术的人都可以向这些群体寻求灵感和尖端技术的范例。这些技术可通过免费 SDK ( RivaROSNVIDIA DeepStreamNVIDIA CUDA )和功能强大的硬件(机器人、 NVIDIA Jetson Orin 、传感器)使用。

我很高兴看到来自技术领导者的这种级别的社区支持,并邀请您构建自己的语音 AI 机器人。机器人太棒了!

有关详细信息,请参阅以下相关资源:

 

Tags