szjuliet 发表于 2020-4-7 21:59:50

【在 Arduino 上使用机器学习】(一)在 Arduino 开发板上安...

【在 Arduino 上使用机器学习】(一)在 Arduino 开发板上安装库及添加测试样本
【在 Arduino 上使用机器学习】(二)Tensorflow上构建及训练模型
【在 Arduino 上使用机器学习】(三)在Arduino上使用自定义手势识别模型

机器学习可以让没有嵌入式研发背景的程序员也能使用微控制器

准备材料
[*]一块Arduino Nano 33 BLE Sense 开发板;
[*]一根连接 Arduino 开发板和您的台式电脑的 Micro USB 数据线;
[*] Arduino 网页编辑器或 Arduino IDE。

Arduino Nano 33 BLE Sense 拥有各类板载传感器,可能带来一些酷炫的 Tiny ML 应用:
[*]语音 - 数字麦克风
[*]移动 - 9 轴 IMU(加速度计、陀螺仪、磁力计)
[*]环境 - 温度、湿度和压力
[*]光线 - 亮度、颜色和接近传感器
刚看到Tensor Flow微信公众号的推广时非常感兴趣,第一时间找了DF商城,发现还没有的卖。立马找万能的某宝,果不其然,真有。340大元一个,带header的,比官网33.4美刀的价格贵100,还算能接受。下单了一个,发货很快,没两天就收到了。做工一如既往的精良,非常小巧,就和宣传的一样,只有一片口香糖大小。











最近事情很多,板子放了几天,实在忍不住心痒痒,把手头的事先放一边,开始研究这个新物种。没想到还是非常好上手,前后一天时间就顺利的完成了整个过程。

以下是详细的体验过程。

设置 Arduino IDE
为了将推理模型配置到开发板中,并从开发板中下载后面所需的训练数据,请按照以下步骤设置 Arduino IDE 应用。因为我们将需要在 Arduino IDE 中下载并安装特定开发板和库,本方法采用的步骤比使用 Arduino Create 网页编辑器要多一些。

[*]从 https://arduino.cc/downloads 下载并安装 Arduino IDE

[*]打开安装的 Arduino 应用
[*]在 Arduino IDE 菜单中,依次选择 Tools > Board > Boards Manager…

[*]搜索“Nano BLE”,并点击“Install”





[*]安装过程需要几分钟时间



依次点击库管理器:Tools > Manage Libraries…

[*]搜索并安装 Arduino_TensorFlowLite 库


安装完成



[*]接下来搜索并安装 Arduino_LSM9DS1 库:


安装完成


[*]最后,用 Micro USB 数据线连接开发板和电脑

[*]选择开发板:Tools >Board > Arduino Nano 33 BLE



[*]选择端口:Tools > Port > COMXX (Arduino Nano 33 BLE)。我的端口是54.



TensorFlow Lite for Microcontrollers 示例:语音识别micro_speech

[*]打开示例文件:



[*]选择板子的型号和对应的端口



[*]打开串口监视器



[*]在串口监视器观察识别结果:

体验结果:识别结果不尽如人意。说No的时候识别率比较高,说Yes的时候识别率比较低,需要把Yes拖的时间比较长,而且强调e。这也正如团队所说的“此模型仅使用 256KB RAM,并在本地微控制器上运行,因此不要期待与商业级别“语音助手”相同的准确性。模型没有连接到互联网连接,并且本地可用 RAM 相差了近 2000 倍。"

收集 Arduino 传感器的流数据
我们将使用预制例程 IMU_Capture.ino 执行以下操作:
[*]监控开发板的加速度计和陀螺仪
[*]在检测到开发板的显著线性加速时触发采样窗口
[*]当达到 119Hz 时采样一秒,并通过 USB 输出 CSV 格式的数据
[*]循环,继续监控下个手势
在 Arduino IDE 中使用此例程对开发板进行编程:
[*]下载 IMU_Capture.ino并在 Arduino IDE 中将其打开
[*]对其进行编译,并依次点击 “Sketch” > “Upload”,将其上传到开发板

实时显示 Arduino 开发板的传感器数据日志完成上述步骤后,我们现在可以显示来自开发板的数据。
[*]在 Arduino IDE 中,依次点击 Tools > Serial Plotter,以打开 Serial Plotter
[*]如果返回错误,则表示开发板不可用,请重新选择端口:

[*]Tools > Port > 端口名称 (Arduino Nano 33 BLE)
[*]拿起开发板,练习 “击拳” 和 “弯曲肘部” 的动作
[*]了解采样窗口仅持续一秒,然后等待下一个手势
[*]传感器数据采集的实时图表(参见下方 GIF)




采集手势训练数据 如要将数据采集为 CSV 日志以上传到 TensorFlow,您可以依次点击 Arduino IDE > Tools > Serial Monitor,以查看数据并将其导出到您的台式电脑:
[*]按顶部的白色小按钮,重置开发板
[*]单手拿起开发板(之后再拿起会触发采样)
[*]在 Arduino IDE 中,打开 Serial Monitor :Tools > Serial Monitor

[*]如果返回错误,则表示开发板不可用,重新选择端口:
[*]Tools > Port > 端口名称 (Arduino Nano 33 BLE)
[*]将开发板拿在手中做一个“击打”手势

[*]确保出拳手势要快,以便触发采集
[*]缓慢恢复到自然姿势,以免再次触发采集
[*]做手势时请务必小心!
[*]重复之前的手势采集步骤 10 次以收集更多数据
[*]从串口控制台 (Serial Console) 中将数据复制粘贴到名为 punch.csv 的新文本文件
[*]清空控制台输出窗口,并重复上述所有步骤,这次做一个“弯曲肘部”手势,将数据粘贴到名为 flex.csv 的文件中

[*]快速做出向内弯曲肘部手势,以便触发采集,每次恢复自然姿势时要缓慢
有时端口会重复出现在列表中,不用管它,不影响使用


上传成功后打开串口监视器,在触发采集前可以看到显示aX, aY, aZ, gX, gY, gZ


触发手势,串口监视器返回多组数据


“击拳”10次,将串口监视器的数据全部选中,复制粘贴到punch.csv文件中。注意最后一行没有数据的不要选,否则会出错(后面会提及)。


复制粘贴后显示如下,此时数据是一个单元格一条数据,没有按aX, aY, aZ, gX, gY, gZ分开

选择data-->Text to Column,将数据按列分割


同样的方法操作曲肘数据也是一样,全选后保存到flex.CSV中,将多余的列删除即可


注意,两个 csv 文件的首行应当包含以下字段:aX、aY、aZ、gX、gY、gZ
每次采集有119条数据,采集10次,每个CSV文件有1190条数据,加上标题行,一共1200行数据。注意要删除空行,并观察CSV记录的条数。如果存在不合格的数据,在后面Tensor Flow数据解析的时候会报错(大坑!)
下一个教程学习在Tensor Flow中训练模型
参考资料:
Tensoflow:在 Arduino 上使用机器学习
Arduino:Get started with machine learning on Arduino







hnyzcj 发表于 2020-7-23 07:59:17

8错的

20060606 发表于 2020-7-31 05:42:31

没想到arduino也能玩出这么高端的应用

Zanzara 发表于 2022-3-1 21:37:35

请问这个可以用Arduino UNO R3代替吗?
页: [1]
查看完整版本: 【在 Arduino 上使用机器学习】(一)在 Arduino 开发板上安...