天才老爸用Jetson NANO给娃做了一个会说话的泰迪熊

2022-07-18 15:16:25 浏览数 (1)

这个天才老爸又出手了!

还记得我们已经报道过他给娃做的两个项目么?

看这个天才老爸如何用Jetson NANO做一个带娃机器人

老爸用Jetson AGX Xavier开发套件给娃插上翱翔的翅膀

这次,他用GPT-3 和计算机视觉,利用Jetson NANO,将儿子 Dexie 的泰迪熊 Ellee 改造成了一个号称“具备人类智慧”的机器人!

它不仅可以识别一个人以进行更个性化的对话,还能从对话中提取无法识别的人的名字,并注册他们的名字和面孔以备将来遇到,自动扩展她的社交网络!

是不是很有意思?让我们看看他是怎么做到的!

项目重点

老爸的目标是把Ellee做成一个基于生成的聊天机器人,可以就历史、物理、数学、甚至烹饪、电影、体育等各种话题进行对话,与人类对话智能相当。它真的理解你所说的话,并且能够回顾过去的对话以产生上下文反应。这与 Siri、Google Assistant 和 Alexa 等基于检索的聊天机器人不同,后者需要庞大的意图、问题/答案数据库才能匹配。不仅如此,它还能够移动头来跟随与之交谈的人。 而头部运动是使用两个带有平移和倾斜设置的伺服电机构建的。

为了实现上述功能,Ellee 需要具备以下模块:   

  • 视觉—— Ellee 必须能够跟踪一个人的位置并实时识别他们的脸,这样它才能移动头来看着他们并叫这个人的名字。为此,老爸需要一个连接到 AI 系统的摄像头,以检测人及其面部的存在和位置并识别他们。需要经过训练以识别人体及其面部的对象检测 AI 模型,并将在连接到摄像头的 GPU 驱动设备上运行。   
  • 头部运动——Ellee 需要能够左/右和上/下转动它的头(两个自由度)。  
  • 听力——Ellee 需要能够听到对话,这需要语音识别技术和麦克风。   
  • 脑——Ellee 需要能够理解所说的内容并通过考虑过去的对话来提供一些上下文来生成自然的文本响应。这需要一个强大的生成文本 AI 模型。   
  • 说话——Ellee 需要与人打招呼并说出大脑模块生成的文本响应,这需要文本转语音技术。
  • 控制器——这是连接所有组件所必需的。

项目所需材料

-NVIDIA Jetson Nano开发套件。它是一个微型 GPU 驱动的嵌入式设备,将运行所有模块(特别是对象检测和面部识别 AI 模型)。这是一个完美的设备,因为它可以通过 USB 端口支持麦克风和音频输出,并且它有一个以太网端口,可以轻松访问互联网以进行 API 调用。您甚至可以插入鼠标和键盘来直接在设备上进行开发和调试,因为它具有功能齐全的 Ubuntu 18.04 操作系统。 

- USB 麦克风和扬声器。

-索尼 IMX219 160摄像头。这是一款很棒的微型 160 度 POV 8MP 树莓派相机,让 Ellee 能够看到和识别人。根据我在其他机器人项目中的经验,广角 POV 至关重要——否则,Ellee 将无法发现任何人,除非他们直接在她面前,这感觉不自然。   

-伺服电机。连接到云台支架的两个 5 kg/cm 扭矩伺服电机将允许两个自由度旋转。需要 PWM 驱动器来驱动电机,因为 Jetson Nano GPIO 引脚仅提供 1 mA 电流,而伺服电机消耗 3 A 电流。由于电机只需要移动 Ellee 的头部,这很轻,5 kg/cm 的扭矩绰绰有余。

-木棍和小木柜。木棒将作为 Ellee 的骨架结构来连接相机和伺服系统。棍子将连接到隐藏硬件组件的木制柜子上,Ellee 将坐在上面。

项目执行

1. 构建视觉

需要一个对象检测组件来分析视频帧并检测人体和面部的位置,以便能够跟踪和查看它们。请记住,NVIDIA Jetson Nano 的 GPU 远不如 RTX 等桌面级 GPU 卡强大,因此选择在准确性和性能之间具有良好平衡的对象检测模型架构至关重要。过去,老爸一直使用 MobileNetSSDV2 模型架构来构建我在 Tensorflow 上运行的对象检测模型,该模型在准确性和性能(10FPS)之间提供了良好的权衡。这一次,他使用了 MobileNetSSDV2 模型,它带有在 PyTorch 上运行的 NVIDIA JetPack SDK,只需添加三行代码即可。

