搭配使用适用于微控制器和 Arduino 的 TensorFlow Lite 的 AI Magic Wand

1. 简介

构建内容

在此 Codelab 中,我们将学习如何使用适用于微控制器的 TensorFlow LiteArduino Nano 33 BLE 上运行深度学习模型。微控制器变身为数字“魔杖”通过挥舞和施放各种法术。当用户移动魔杖时,这一人类无法理解的复杂多维传感器数据会作为输入传递给模型,该模型输出一个简单的分类,当有多次动作发生时,它会提醒我们。

9208eb1207211349.gif

微控制器上的机器学习

机器学习技术可用于打造智能工具,让生活更轻松,就像 Google 助理一样。但通常情况下,这些体验需要大量的计算或资源,其中包括强大的云服务器或桌面设备。不过,现在可以在微小的低功耗硬件(例如微控制器)上运行机器学习推断。

微控制器极为常见、价格低廉、需要的能源非常少,并且非常可靠。是各种家用设备(Think 电器、汽车和玩具)的组成部分。事实上,每年生产大约 300 亿台微控制器驱动的设备。

1914a419dfacf0b5.jpeg

通过将机器学习技术引入小型微控制器,我们可以提高日常使用的数十亿台设备的智能,而无需依赖昂贵的硬件或可靠的互联网连接。比如,有可以适应日常生活的智能电器、能够辨别问题和正常使用区别的智能工业传感器,以及可以帮助孩子以有趣和愉悦的方式学习的神奇玩具。

适用于微控制器的 TensorFlow Lite(软件)

864114d0c2b4c919

TensorFlow 是 Google 的开源机器学习框架,用于训练和运行模型。TensorFlow Lite 是一个软件框架,它是 TensorFlow 的优化版本,旨在在手机等小型低功耗设备上运行 TensorFlow 模型。

适用于微控制器的 TensorFlow Lite 是一种软件框架,它是 TensorFlow 的优化版本,旨在在微型低功耗硬件(例如微控制器)上运行 TensorFlow 模型。它符合这些嵌入式环境中要求的约束条件,例如,它具有较小的二进制文件,不需要操作系统支持、任何标准 C/C++ 库或动态内存分配等。

Arduino Nano 33 BLE(硬件)

bcd452d4d660efa9.jpeg

Arduino 是一个热门的开源平台,用于构建电子项目。其中包括:

  1. 一个物理可编程电路板(通常是微控制器),例如此 Codelab 中使用的 Arduino Nano 33 BLE。
  2. Arduino IDE(集成开发环境),用于编写计算机代码并将计算机代码上传到物理板。

Arduino Nano 33 BLE 是一个基于微控制器的平台,也就是单台电路板上的小型计算机。它具有处理器、内存和 I/O 硬件,可向其他设备发送和接收数字信号。与计算机不同,微控制器功能不强,通常也不运行操作系统。相反,它们的处理器较小,内存不大,且您编写的程序直接在硬件上运行。但由于微控制器的设计尽可能简单,因此微控制器的能耗非常少。

实践内容

  • 设置 Arduino Nano 33 BLE 微控制器,即可变身数字“魔杖”
  • 设置 Arduino IDE 并安装所需的库
  • 将程序部署到设备
  • 挥舞魔杖施展各种咒语,查看预测结果

所需条件

  • Linux、MacOS 或 Windows 笔记本电脑
  • Arduino Nano BLE Sense 33(无头文件)
  • Micro USB 数据线(如果您使用的是 USB-C 笔记本电脑,请改用 USB-C 转 Micro USB 数据线)
  • (可选)棍子,约 12 英寸(长 30 厘米)
  • (可选)粘性胶带

2. 设置 Arduino 微控制器

解压 Arduino

将其从包装盒中取出,然后从泡沫中取出。它具有导电性,否则可能会导致问题!

6ed84a651c871a58.jpeg

将其插入笔记本电脑

  • 将 MicroUSB 线插入芯片中的插座。
  • 将数据线的另一端插入笔记本电脑上的 USB 接口。
  • Arduino 左下方的 LED 指示灯(下图中的左上方)应亮起。

c6936696f9659104.jpeg

熟悉工作流程

99852afbed7e78b0

