前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何用低代码构建一个会说话的机器狗

如何用低代码构建一个会说话的机器狗

作者头像
GPUS Lady
发布于 2022-10-08 05:12:47
发布于 2022-10-08 05:12:47
94700
代码可运行
举报
文章被收录于专栏:GPUS开发者GPUS开发者
运行总次数:0
代码可运行

在构建一个复杂的语音 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() 函数的关键添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 的更重要的添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   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 脚本的主要更改包括用于提取文本的此功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def callback(msg):   global TTS   TTS = msg.data

它们还包括对 main() 函数的这些添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  rospy.init_node('riva_tts', anonymous=True)  rospy.Subscriber("speak", String, callback)

main() 函数中这些更改的条件语句也是关键:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while not rospy.is_shutdown():           if TTS != None:               text = TTS
语音交互脚本

像voice_control.py这样的简单脚本主要由回调函数和 talker 函数组成。他们告诉 Spot 要听什么词以及如何回应。 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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上预测公交车到站时间

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GPUS开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
源码级理解Pytorch中的Dataset和DataLoader
朋友,你还在为构建Pytorch中的数据管道而烦扰吗?你是否有遇到过一些复杂的数据集需要设计自定义collate_fn却不知如何下手的情况?你是否有遇到过数据管道加载速度过慢成为训练性能瓶颈却不知道如何优化的情况?
lyhue1991
2023/02/23
1.3K0
源码级理解Pytorch中的Dataset和DataLoader
时间序列数据建模流程范例
最开始在学习神经网络,PyTorch 的时候,懂的都还不多,虽然也知道 RNN, CNN 这些网络的原理,但真正自己实现起来又是另一回事,代码往往也都是从网上 copy 过来然后再自己魔改的,这也就导致了一系列的问题,代码格式不统一,没弄懂具体实现细节等等。当然,凭这些 copy 过来的代码让模型运行起来还是不难的,你只需要知晓一定的原理。显而易见,这些时间往往最后都是要“还”的。
EmoryHuang
2022/10/31
1.3K0
时间序列数据建模流程范例
pytorch – 数据读取机制中的Dataloader与Dataset
怎么建立一个预测模型呢?考虑上一个博客中的机器学习模型训练五大步骤;第一是数据,第二是模型,第三是损失函数,第四是优化器,第五个是迭代训练过程。
全栈程序员站长
2022/08/14
1.4K0
pytorch – 数据读取机制中的Dataloader与Dataset
文本数据建模流程范例
我们在实践中通常会遇到的数据类型包括结构化数据,图片数据,文本数据,时间序列数据。
lyhue1991
2020/07/20
1.9K1
文本数据建模流程范例
pytorch源码分析之torch.utils.data.Dataset类和torch.utils.data.DataLoader类
Pytorch深度学习框架优势之一是python优先,源代码由python代码层和C语言代码层组成,一般只需要理解python代码层就可以深入理解pytorch框架的计算原理。所以学习pytorch源码需要熟练掌握python语言的各种使用技巧。
全栈程序员站长
2022/08/24
1.1K0
pytorch源码分析之torch.utils.data.Dataset类和torch.utils.data.DataLoader类
用BERT做命名实体识别任务
本质上NER是一个token classification任务, 需要把文本中的每一个token做一个分类。
lyhue1991
2023/09/05
7590
用BERT做命名实体识别任务
Kaggle免费GPU使用攻略
在国内使用邮箱注册kaggle时会遇到一个人机验证的步骤,可以通过翻墙访问外网的方式完成,但比较麻烦。
lyhue1991
2023/02/23
5K0
Kaggle免费GPU使用攻略
使用GPU训练模型
Pytorch没有官方的高阶API。一般通过nn.Module来构建模型并编写自定义训练循环。
lyhue1991
2020/07/22
3K0
pytorch-DataLoader(数据迭代器)
本博客讲解了pytorch框架下DataLoader的多种用法,每一种方法都展示了实例,虽然有一点复杂,但是小伙伴静下心看一定能看懂哦 :)
全栈程序员站长
2022/07/01
1.3K0
【转载】PyTorch系列 (二): pytorch数据读取
本文首先介绍了有关预处理包的源码,接着介绍了在数据处理中的具体应用; 其主要目录如下:
marsggbo
2019/03/08
2.1K0
像 Keras 一样优雅地使用 pytorch-lightning
你好,我是云哥。本篇文章为大家介绍一个可以帮助大家优雅地进行深度学习研究的工具:pytorch-lightning。
lyhue1991
2021/01/29
1.5K0
像 Keras 一样优雅地使用 pytorch-lightning
30分钟吃掉wandb模型训练可视化
公众号算法美食屋后台回复关键词:wandb,获取本教程 notebook源码 和 B站视频演示。
lyhue1991
2023/02/23
3.6K0
30分钟吃掉wandb模型训练可视化
PyTorch4:模块总览&torch.utils.data
相比TensorFlow,PyTorch 是非常轻量级的:相比 TensorFlow 追求兼容并包,PyTorch 把外围功能放在了扩展包中,比如torchtext,以保持主体的轻便。
小胡胡说
2020/08/07
1.2K0
PyTorch学习笔记(6)——DataLoader源代码剖析
作为CSDN的忠实用户,最近发现CSDN学院上了一些对新手比较友好的课程。以我的切身体会来看,对于想要了解机器学习算法或者python编程语言的同学,非常有帮助。还记得我最开始学习python的时候,看的是一本写给小孩子的书《趣学Python——教孩子学编程》。
全栈程序员站长
2022/06/29
7070
PyTorch学习笔记(6)——DataLoader源代码剖析
pytorch学习笔记(十四): DataLoader源码阅读
根据文章内容为技术社区提供优质内容,以提升技术社区的影响力。
ke1th
2018/01/02
5.1K0
pytorch实战---IMDB情感分析
在代码中设置日志的作用是记录程序的运行状态、调试信息和重要事件,以便在开发和生产环境中更轻松地诊断问题和了解程序的行为。设置日志有以下作用:
小馒头学Python
2024/04/28
6970
pytorch实战---IMDB情感分析
【Pytorch基础】加载数据集
  上一篇训练神经网络是用的是批梯度下降,容易陷入鞍点中。Pytorch 提供了一个数据集加载工具,使得我们可以方便地用小批量随机梯度下降来训练网络。其包含两个部分:
yhlin
2023/02/27
9270
【Pytorch基础】加载数据集
YOLOv8 训练自己的数据集
本范例我们使用 ultralytics中的YOLOv8目标检测模型训练自己的数据集,从而能够检测气球。
lyhue1991
2023/09/05
3.4K1
YOLOv8 训练自己的数据集
使用预训练模型进行句对分类(Paddle、PyTorch)
预训练模型下载:https://huggingface.co/nghuyong/ernie-1.0
Michael阿明
2021/09/06
1.6K0
炼丹5至7倍速,使用Mac M1 芯片加速pytorch完全指南
2022年5月,PyTorch官方宣布已正式支持在M1芯片版本的Mac上进行模型加速。官方对比数据显示,和CPU相比,M1上炼丹速度平均可加速7倍。
lyhue1991
2023/02/23
16.2K2
炼丹5至7倍速,使用Mac M1 芯片加速pytorch完全指南
推荐阅读
相关推荐
源码级理解Pytorch中的Dataset和DataLoader
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档