2. 构建头部运动

头部运动模块通过 adafruit_servokit 框架控制两个舵机的角度,以达到目标航向和俯仰。Adafruit 伺服套件是一个与 Raspberry Pi 兼容的框架,它允许您使用几行代码来控制伺服电机。由于老爸使用 PWM 驱动器来控制伺服电机,需要从连接到 PWM 驱动器的 Jetson Nano SCL 和 SDA GPIO 引脚发送控制信号。因此,在初始化时,他使用 SCL 和 SDA 引脚配置伺服套件。只需要驱动两个舵机;然而,这个 PWM 驱动器最多可以驱动 16 个伺服电机。要实际移动伺服电机,老爸只需通过传递适当的servo_no 为self.kit.servo[servo_no] 分配一个值。除此之外,为了让 Ellee 将她的头移动到面对检测到的人,需要做的就是将检测到的人脸的 x 坐标转换为相对于 Ellee 当前头部方向的航向角,并相应地使用映射值设置相关伺服。

3. 建立听力

听力模块负责通过麦克风收听语音,并使用语音识别技术将其转换为文本。延迟在这里非常关键,因为处理时间越长,Ellee 在对话中做出响应的时间就越长。理想情况下,您希望在边缘(在设备中)运行语音识别以避免互联网延迟。但是到目前为止,在边缘上运行需要强大的设备,还没有在设备上运行的边缘语音识别技术能够与 Jetson Nano 的计算能力相媲美,接近谷歌语音识别,这是老爸觉得的可接受的标准。于是他决定使用谷歌语音识别云服务。为了最大限度地减少延迟,他使用了流技术,即不断地将检测到的语音块发送到云端,以便它可以在人们说完整个句子之前执行识别。使用这个技巧,老爸设法从人说完一个句子的那一刻起不迟于 1.5 秒得到识别的文本结果,无论句子的长度如何。

4. 构建大脑

Ellee 的大脑负责从当前对话中生成文本响应。因此,需要做一个聊天机器人,它根据直觉逐字生成响应,即通过理解所说的内容和对话的上下文。 是时候认识 GPT-3!这是通用 NLP AI 模型的最新突破之一,由 OpenAI 团队构建,并使用来自 Wikipedia 和书籍的 45TB 文本进行训练。事实上,维基百科只占其训练集的 3%,所以你可以想象这个模型的庞大规模。它的训练成本高达 1200 万美元,并且有 1750 亿个参数!GPT-3 更加独特的地方在于,它是一种通用语言模型,只需以简单的人类语言给出指令,就可以服务于任何与文本相关的任务。这允许 GPT-3 执行各种任务,例如完成一首诗、撰写商业提案以及执行情感分析和文本分类,而无需提供常见 NLP 模型所需的数百万个训练集。

5. 构建说话

老爸使用 Amazon Polly 合成 Ellee 的声音。这是另一个增加了 200 毫秒延迟的云服务。然而,声音的质量非常自然。

6. 控制器

控制器的工作是通过在它们之间发送数据来将所有模块粘合在一起。它有一个状态机,可以跟踪 Ellee 的当前思想状态,这决定了它接下来要做什么,例如。开始听、停止听、开始说话、移动头、重置头部位置等。例如,当 Ellee 第一次看到 Dexie 时,控制器创建了一个以 Dexie 作为焦点人物的新会话。这一点至关重要,因为有时可以检测到不止一个人,老爸希望 Ellee 能够看到一直在与之交谈的同一个人。然后控制器将从瞄准模块获取 Dexie 的边界框位置,计算并将新的航向和俯仰角发送到头部运动模块作为新目标,以便它的头部开始跟随他。当 Dexie 保持可见超过两秒时,控制器将指示语音模块向他打招呼并开始收听。当一个句子被完全说出时,它会从听力模块中抓取识别出的文本并将其传递给大脑,通过对 GPT-3 的 API 调用生成响应并等待响应。收到响应后,它将获取响应文本并将其传递给语音模块以进行朗读。当 Dexie 不再可见超过 10 秒时,控制器将重置对话会话并准备好寻找下一个可见的人。

组装

接下来就是组装好Ellee

好了,让我们看看整个项目的视频介绍:

整个项目完整的细节,请访问链接:

https://github.com/msubzero2000/project-ellee-public

就想问这个老爸:你还缺儿子么?

0 人点赞