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

2020-06-23 15:25:35 浏览数 (2)

今天我们要介绍一位AI专家,同时也是一个新晋老爸:

他有一个21月大的宝宝,叫黛西。

这位细心的爸爸发现,虽然宝宝还不太会说话,但特别喜欢指着一些图案试图跟爸爸妈妈说这是什么,比如电视录像里的动物、海报上的食物,画册上的卡通图案。

于是他就在想——为什么不构建一个可以与他一起玩这类指向游戏的机器人呢?

概念

经过一番集思广益的讨论……,这个爱心老爸确切地知道想要构建什么——它应该是一个聊天机器人,外观像狗,这是宝宝最喜欢的动物。她的名字叫Qrio,是疑问和好奇两个词的混合体。

所以他用自家的狗狗为蓝本,设计了一个形象:

Qrio将能够看到宝宝走过并对他说:“嗨,黛西!你想来给我看你的玩具吗?接下来,当宝宝拿起并向她展示飞机玩具时,她会继续说“嘿,那是一架飞机。让我为您播放一架飞机的视频,然后寻找供他播放的飞机视频。

研究

为了实现上述目标,Qrio需要具有以下模块:

1.理解力,Qrio必须识别宝宝及其携带的玩具。为此,需要有一台连接到AI系统的摄像头,以检测宝宝及其玩具的存在和位置。需要构建经过训练以识别人脸和玩具的对象检测AI模型,该模型将在连接到相机的GPU驱动的设备上运行。

2.视觉存在 -以虚拟狗的形式出现,它将与宝宝进行交互。它由显示在显示器上的虚拟木偶系统驱动。

3.语音,以便Qrio可以向他宝宝招呼,并要求宝宝拿起玩具,说出玩具的名称等,这需要文本语音转换技术,并且显然需要扬声器。

4.视频搜索和播放,以便Qrio可以在YouTube上搜索并播放相关视频。这将由自动化工具来驱动。

5.所有组件的协调员。

经过任真的研究和评估后,这个爸爸确认了一下硬件设备:

1.NVIDIA Jetson Nano。这是一个由GPU驱动的微型嵌入式设备,它将运行所有模块(特别是对象检测AI模型)。这是完成这项工作的理想设备,因为它可以通过简单的HDMI端口支持视频和音频输出,并且具有以太网端口,可轻松访问互联网。您甚至可以插入鼠标和键盘来在设备上进行开发和调试,因为它具有功能齐全的Ubuntu 18.04 OS。

2.电视(带HDMI输入和内置扬声器)。这样宝宝可以看到Qrio并听到她在说什么,还可以播放YouTube视频。

3.树莓派相机-Sony IMX219。这是一款超赞的微型8MP相机,可让Qrio识别出宝宝及其玩具。图像质量很棒,价格也非常便宜。

实作

有了一个坚实的计划,宝爸开始履行自己的使命。

建立AI模型

首先,需要开发和训练对象检测组件以识别特定的人脸和玩具。请记住,NVIDIA Jetson Nano的GPU的功能远不如1080Ti等台式机类GPU卡强大,因此选择在精度和性能之间取得良好平衡的物体检测模型架构至关重要。

宝爸最后选择的模型架构是SSDLiteMobileNetV2,它在 TensorFlow 1.8 object detection API上运行。

宝爸最后决定采用四个类别训练模型:一个人脸和三个宝宝喜欢玩的玩具(飞机,火车和熊猫)。所有训练集图像(每类别150张图像)都是从使用同一台Sony IMX219摄像机录制的视频文件生成的。为了最大程度地提高检测精度并确保照明和背景一致,宝爸都是在同一客厅中拍摄的。这三个玩具是手动制作的,并从视频中刻苦地贴上标签。但是,为了保持理智,宝爸使用了Amazon Rekognition(一种现成的对象检测云服务)来自动标记所有面孔。

