本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于机器学习的手势检测手表 (ESP8266)

发布时间:2021-07-28
分享到:

基于机器学习的手势检测手表 (ESP8266)

发布时间:2021-07-28
分享到:

在手势技术的不断发展中,人们生活变得越来越便利,因为它非常直观、易于使用,并且清楚地使您与小工具和周围事物的交互变得充满未来感!因此,为了顺应潮流,我们将使用我们在之前的教学中构建的手表并投入一些机器学习,看看我们是否可以检测到我们正在执行的手势,也许在即将到来的教学中我们可以使用这个手势基于此执行一些非常厉害的项目。

第 1 步:故事时间!             

我在我的Instagram 页面上发布 了一篇帖子,讲述了我将在此版本的手表上实现的所有新功能,但是,我删除了“用于充电的微型 USB 端口”、“按住以打开或关闭电路”和“ 心率”监测”。

所以我想在项目中添加一些 ML,与电子产品相比,它应该很容易,它只是一堆代码,我们必须从堆栈溢出中复制粘贴。如果您想了解有关在嵌入式系统上实施 ML 的更多信息,请查看 2 个链接TinyML手势检测。一个解释了如何在 Arduino 中使用 TinyML 张量流,另一个解释了如何在 Arduino 上使用基本的 ML 算法。我从后一个链接中引用了很多内容,它非常易于遵循,并且可以与非常低内存资源的微控制器(如 Arduino NANO 和 UNO)配合使用。

第 2 步:PCB 组装

我收集了该项目的所有 SMD 组件,然后将它们安排在一个我可以轻松访问而不会乱七八糟的地方。然后剩下的就是焊接!

只需按照电路图并相应地在 PCB 中焊接组件。为了使焊接更容易,从焊接较小的 SMD 元件 [电阻器、电容器、调节器] 到更大的通孔元件 [MPU6050、OLED]。在焊接过程中,我还使用 3M 胶带将 Lipo 电池固定在电路板和 OLED 显示器之间。

我很难找到适合项目使用的调节器,所以在我过去的视频中,我只使用 AMS1117,因为它更便宜且容易找到。但是为了使这个项目比以前的构建更高效。我在 PCB 中给出了 2 个选项,您可以使用 MCP1700 或 LSD3985。就我而言,我使用的是 LSD3985 而忽略了 MCP1700。您可以根据可用性使用任何选项。

第 3 步:对手表进行编程

为了简化编程,我在 PCB 上留出了一些空间,这样您只需插入 FTDI 模块即可开始编程。要对电路板进行编程,您必须先将 esp8266 置于闪烁模式,因此在连接到 PC 时,只需按住连接到 esp12E 的 GPIO-0 的按钮即可。

要测试开发板是否正常工作,只需上传我之前的教程[ Github 链接] 中的代码,然后测试所有功能(如 NTP 时间、轻弹唤醒和更改屏幕)是否有效。如果一切正常,您就完成了硬件部分。

第 4 步:机器学习?[第1部分]

机器学习听起来很花哨和复杂,但相信我,ML 中的少数算法比其他少数非基于 ML 的算法更容易理解。对于大多数算法,当它需要找到问题的答案时,我们需要告诉算法它必须执行的过程序列才能获得最终结果。简单的例子是乘法。如果你想找到乘法问题的答案,比如说 2 乘以 5 我们可以告诉计算机执行多次加法来得到答案。你可以在这里看到,我们正在告诉计算机如何做才能得到答案。

第 5 步:机器学习?[第2部分]

ML 的工作原理没有什么不同,我们只是给计算机一堆问题和相应的答案,然后让计算机找出方法或流程,这样它就可以回答任何新问题,而无需我们手动编程流程。举个例子,在照片中找到一个苹果,对于人类来说是非常容易的,但是我们很难编码并让计算机理解苹果的所有特征,这不是不可能,但它非常乏味和困难. 相反,如果我们可以编写一种算法,该算法只需查看 1000 张苹果图片即可自行学习,那不是很好吗?使用 ML 算法还有另一个好处,那就是他们甚至可能想出一种我们从未想过的在照片中寻找苹果的新方法。因此,ML 是一个非常有趣的探索领域。我真的不是解释机器学习和人工智能的最佳人选,我只是写下我学到的东西。但是如果你读了这么久,你应该看看我的YouTube 频道,如果你还没有订阅这个频道,你可能应该立即订阅!相信我,这绝对值得!