如上图所示,Arduino 上的 TFLite 解释器会定期在模型上运行推断。模型使用处理后的加速度计数据作为输入,并输出预测结果,建议最有可能发生的手势。此外,将输出所需的输出,并且正确的 LED 将亮起。

3. 设置 Arduino IDE

1. 下载 Arduino IDE

为了将程序部署到 Arduino 微控制器,我们使用 Arduino IDE。

下载后,点击图标如下所示的应用,安装并打开 Arduino IDE:75717f13527f36b9

初始着陆页将打开,如下所示:

933c91e6e1997c61

2. 设置 Board Manager

  1. 从 Arduino 菜单中,选择 Tools -> Board: "Arduino .." —> Boards Manager
  2. 搜索 "Arduino Nano 33 BLE" 并安装 Arduino nRF528x Boards (Mbed OS)。这将确保 Arduino IDE 支持我们的 Arduino Nano 33 BLE 微控制器。817c63346152eda9
  1. 从 Arduino 菜单中,选择 Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

9357691e1a1348eb

  1. 最后,验证您选择的开发板是否为“Arduino Nano 33 BLE”。

aa08706bb84fa9b2.png

3. 设置端口

从 Arduino 菜单中,选择 Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE)。您应该会看到如下所示的内容:

8c25990d0c6fb6f8.png

4. 检查板级连接

从 Arduino 菜单中,选择 Tools -> Get Board Info。您应该会看到如下所示的内容:

ccd8f5305be6cf59.png

4. 安装库

1. TensorFlow Arduino 库

此库包含所有适用于微控制器的 TensorFlow Lite 示例,其中包括此 Codelab 所需的魔术棒源代码。

  1. 从 Arduino 菜单中,选择 Sketch -> Include Library -> Add .ZIP Library...
  2. 添加您下载的 TensorFlow Arduino 库 .zip

2. LSM9DS1 Arduino 库

借助该库,您可以在 Arduino Nano 33 BLE Sense 上从 LSM9DS1 IMU 中读取加速度计、磁力计和陀螺仪的值。

  1. 从 Arduino 菜单中,选择 Sketch -> Include -> Manage Libraries...
  2. 搜索并安装 "Arduino_LSM9DS1"ac2f78a737c5f233.png

5. 加载和构建示例

1. 加载示例

从 Arduino 菜单中,选择 File -> Examples -> Arduino_TensorFlowLite -> magic_wand 以加载示例代码。

de349f2d3cb49b98.png

这将加载魔杖源代码。

cda8c35a597b0798.png

2. 构建示例

点击素描窗口中的 Upload 按钮。

71cb1474d5e14669

几分钟后,您应该会看到红色文本,表示闪烁已完成。上传过程中,右侧 LED 灯应闪烁,最后会变暗。

3df1d0858c6e40a4

6. 演示

魔杖目前可以检测 3 种手势,如下所示:99a607da66af9fc8

  1. Wing:从左上角开始,仔细地画出字母“W”显示两秒钟
  2. 响铃:直立开始,沿顺时针圆圈移动指挥棒,持续 1 秒。
  3. 斜面:先朝上按住指挥棒,并将 LED 灯朝向您。向左斜坡向下移动指挥棒,然后向右水平向下移动一秒钟。

下图展示了两种手势。依次绘制斜坡和 Wing(可作为演示的参考)。

9208eb1207211349.gif

如需运行演示,请按照以下说明操作:

  1. 插入 USB 后,从 Arduino 菜单中选择 Tools -> Serial Monitor。它最初将打开一个空白屏幕,没有输出。

38e8d53652eb28f2

  1. 移动 Arduino 微控制器,仔细跟踪上述每个形状,并查看串行监视器是否检测到手势。

60b8a0017bcae419

  1. 从串行监视器的输出中,我们发现魔杖确实检测到了所有形状!您还会看到右侧 LED 指示灯亮起。

7. 后续步骤

恭喜,您已成功构建您的第一个手势识别“魔杖”!

我们希望您喜欢这个有关使用适用于微控制器的 TensorFlow Lite 进行开发的简要介绍。微控制器深度学习是一个令人兴奋的新概念,我们鼓励你去外面进行尝试!

参考文档

647c3ef0dc103804

谢谢,祝您构建愉快!