亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用加速度计和 ESP 的手势识别

组件和用品

Arduino 101
包括内置加速度计,因此不需要额外的组件或电路。
× 1
Arduino UNO
您可以使用 Arduino Uno(或其他 Arduino)代替 Arduino 101,但您会也需要一个加速度计。
× 1
Adafruit 模拟加速度计:ADXL335
如果您使用的是 Arduino 而非 Arduino 101(内置加速度计)。
× 1
SparkFun 三轴加速度计突破 - ADXL335
如果您使用的不是 Arduino 101 (内置加速度计)。
× 1

关于这个项目

概览

本教程向您展示如何使用 ESP 系统将基本手势识别整合到您的 Arduino 项目中。例如,您可能会识别不同的网球手势,例如正手、反手和发球;舞蹈套路的要素;举重手势;等。使用加速度计感应手势并将其发送到在您的计算机上运行的 ESP 应用程序。 ESP 使用简单的机器学习算法将实时加速度计数据与记录的不同手势示例进行匹配,当它识别出与其中一个示例类似的手势时,将向 Arduino 发送一条消息。系统仅识别离散手势的个别出现;它不提供有关如何执行手势的信息。尽管如此,它仍可用于广泛的交互式应用程序。

下载ESP手势识别应用:

  • Mac:ESP-Gestures-Mac-20161028.zip
  • Windows:ESP-Gestures-Win-20161028.zip。您可能还需要 Microsoft 提供的 Visual C++ Redistributable(更新 3)。
  • Ubuntu:ESP-Gestures-Ubuntu-20161028.tar.gz
  • 示例手势:ForehandBackhandServe.grt

第 1 步。连接您的加速度计。

如果您使用的是内置加速度计的 Arduino 101,则可以跳过此步骤。否则,您需要连接加速度计。要做到这一点,首先将公头针焊接到分线板上,如果你还没有这样做的话。然后将加速度计连接到 Arduino。

作为一种快捷方式,您可以将加速度计分线器直接插入 Arduino Uno(或其他具有相同外形尺寸的 Arduino)的模拟输入引脚。然后在 Arduino 代码中,您可以配置适当的引脚为加速度计提供电源和接地。

或者,您可以将加速度计插入面包板并将其连接到 Arduino,将其电源和接地引脚连接到 Arduino 的 5V 和 GND 引脚,将其 X、Y 和 Z 轴引脚连接到三个模拟输入Arduino 板。

步骤 2. 上传 Arduino 代码。

您可以使用下面的 Arduino 程序之一从加速度计读取数据并通过串行 (USB) 将其发送到计算机。首先,检查 Arduino 程序中指定的引脚是否与您连接加速度计的方式相匹配(例如,xpin 对应于连接到加速度计 X 轴引脚的模拟输入引脚)。 (如果您使用的是内部连接加速度计的 Arduino 101,则这不适用。)然后从 Arduino 工具菜单中选择适当的板和串行端口并上传 Arduino 草图。

步骤 3. 检查串行监视器中的数据。

打开 Arduino 串行监视器,将其设置为 9600 波特,然后检查您是否正在从 Arduino 获取加速度计数据。您应该会看到移动加速度计时会发生变化的三列数字。使用 Arduino 串行绘图仪查看这些数字的图表。

在继续之前,请务必关闭串行监视器和串行绘图仪,否则它们会阻止 ESP 应用程序与您的 Arduino 通信。

步骤 4. 运行 ESP 手势识别应用程序并选择您的串口。

下载ESP手势识别应用:

  • Mac:ESP-Gestures-Mac-20160812.zip
  • Windows:ESP-Gestures-Win-20160812.zip

从配置菜单中选择与您的 Arduino 板对应的串口。 (点击“选择串行端口”标题以打开端口列表。)

您应该会在“原始数据”图中看到实时数据流入。图中的三条线对应于加速度计的三个轴:红线对应 X 轴,绿色对应 Y 轴,蓝色对应 Z 轴。

