【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义...

2020-04-071.4万
精华项目
AI 快速预览详细 收起
本文介绍了如何在Arduino上使用自定义手势识别模型。通过上传model.h文件并进行手势识别,解决了手势识别不准确的问题。重新采集样本并训练模型,最终实现了高置信度的手势识别。适用于零基础新手和STEM教育项目。
【在 Arduino 上使用机器学习】(一)在 Arduino 开发板上安装库及添加测试样本
【在 Arduino 上使用机器学习】(二)Tensorflow上构建及训练模型
【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义手势识别模型

Arduino上使用自定义手势识别模型
接下来,我们会将刚刚在上一节中在 Colab 中训练并下载的 model.h 文件,用于我们的 Arduino IDE 项目中:
  • 在 Arduino IDE 中打开 IMU_Classifier.ino
  • 在 IDE 中创建一个新选项卡。并将其命名为 model.h。


【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义...图1

  • 打开 model.h 选项卡,并从 Colab 下载版本的内容贴上去。(也可以直接将model.h文件拖到IMU_Classifier.ino旁边的选项卡位置)
【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义...图3
  • 上传例程,点击:Sketch> Upload
  • 打开 Serial Monitor:Tools > Serial Monitor
  • 做一些手势
  • 每个手势的置信度将在 Serial Monitor 中显示(0 = 低置信度,1 = 高置信度)



将例程上传到板子中,打开串口监视器,做一些手势,发现几乎所有的手势被识别为曲肘(见下图),无论是击拳还是曲肘。仔细思考了一下发现了问题。原来训练的时候对“击拳”理解错误,以为是像武林高手一样击出去要收回来。实际上击拳只是将拳挥出去,收回的时候要非常缓慢,以免触发采样。同样曲肘也是,将手臂缓缓伸出,然后迅速收回,收回这个动作才是“曲肘”。
【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义...图4

出现这个错误,需要重新采集样本。下面的动图是新采集的样本,可以看到两个动作之间区别还是很大的:


好在前面走了一遍,后来就非常顺利了。分别采集10个击拳和10个曲肘的动作样本。再回到colab里进行训练,重新下载model.h文件。将原来的文件删除:
【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义...图5

重新上传文件并使用串口监视器观察,开始击拳和曲肘的动作,识别的非常准备:
【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义...图2
采样率是每秒119HZ,每秒采集119个样本,做10次动作可以采集1190个样本,样本量还是比较高的。为了样本的准确性,动作一定要标准,否则预测结果会不理想。

数字代表置信度,置信度越高,所预测的动作可能性越大。最后预测的结果与实际动作完全一致。
【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义...图6

教程参考:

"想获得更多乐趣?您可使用 Emoji_Button.ino 示例创建 USB 键盘,在 Linux 和 macOS 中输出表情符号字符。尝试将 Emoji_Button.ino 示例与 IMU_Classifier.ino 例程相结合,创建手势控制的表情符号键盘 。"

如果您想详细了解 本文提及 的相关内容,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:

Build&Train.gif (2.3 MB, 下载次数: 2193)

Arduino 自定义手势识别模型 · IMU_Classifier.ino_image_3.webp

Build&Train_Correct.gif (392.26 KB, 下载次数: 2210)

Arduino 自定义手势识别模型 · IMU_Classifier.ino_image_6.webp

IMU_Capture1.gif (1.28 MB, 下载次数: 2249)

Arduino 自定义手势识别模型 · IMU_Classifier.ino_image_9.webp

modelPredict.gif (547.4 KB, 下载次数: 2246)

Arduino 自定义手势识别模型 · IMU_Classifier.ino_image_12.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
20060606
20060606
没想到arduino也能玩出这么高端的应用
Koman
Koman
Good,成功了!每次采集10条数据除去空格行后一共是1191行。这里容易被误导。试了几次才OK,还是要非常感谢博主的发贴!
szjuliet
szjuliet
作者
回复Koman
是的,这是个大坑,在上一个帖子里有提及。
hnyzcj
hnyzcj
youxi
- 没有更多了 -