视频录制是使用GStreamer完成的,宝爸将记录帧速率设置为120 FPS,并稍后使用视频编辑工具对其进行降采样。记录尺寸设置为720x540,这已经足够了,因为对象检测模型只能在300x300像素上运行,而任何较大的图像在训练和推理过程中都会自动调整为300x300像素。

GStreamer和OpenCV框架用于连接到摄像机并从摄像机获取视频。宝爸设法使对象检测以10 FPS的速度运行,这比最低要求8 FPS还要高-并且具有相当好的检测精度!

建立视觉形象

正确设置视觉状态组件至关重要。Qrio必须具有吸引力,更重要的是,宝宝想要和她一起玩,它看起来像一只真正的活狗。花费了几个小时的时间,宝爸才找到了一个名为arcade的出色Python框架,它支持游戏动画循环,并能够通过旋转和缩放来渲染/显示Sprite(具有透明度的PNG图像)。由于此框架基于OpenGL,因此NVIDIA Jetson Nano的速度性能应该非常出色,因为它将通过GPU加速。

宝爸花了几个小时来调整烦躁的动画参数,以最终得到想要的结果:

语音

经过各种比较后,宝爸最后使用Amazon Polly 。语音质量提高了100倍,并且没有明显的延迟,即使它需要通过Internet进行API调用以从云中生成和下载生成的音频文件。虽然是收费的,但是考虑到Qrio最多只需要说出50个不同的句子,并且它仅需支付50个Amazon Polly电话(0.08美分)的费用,它就可能被大量缓存。好极了!!!

建立视频搜索和播放

如前所述,Qrio必须能够在YouTube上搜索并播放特定视频。最好的方法是使用自动化测试套件,该套件可以控制Web浏览器在YouTube中执行搜索并播放来自搜索结果的视频。在这里,宝爸采用Selenium自动化框架。

建立协调员

该模块用作将所有其他模块粘合在一起的协调器。协调器的一个关键部分是状态机,它可以跟踪游戏的当前状态。

为什么我们需要状态机?这样,我们就可以在收到同一事件时做出不同的决定,具体取决于我们当前所处的状态。例如,如果以前Qrio尚未见过宝宝,则独自观看飞机玩具不应触发播放YouTube视频的呼叫,因为这可能是玩具飞机正躺在沙发上的情况。在播放飞机视频后看到飞机玩具应该让Qrio说:“嘿,我们以前玩过飞机。你为什么不带我看 的东西呢?

您可以在下面的状态图中看到四个主要状态- 空闲,参与,ObectRecognis和PlayingVideo。当系统处于PlayingVideo以外的任何状态时,它会定期调用Fidget Animation System动画Qrio坐立不安,并通过视觉模块进行检查以获取所有可识别对象的位置。系统从空闲状态开始,如果检测到宝宝至少0.5秒钟(以最大程度减少错误检测),它将调用语音模块说类似“ Hi 黛西,您想来玩吗?”的内容。并将游戏状态设置为“ 参与”状态。

此外,如果在处于“ 参与”模式时可以看到熊猫玩具,则Qrio会说“ Hi 黛西,我认为那是一只熊猫,”,并且会进入ObjectRecognised模式。如果熊猫玩具仍然保持可见状态两秒钟,Qrio将切换到PlayingVideo状态下,会说“让我为您播放有关熊猫的视频”,并调用视频搜索和播放模块来搜索并播放熊猫视频。但是,如果最近播放了一个有关熊猫的视频,它会说:“嘿,我们以前玩过熊猫。为什么不给我带来其他东西?视频将只在全屏播放45秒,而视线和烦躁的动画系统将暂停以将CPU资源集中在播放流畅的视频上。视频播放完成后,将隐藏浏览器窗口,并恢复视线和坐姿动画系统。在参与模式下10秒钟内看不到Dexie时,协调器会将状态重置为空闲。

您还可以看到,当人脸可见时,除了PlayingVideo之外,在任何状态下都可以调用Head Tracking模块,以使Qrio的眼球跟随人脸边界框的中心。

好了,来看看当宝宝第一次看见Qrio时候的样子吧!

0 人点赞