步骤 5. 记录校准样本。

为了让 ESP 应用程序了解加速度计和 Arduino 的期望值范围,您需要记录校准样本。将加速度计放在平坦的表面上,Z 轴朝上。按住“1”键一秒左右记录“Upright”校准样本。您应该会看到样本图出现。然后,将您的加速度计翻转过来,并保持其平坦和静止,按住“2”键以记录颠倒的校准样本。 ESP 系统使用这些数据来确定哪些数值对应于 0g 加速度(在 X 轴和 Y 轴上),哪些对应于 1g 加速度(在 Z 轴上)。

第 6 步。记录示例手势。

单击 ESP 应用程序或输入大写字母“T”,进入 ESP 应用程序的“培训”选项卡。此选项卡允许您记录或加载您希望 ESP 系统识别的手势示例。您最多可以录制九种不同手势的示例。

要录制手势示例,请在按下要与手势关联的标签对应的键的同时做出手势。例如,要录制带有标签 1 的手势,请在制作手势时按住键盘上的“1”键。 (或者,您可以在 ForehandBackhandServe.grt 中加载示例网球手势。)

当您希望系统识别手势时,请务必以相同的配置记录加速度计的示例手势。例如,您可以将加速度计以特定方向握在手中,或者将其附加到您将要以特定方向握住的物体上。

一个好的样本包含与整个手势相对应的数据,但在开始或结束时没有太多额外的基线数据。也就是说,样本应该以相对平坦的短线开始和结束,既不能太长也不能完全缺失。此外,如果您的手势结束的位置与开始的位置不同,请确保不要 记录您将加速度计带回起始位置的时间。例如,如果您正在记录向右滑动的手势,您只想记录手从左向右移动时的部分手势,而不是手返回初始位置的时间。

您记录的每个附加示例都是机器学习算法在识别手势时可以与之匹配的另一个示例。这意味着如果您希望系统识别手势的不同变化(例如,不同人做出的不同方式),记录每个变化的样本可能会有所帮助。另一方面,如果你有不好的样本,他们可能会混淆系统;更多的样本并不一定更好。总的来说,我们很幸运地为每个手势记录了大约 5 到 10 个样本,尽管同样,单个样本的质量比数量更重要。

如果您不喜欢某个样本(例如,因为您在错误的时间按下了键而错过了与该手势部分对应的数据),您可以通过单击该样本下方“删除”一词旁边的框来删除它.您可以通过在样本图上单击并拖动以选择要保留的样本部分,然后单击标有“修剪”的框来修剪样本。您可以通过单击样本图下方的箭头图标在类中的不同样本之间导航。如果您在错误的类中记录了一个样本,您可以通过单击“重新标记”按钮,然后按下与要分配样本的标签对应的键来移动它。要命名手势,请单击“重命名”按钮,输入名称并按 Enter。

第 7 步:训练系统识别手势。

一旦您记录了一些示例手势,您就可以训练 ESP 系统从示例中识别这些手势。按键盘上的“t”键来训练系统。您应该会看到消息“训练成功”出现在窗口底部。现在,当您做出类似于您录制的示例之一的手势时,您应该会看到其名称出现在实时传感器数据图上。

第一次训练时,系统可能无法正常工作。在记录示例手势时经常训练和测试系统会很有帮助,这样您就可以了解它的行为方式。

特别是,如果系统无法识别您认为应该识别的手势,您可能需要记录该手势的其他示例。如果系统在不应该识别手势时识别出手势,您可能需要删除或修剪看起来与其他手势不同的示例,或者包含长时间相对平坦的线条的示例。在修改示例以重新训练系统后,请务必按“t”。

步骤 8. 根据需要调整系统配置。

虽然修改您的训练示例可能是帮助系统正确执行的最重要方法,但 ESP 还允许您配置一些底层系统参数。为此,请单击“单击以打开配置”标签。您应该看到两个参数:可变性和超时。请注意,更改这些参数后,您需要按“t”重新训练系统。

