基于Edge Impulse的动作识别
创作时间:
作者:
@小白创作中心
基于Edge Impulse的动作识别
引用
1
来源
1.
https://wiki.seeedstudio.com/cn/XIAO-RP2040-EI/
XIAO RP2040 基于 Edge Impulse 的动作识别
在本维基中,我们将向您展示如何利用Seeed Studio XIAO RP2040上的加速度计结合Edge Impulse实现动作识别。我们在这里展示的代码适用于最新版本的XIAO RP2040开发板。
所需材料
硬件
在本WiKi中,我们需要准备以下材料:
硬件设置
软件
下面列出了所需的库。强烈建议使用这里的代码来检查硬件是否正常工作。如果您在安装库方面遇到问题,请参考这里。
- Seeed_Arduino_LSM6DS3-master
入门指南
首先,我们将运行一些演示程序,以检查开发板和显示屏是否正常工作。如果您的设备正常,您可以继续进行下一步操作。
检查电路连接和加速度计
打开Arduino IDE,导航到Sketch -> Include Library -> Manage Libraries...,在库管理器中搜索并安装U8g2 library。
安装完成后,复制以下代码并运行它。
#include <Wire.h>
#include "MMA7660.h"
MMA7660 accelemeter;
#define CONVERT_G_TO_MS2 9.80665f
void setup() {
Serial.begin(115200);
}
void loop() {
float ax, ay, az;
accelemeter.getAcceleration(&ax, &ay, &az);
Serial.print(ax * CONVERT_G_TO_MS2,4);
Serial.print(ay * CONVERT_G_TO_MS2,4);
Serial.println(az * CONVERT_G_TO_MS2,4);
}
在上传代码并拔掉Seeed Studio XIAO RP2040后,然后打开串口监视器,您将看到类似以下的输出:
在上传代码并拔掉Seeed Studio XIAO RP2040后, 然后,打开串口监视器,您将看到如下输出: 如果一切正常,我们可以继续将Seeed Studio XIAO RP2040连接到Edge Impulse。
已连接到Edge Impulse
训练模型的准确度对最终结果非常重要。如果您的输出训练结果低于65%,我们强烈建议您多次进行训练或添加更多数据。
- 第一步.在Edge Impulse创建一个新项目。
- 第二步.选择"加速度计数据",然后点击"让我们开始吧!"。
- 第三步.在电脑上安装Edge Impulse CLI。
- 第四步.在您的终端
terminal
或
cmd
或
powershell
中运行以下命令以启动它。
sudo edge-impulse-data-forwarder
- 第五步.我们需要使用命令行界面(CLI)将Seeed Studio XIAO RP2040与Edge Impulse连接起来。首先,登录您的帐户并选择您的项目。
为加速度计和设备命名。
返回到Edge Impulse的"数据采集"页面,如果连接成功,结果应该如下所示。您可以在页面右侧找到"XIAO RP2040"设备的信息。 - 第六步.选择传感器为"3轴"。将标签命名为
上
和
下
, 将样本长度(毫秒)修改为20000,然后点击开始采样。 - 第七步.将Seeed Studio XIAO RP2040上下摆动并保持运动20秒钟。您可以在采集结果中看到如下显示:
- 第八步.通过点击右上角的原始数据并选择"拆分样本"来拆分数据。点击+添加分段,然后点击图表。重复这个步骤超过20次以添加分段。点击拆分,您将看到每个1秒钟的样本数据。
- 第九步.重复步第七步.和第八步.,并使用不同的名称为数据标记,例如
圆圈
和
直线
等。提供的示例是上下、左右和圆圈的分类。您可以根据需要进行更改。
:::注意 在步骤8中,拆分时间为1秒,这意味着您在步骤7中至少要在1秒内进行一次上下摆动。否则,结果将不准确。同时,您可以根据自己的运动速度调整拆分时间。 :::
- 第十步.创建 Impulse
点击Create impulse-> 添加处理块 -> 选择Spectral Analysis-> 添加学习块 -> 选择Classification (Keras)-> 保存 Impulse - 第十一步.频谱特征
点击并设置
点击Spectral features-> 下拉页面点击保存参数 -> 点击Generate features
输出页面应该如下所示: - 第十二步.训练你的模型
点击NN分类器 -> 点击开始训练 -> 选择未优化的(float32) - 第十三步.模型测试
点击模型测试 -> 点击全部分类
如果准确率低,可以通过增加训练集和延长样本时间来检查数据集
在下载模型时,我们也可以获得评估结果 - 第十四步.构建Arduino库
点击部署 -> 点击Arduino库 -> 点击构建-> 下载 .ZIP 文件 - 第十五步..ZIP 文件的名称非常重要,默认设置为Edge Impulse项目的名称。就像这里的项目名称是"RP2040"。选择文件并将其添加到Arduino库中
- 第十六步.打开 Arduino -> 点击 Sketch -> 点击Include Library->添加 .ZIP 库
复制下面的代码,如果edgeimpluse上的项目名称已自定义,则zip存档文本将与该名称相同。您可以将include的第一行更改为您的头文件。
#include <XIAO_RP2040_inferencing.h> // customed name need change this header file to your own file name
#include <Wire.h>
#include "MMA7660.h"
MMA7660 accelemeter;
#define CONVERT_G_TO_MS2 9.80665f
#define MAX_ACCEPTED_RANGE 2.0f
static bool debug_nn = false;
void setup()
{
Serial.begin(115200);
Serial.println("Edge Impulse Inferencing Demo");
}
float ei_get_sign(float number) {
return (number >= 0.0) ? 1.0 : -1.0;
}
void loop()
{
ei_printf("\nStarting inferencing in 2 seconds...\n");
ei_printf("Sampling...\n");
// Allocate a buffer here for the values we'll read from the IMU
float buffer[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = { 0 };
for (size_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix += 3) {
// Determine the next tick (and then sleep later)
uint64_t next_tick = micros() + (EI_CLASSIFIER_INTERVAL_MS * 1000);
accelemeter.getAcceleration(&buffer[ix], &buffer[ix + 1], &buffer[ix + 2]);
for (int i = 0; i < 3; i++) {
if (fabs(buffer[ix + i]) > MAX_ACCEPTED_RANGE) {
buffer[ix + i] = ei_get_sign(buffer[ix + i]) * MAX_ACCEPTED_RANGE;
}
}
buffer[ix + 0] *= CONVERT_G_TO_MS2;
buffer[ix + 1] *= CONVERT_G_TO_MS2;
buffer[ix + 2] *= CONVERT_G_TO_MS2;
delayMicroseconds(next_tick - micros());
}
// Turn the raw buffer in a signal which we can the classify
signal_t signal;
int err = numpy::signal_from_buffer(buffer, EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &signal);
ei_printf("Failed to create signal from buffer (%d)\n", err);
return;
}
// Run the classifier
ei_impulse_result_t result = { 0 };
err = run_classifier(&signal, &result, debug_nn);
if (err != EI_IMPULSE_OK) {
ei_printf("ERR: Failed to run classifier (%d)\n", err);
return;
}
// print the predictions
ei_printf("Predictions ");
ei_printf("(DSP: %d ms., Classification: %d ms., Anomaly: %d ms.)",
result.timing.dsp, result.timing.classification, result.timing.anomaly);
for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(" %s: %.5f\n", result.classification[ix].label, result.classification[ix].value);
}
#if EI_CLASSIFIER_HAS_ANOMALY == 1
ei_printf(" anomaly score: %.3f\n", result.anomaly);
#endif
}
- 第十七步.移动或保持Seeed Studio XIAO RP2040并检查结果:
点击Arduino右上角的监视器。
当您将Seeed Studio XIAO RP2040移动到circle and line方向时:
监视器将输出类似以下内容:
15:45:45.434 ->
15:45:45.434 -> Starting inferencing in 2 seconds...
15:45:47.414 -> Sampling...
15:45:48.439 -> Predictions (DSP: 6 ms., Classification: 1 ms., Anomaly: 0 ms.):
15:45:48.439 -> Circle: 0.59766
15:45:48.439 -> line: 0.40234
15:45:48.439 ->
恭喜!您已完成项目的最后一步。鼓励您尝试更多的方向并检查哪个方向会产生最佳输出。
资源
- Seeed Studio XIAO RP2040
- Edge Impluse CLI
热门推荐
头痒用什么洗头可以止痒
市场震荡调整 海工装备逆势爆发 栏目追踪解读 提及相关公司涨超9%
央视如此爱新疆,《三餐四季》第二季首站来了!
琵琶女的介绍
张红甫教你做剁椒鱼头鲜香麻辣过瘾十足
儿童做听力筛查的重要性…预防这个隐藏的儿童听力“杀手”!
以太网供电(PoE)电路设计的控制器
股市风向标 | 2月非农数据低于预期,美股短期或仍有波动
英国留学博士需要几年
熬夜=熬命!收好这份「熬夜补救饮食指南」
壹邦健康知识:巧用热水,缓解身体多种不适
数据增强全解析:从基础概念到实战代码,掌握核心技巧!
黑克勒科赫拳头产品 USP45高性能半自动 现代轻武器的经典之作
在职博士省钱专业大汇总(性价比之选)
从乐山大佛到恐龙足迹:揭秘古生物学的“时间胶囊”
苹果删除的视频如何恢复回来(苹果删除的照片怎么恢复)
尾盘下跌反映了什么问题?这些问题对市场有何影响?
相机的 “HDR” 模式是什么?
快开学了! 如何帮孩子克服“开学综合征”?
五位文学大师笔下的“风”:从侵袭到喧嚣,感受文学中的自然之美
黄瓜汁的窍门与配方(打造美味健康的黄瓜汁)
鼻炎与喉咙痛:揭秘它们之间的秘密联系
气候变化如何影响水循环?从地理角度解析城市内涝成因
上半年新疆文旅市场火爆 文旅类订单同比增长超20%
一部剧带火一座城 新疆阿勒泰旅游市场火热
长者拉伤、扭伤、骨折如何处理?
注册会计师一个月工资多少 不同地区差异如何
研究称:咖啡和茶,这样喝,高血压患者痴呆风险最低!
各种“睡不好”,中医教您调理,助您睡个安稳觉
名古屋站美食街攻略,不出车站吃遍名古屋人气餐厅