第 6 步:分类

 

机器学习中有很多方法和技术可以解决问题,在我们进行手势检测的案例中,我将使用一种称为分类的技术。为什么要分类?在重复运动一段时间后,人眼似乎可以预测数据。现在,如果我在屏幕外执行相同的动作,您仍然可以通过查看图表来猜测它是什么动作,最好的部分是您甚至可以对其他手势和动作执行此操作。那是因为我们的大脑为不同的模式分配了不同的名称。类似地,如果我们可以多次向 ML 算法显示此数据模式,那么它会尝试理解这些数据并将它们放在不同的组中,或者可以说算法将数据样本分类为不同的类。因此,下次当它在数据中看到类似的模式时,它会弄清楚它是哪种运动或手势。这就是我们需要做分类的原因。

第 7 步:收集用于训练的传感器数据

由于我们现在对 ML 有了基本的了解,我们可以首先从收集用于训练 ML 算法的数据开始。我遵循的教程有一种非常笨拙的数据收集方式,通过串行监视器,因为我必须在手势期间将设备戴在手腕上。为了解决这个问题,我将数据收集无线化。我使用了esp8266的片上闪存,为了更方便,我在OLED显示屏上显示了采集和保存数据的状态。如果您想做同样的编译并将 Data_collection.ino 文件上传到您的手表。一旦你上传了代码,为了测试它,设备一启动就让你的手保持静止,它最初会校准加速度计和陀螺仪。完成后,您就可以开始收集数据了!只需按下连接 GPIO-0 的按钮,设备就会创建一个新功能,然后只需开始移动您的手即可记录运动。使数据采集无线化的努力绝对值得!毫无问题地收集每个运动大约 25-30 次要容易得多(您拥有的样本数量越多,算法的性能就越好)。

第 8 步:处理数据

您现在可以将收集到的数据转储到串行监视器,只需关闭电路电源并连接 FTDI,然后在 PC 中打开串行监视器时再次按下程序按钮。这会将所有数据转储到串行监视器。然后只需将其复制粘贴到txt文件中即可。每个动作都会被一个短语“新功能”分开,因此您将知道哪些数据与哪个动作相关。然后使用 excel 将文本文件分成 3 个 csv 文件,分别用于向左滑动手势、向右滑动手势和猛击手势。这样就完成了数据收集部分。这些数据不应直接使用;必须对其进行处理以去除噪声,以便算法可以更准确地进行预测。但我没有做任何让整个项目变得更复杂的事情,所以我只是跳过所有这些并直接进入培训部分。

第 9 步:训练模型

这是您教您的 ML 算法检测手势的部分。为了训练数据,我使用 python 来训练模型并将其转换为 C 文件,我们可以在 arduino IDE 中使用该文件。您可以从我的github 存储库中获取此文件并打开“Python 训练代码”文件夹中的“Classifier.py”文件,我们将读取 csv 文件并训练模型以学习我们之前记录的手势。如果您有不同的文件名,只需更改名为 fileName 的 python 列表,以便它会根据您收集的数据训练模型。运行此代码后,我们将创建一个“model.h”文件。该文件包含经过训练的模型,用于识别我们捕获的 3 个手势。如果您只想测试模型,请将您的“model.h”文件粘贴到“测试手势检测”文件夹中,然后打开该文件夹中的 arduino 文件。然后只需编译并将代码上传到您的手表。

第 10 步:推断模型

一旦代码上传到微控制器,我们的 ML 算法就不再学习,它只是使用我们之前创建的预训练模型,这称为推断模型。一旦代码上传成功,做出任何手势,oled 显示器应该会显示你正在执行什么手势。在我的例子中,模型 95% 的时间都在工作,只是有时很难找到正确的滑动手势。可能是我收集的数据嘈杂,或者我在收集数据时没有正确进行运动。不管怎样,95% 对我来说还是有好处的,我们可以通过这个手势检测做很多事情!

以上就是关于这个项目的全部分享了,欢迎留言交流。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论