可变性参数控制手势可以与记录的示例之一有多大不同并且仍然可以被识别。数字越大,差异越大。如果系统似乎要求您的手势与您录制的示例过于相似,您可以尝试增加此数字。 (您也可以尝试记录其他示例。)如果系统识别出虚假手势,您可以尝试降低此数字,尽管您也可以尝试删除任何看起来很糟糕的训练示例。

超时参数控制系统在识别手势后等待多长时间才能识别新手势。它以毫秒(千分之一秒)为单位。如果系统似乎缺少与另一个手势紧密相连的手势,请尝试降低此数字。但是要小心,因为如果您将此数字设置得太低,系统可能会多次识别单个手势。如果系统在您只做一个手势时似乎可以识别多个手势(例如,如果您只做一个正手,系统会看到正手和反手),您可以尝试增加此参数。

第 9 步。将手势识别整合到您的 Arduino 项目中。

当 ESP 系统进行预测时,它会向您的 Arduino 发送一条消息,其中包含它识别的手势编号(作为 ASCII 文本后跟换行符,例如“1\n”)。通过在串口上读取这些预测,您可以让您的 Arduino 以各种方式响应手势。

预测也通过 TCP 发送到在本地主机端口 5204 上运行的服务器(与 Arduino 的格式相同)。例如,这可能是用 Processing 或其他软件编写的游戏。在启动 ESP 应用程序之前,请确保 TCP 服务器正在运行。

工作原理

这个特殊的 ESP 应用程序使用一种称为动态时间扭曲(或 DTW)的算法。该算法通过消除或复制单个读数来扭曲实时传感器信号,生成一系列变化并检查它们与记录样本的相似程度。该算法寻找最接近实时传感器数据的训练样本。如果两者之间的差异小于某个阈值,则将其视为匹配并输出与包含该样本的训练类对应的预测。您可以使用配置下拉菜单中的“可变性”参数来调整所需的距离。

手势识别只是ESP系统可以应用的领域之一。 ESP 建立在手势识别工具包 (GRT) 之上,尽管它的名称如此,但实际上包含了广泛的机器学习算法,可以应用于广泛的实时传感应用。 ESP 获取特定应用程序的代码,并将其转换为定制的用户界面,以便使用该机器学习管道。这些特定于应用程序的程序包括 GRT 机器学习管道、传感器输入规范、校准过程的定义以及可调参数的规范。我们已经为颜色感应、使用加速度计的姿势检测和简单的音频识别构建了 ESP 示例。有关更多信息,请参阅 ESP GitHub。

代码

Arduino ADXL335 代码
此代码从连接到 Arduino 的 ADXL335 读取:加速度计的 X 轴引脚应连接到 Arduino 的引脚 A5,Y 轴连接到 A4,Z 轴连接到 A3。读数通过串行 (USB) 端口以 9600 波特发送,作为制表符分隔、换行符终止的 ASCII 数据。
Arduino 101 加速度计代码
从 Arduino 101 上的内置加速度计读取加速度计数据。读数通过 9600 的串行 (USB) 端口作为换行符终止、制表符分隔的 ASCII 数据发送。

制造工艺

  1. 使用 Arduino 和 RFID 和 Python 的考勤系统
  2. 使用 Arduino、1Sheeld 和 Android 的通用远程控制
  3. 使用 Arduino 和智能手机的 DIY 电压表
  4. IOT - 使用 ESP8266、Arduino 和超声波传感器的智能罐
  5. 使用 Arduino 的频率和占空比测量
  6. 使用 Firmata 和 Xbox One 控制器控制 Arduino Rover
  7. Sonar 使用 arduino 并在处理 IDE 上显示
  8. 使用 Bolt 和 Arduino 控制 LED 亮度
  9. 使用 Arduino 的简单智能机械臂
  10. 使用 Arduino 进行语音识别和合成
  11. 使用 Alexa 和 Arduino IoT Cloud 完全控制您的电视
  12. 如何使用 Arduino 和 Processing IDE 制作指南针