如何利用边缘人工智能和低功耗物联网通信来构建一个简单手势控制系统
扫描二维码
随时随地手机看文章
像《钢铁侠》这样的电影让我们梦想着智能助手和只需挥挥手就能控制设备等技术。当时,这一切听起来都很科幻,但现在我们离实现它越来越近了。传感器越来越智能,处理器几乎可以适应任何东西,机器学习也越来越智能。所有这些都激发了我的灵感,让我设计了一种可穿戴的魔杖,它能让我们用手做出手势,控制设备。
随着传感器变得更小、更便宜、更节能,可穿戴设备正变得越来越受欢迎,而处理器也变得足够强大,可以直接在设备上运行机器学习。这一进步使科技公司和开发人员能够构建能够理解人类行为并立即做出反应的系统。该项目展示了如何利用这些技术超越按下按钮和开关,为创新免提、便携式和情境感知解决方案提供了机会,例如家用电器的免提控制、行动不便的人的辅助辅助,甚至是简单的工业智能手套控制。虽然手势检测已经得到了很好的探索,但这个项目的重点是将人工智能和物联网结合起来,构建在现实场景中工作的智能解决方案。
随着硬件和软件生态系统的进步,在微控制器等受限设备上运行设备上的AI模型是一个已经解决的挑战,目前的挑战是开发可以使用该技术的创新解决方案。随着双处理器、MB闪存和RAM的出现,微控制器变得更加先进,同时运行时仍然需要很少的能量。软件库和框架允许我们优化机器学习模型,使它们能够适应KB的闪存,使我们能够在微控制器的基础上添加智能操作。
在机器学习管道中,我们需要获取数据来训练模型。在这个项目中,数据是由IMU传感器记录的手部运动。复杂的任务包括从IMU获取数据并使用它生成用于训练手势分类模型的数据集,然后需要将该模型部署到微控制器上。Edge Impulse平台简化了这些任务,使我们能够快速创建高效的人工智能解决方案。我也要对公司支持我开展这个研究项目表示衷心的感谢。
项目概述
该项目展示了我们如何利用运动传感和边缘人工智能来使用手势控制设备。开发了一种可穿戴设备,用于运行设备上的机器学习模型,该模型可以实时检测和分类手势。一旦识别出手势,就会通过BLE将命令发送到Arduino Nano 33 BLE等驱动设备,该设备反过来控制继电器和执行器来打开或关闭电灯等电器。所有推理都在可穿戴设备上本地进行,从而实现低延迟、隐私和节能。在可穿戴设备上运行的人工智能模型已经经过训练,可以检测手部的圆形和左右运动,并将这些手势与随机运动和无运动区分开来。
我使用了低成本的XIAO nRF52840 Sense,因为它具有板载6 DOF IMU (LSM6DS3TR-C),蓝牙LE 5.2,超低功耗,其小巧的外形使其非常适合可穿戴设备。板载IMU用于检测手部运动,运行在MCU上的AI模型对运动进行分类。BLE连接用于向执行设备Arduino Nano 33 BLE Sense发送命令,该设备有一个连接到GPIO的继电器,用于为电灯等电器供电。XIAO nRF52840 Sense的规格/功能非常出色,因为它以紧凑、小尺寸和低成本的设备满足了项目的要求。
XIAO nRF52840 Sense通过BLE发送“命令”作为字符,Arduino Nano 33 BLE使用接收到的数据打开和关闭灯,用于演示目的。
本文档的下一部分描述了如何开发类似的可穿戴设备以及我所做的各种配置。想马上测试一下可穿戴设备吗?你可以跳到第03节。部署模型,开始构建你的可穿戴设备。
您可以在此链接访问公共项目Edge Impulse项目:手势检测。项目文件的所有源代码都可以在GitHub存储库中找到:gesture-control-AI-wearable。
组件和硬件配置
软件组件:
•Arduino IDE
•Edge Impulse Studio账户
硬件部分:
•XIAO nRF52840检测
•Arduino Nano 33 BLE
•USB- c和micro USB连接线
•个人电脑(PC)
01. 装配可穿戴设备
为了确保训练数据的真实性,在数据收集过程中,首先将XIAO nRF52840 Sense佩戴在手腕上,以匹配预期的可穿戴位置和手势检测条件。我设计了一个简单的外壳,可以容纳电路板和一个LiPo电池。外壳有一个USB-C插槽,允许我们将PC连接到XIAO nRF52840 Sense,并在项目的数据采集步骤中收集IMU数据。我还附上了我设计的腕带,并把它们印在TPU材料上。在3D打印完外壳后,我将电线焊接到XIAO板上的电池垫上,允许板使用电池自供电。
02. 收集数据,训练模型
现在有了将XIAO nRF52840传感器固定在手上的能力,我们现在可以收集数据并训练手势分类模型。项目中使用的运动代表类是:
•圆
•左右
•随机运动
•闲置
2.1. 收集数据
为了从XIAO nRF52840 Sense收集IMU数据并创建数据集,我们将利用Arduino草图XIAO_nRF52840_Sense_print_IMU_data。从电路板上收集原始数据。草图通过串行连续发送3轴传感器数据,我们的计算机将数据转发到边缘脉冲项目。
在您的个人计算机(最好是笔记本电脑)上,确保您已经安装了Arduino IDE和Seeed Studio的Seeed nRF52 mbed-enabled Boards。接下来,安装用于从IMU获取数据的LSM6DS3库。在上传代码打印原始IMU数据时,我遇到了一些兼容性问题,导致诸如“类arduino:: MbedSPI没有名为‘setBitOrder’的成员”之类的错误,尽管如此,成功上传代码后,IMU数据为0。经过调试,我设法通过使用2.7.2版本的Seeed板和2.7.2版本的LSM6DS3库来工作。
将您的XIAO板连接到您的PC,选择“Seeed XIAO BLE Sense - nRF52840”板,然后选择相应的端口并上传草图。在串行终端(如串行监视器)上,您应该看到来自板的原始IMU数据,并且当板移动时它们将发生变化。现在我们准备将我们的XIAO板与Edge Impulse Studio连接起来。
连接到XIAO板并检索数据的第一步是在PC上安装Edge Impulse CLI。这是一款非常先进的软件,用于控制本地设备,充当代理,为没有互联网连接的设备同步数据,并上传和转换本地文件。在本项目中,我们将利用CLI的边缘脉冲数据转发工具从XIAO板捕获串行数据,并自动将其上传到边缘脉冲项目。您可以根据计算机的操作系统执行安装步骤。打开Edge Impulse Studio并使用您喜欢的名称创建一个新项目。
将您的XIAO nRF52840 Sense连接到您的PC,并且没有串行终端应用程序访问设备的COM端口。项目创建完成后,确保您的PC可以访问互联网,并在CLI中运行以下命令启动数据转发器:
您将被要求输入您的Edge Impulse帐户凭据并选择新项目。如果一切正常,数据转发器将自动检测3个传感器轴,我们可以将它们命名为Ax, Ay, Az。
现在,当我们进入边缘脉冲项目中的“数据采集”时,我们会看到我们的XIAO板已经连接,平台已经检测到3个传感器轴。
现在我们可以开始对手势数据进行采样。转到“数据采集”,在“收集数据”部分,我们需要首先为我们收集的数据设置标签/类别。我们还可以使用“样本长度(ms.)”设置来配置采样数据的持续时间。我将采样长度设置为120秒。点击“开始采样”,Edge Impulse Studio将自动指示在您的PC上运行的数据转发器通过串行开始采样IMU数据并将其上传到项目中。一旦设置的采样持续时间完成,采样数据将在“数据集”下可见。
在我的例子中,我一边收集数据,一边用手做圆周运动、左右运动和随机运动,从而使生成的模型能够更有效地识别这些运动。在可穿戴设备还能让模型理解“动作”的时候,我也收集了数据。总的来说,我创建了一个大约6分钟的数据集,在圆形,左右,随机和无运动状态下,手部运动的持续时间相等。
从IMU的加速度计数据中,我们可以观察到,从运动数据的时间序列表示中,不同手势之间存在数据“趋势”。这告诉我们,人工智能模型能够分析这些趋势并学习手势动作。
在继续处理IMU数据之前,我们可以通过点击每个样本上的“3点”垂直菜单,然后选择“拆分样本”,将收集到的数据分成1秒样本。点击“+Add Segment”,然后点击图形来创建一个段。重复此操作,直到图形上的所有运动样本都被分割。最后,单击“分割”,您将看到样本为1秒(或通过“设置段长度(ms.)”配置)。
最后,创建数据集的最后一步是将其拆分以用于训练和测试。流行的规则是80/20分割,这表明80%的数据集用于模型训练目的,而20%用于模型测试。在Edge Impulse Studio项目中,我们可以点击带有感叹号的红色三角形(如下图所示),这将打开一个界面,建议拆分我们的数据集。然后,在打开的界面上单击“执行训练/测试分裂”按钮。这将打开另一个界面,询问我们是否确定重新平衡数据集。我们需要点击按钮“是执行列车/测试分裂”,最后按提示在下一个窗口中输入“执行分裂”,然后点击按钮“执行列车/测试分裂”。
2.2. 训练一个手势分类模型
在为我们的项目收集数据之后,我们现在可以为所需的手势分类任务训练机器学习模型。为了做到这一点,在Edge Impulse项目中,我们需要创建一个Impulse,这是一个定义输入数据类型、数据预处理算法和机器学习模型训练的配置。
第一步是通过点击“创建冲动”按钮创建一个冲动。在我的例子中,我将输入数据设置为窗口大小和窗口增加1000ms(1秒)。为了处理原始数据并提取有意义的特征,我使用了光谱分析。这个算法非常适合分析重复运动,比如加速度计的数据。它提取信号随时间变化的频率和功率特性。最后,在每个脉冲中处理的数据被馈送到一个分类器,分类学习块,它被设计成从数据中学习模式,并可以将这些模式应用到新数据中。它对运动分类或识别声音非常有用。设置完脉冲的配置后,我们点击“保存脉冲”按钮。
下一步是配置处理块并从训练集中生成特征。在脉冲设计下,点击“光谱特征”。我们可以使用默认的DSP参数或利用“自动调谐参数”功能来自动优化它们以获得更好的性能。在我的例子中,我继续使用默认参数。
在页面上,单击“保存参数”,然后单击“生成功能”按钮。根据数据的大小,特征生成过程将花费一些时间。当这个过程完成后,Feature explorer将绘制出这些特性。注意,特征是处理块的输出,而不是原始数据本身。
查看特征,我们可以观察到,当使用谱分析时,4个类的聚类是分开的很好(有意义),说明分类器可以学习差异。
最后一步是训练模型。我们点击“分类器”,设置训练参数。我使用了100个训练周期(epoch),学习率为0.001。对于像这样一个相对较小的项目,我们可以使用CPU作为训练处理器,在这种情况下,训练过程需要不到10分钟。点击“Save & train”开始培训过程。
该分类器是一个简单的全连接前馈神经网络,具有一个输入层、两个密集层和一个输出层。在输入层中,每个样本被表示为来自频谱分析数字信号处理块的X数值(特征)的向量。接下来,密集层转换特征并学习模式。最后,输出层生成给定输入在4个运动类上的概率分布(预测)。
训练过程完成后,在我的案例中,得到的模型准确率为96%,损失为0.08。我选择这个作为可接受的实验性能,并在未见过的数据上对模型进行测试。
2.3. 测试模型
在训练我们的模型时,我们使用了数据集中80%的数据。剩下的20%用于测试模型对未见数据分类的准确性。在部署模型之前,我们需要通过在新的/未见过的数据上测试它来验证它没有过拟合(拥挤的数据)。为了测试我们的模型,我们首先点击“模型测试”,然后点击“全部分类”。该模型给出了96%的令人印象深刻的测试性能,我选择了这个可接受的选择,以进一步将模型部署到XIAO nRF52840 Sense上。
03. 部署模型
我们将把Impulse部署为Arduino库-一个包含所有过程的单个包,用于采样IMU数据1秒,处理数据并将特征馈送到分类器。我们可以将此包(Arduino库)包含在我们自己的草图中,以便在XIAO nRF52840 Sense等微控制器上本地运行脉冲。从技术上讲,部署Impulse不需要编程,因为Edge Impulse平台会生成所有所需的源代码和示例草图,这真是太棒了!
确保脉冲是活动的,然后单击“部署”。在“搜索部署选项”中选择Arduino库。
由于内存和CPU时钟速率对于我们的部署是有限的,我们可以优化模型,以便它可以利用nRF52840上的可用资源(或者简单地说,这样它就可以适应并管理在SoC上运行)。模型优化通常有一个权衡,即我们决定是否以模型准确性为代价来提高性能或减少模型的内存(RAM)使用。Edge Impulse使模型优化非常容易,只需点击一下。目前我们可以得到两个优化:EON编译器(提供相同的精度,但使用54%的RAM和61%的ROM)和TensorFlow Lite。为了启用模型优化,我选择了EON Compiler and Quantized (int8)。
点击“构建”,这将启动相应的打包冲动的任务,最后一个压缩文件将下载到您的计算机上。将库添加到Arduino IDE并打开自定义推理草图(在GitHub存储库中可用)。推理草图连续采样1秒的IMU数据,并对每一类运动进行分类。当检测到圆周运动和左右运动时,XIAO板通过BLE发送一个字符(分别为1和0)。
04. 物联网控制板编程
在训练模型并将其部署到XIAO板之后,剩下的任务是对BLE设备(如Arduino Nano 33 BLE)进行编程,以接收来自XIAO板的数据,并反过来控制GPIO引脚的逻辑电平。我们可以使用这种逻辑来控制继电器等设备,这些设备依次连接到灯、风扇、电机等电器。在我的例子中,我将一个单通道继电器连接到Arduino Nano的GPIO,继电器连接到开关灯(这个季节的圣诞灯)。这一步相当简单。我们需要将继电器连接到Arduino Nano的GPIO上,并将BLE外设代码上传到板上。在代码中,变量RELAY_PIN用于控制设置GPIO,允许我们使用逻辑电平来控制继电器。将代码上传到Arduino Nano 33 BLE后,我们可以通过与XIAO板做手势来实验是否一切正常,我们将看到Arduino Nano 33 BLE上的板载LED开关。
在节日的气氛中,我接通了继电器,将电源切换到圣诞灯,展示了我们如何反过来使用逻辑来控制其他设备。
结果
从科幻小说到现实,我们现在可以用手势控制设备和电器。可穿戴设备的成本相当低,看到我们如何利用新兴的人工智能和物联网技术轻松开发这样的应用程序,令人印象深刻。远程驱动基础设施已经被广泛部署,但将人工智能作为控制逻辑的集成正在为更智能的系统开辟新的可能性。下面是可穿戴控制圣诞灯的演示,使用圆形和左右手势以及BLE驱动。
结论
这个项目展示了如何利用边缘人工智能和低功耗物联网通信来构建一个在现实世界中实际工作的简单手势控制系统。这款可穿戴设备可以在设备上进行手势识别,并使用BLE来控制附近的其他设备。这使一切都保持快速和成本效益。
目前,可穿戴设备只能识别少数几种手势,但我们可以通过收集更多数据、重新训练模型和连接更多设备来扩展可能的检测。结果显示了Edge-AI支持的可穿戴设备作为人机界面的潜力。
本文编译自hackster.io





