LSM6DSV16X基于MLC智能笔动作识别(3)----MEMS Studio训练数据

ops/2024/10/9 11:19:30/

LSM6DSV16X基于MLC智能笔动作识别.3--MEMS Studio训练数据

  • 概述
  • 视频教学
  • 样品申请
  • 源码下载
  • 硬件准备
  • 选择MEMS
  • 导入数据
  • 配置窗口长度和量程
  • 配置滤波器
  • 选择特征数据
  • 设备树生成
  • 决策树生成
  • 参考程序
  • 转换UCF文件

概述

MEMS-Studio是一套完整的桌面软件解决方案,专为开发嵌入式AI功能、评估嵌入式库、分析数据,以及为整个MEMS传感器产品组合设计无代码算法而设计。这款独特的软件解决方案提供了多功能的开发环境,支持评估和编程所有MEMS传感器,此外还推出了新一代解决方案,以扩展Unico-GUI、Unicleo-GUI和AlgoBuilder等成熟应用程序的功能。

最近在弄ST的课程,需要样片的可以加qun申请:6_15061293 。
在这里插入图片描述
MEMS-Studio可简化在STM32微控制器上使用图形界面实现概念验证的过程,无需编写代码。此解决方案支持配置传感器和嵌入式AI(机器学习和神经网络),可充分利用机器学习内核 (MLC)、ISPU的神经网络以及有限状态机 (FSM)。它会重复使用嵌入式软件库,将多种功能组合到一个项目中,并使用绘图和显示功能实时可视化数据。
MEMS-Studio提供以下用户体验:
● 针对MEMS产品组合中运动、环境和红外传感器进行评估
● 配置和测试传感器内的各项功能,如有限状态机 (FSM)、机器学习内核 (MLC) 和智能传感器处理单元 (ISPU)
● 实时和离线数据分析
● 无代码图形化算法设计
在这里插入图片描述

视频教学

https://www.bilibili.com/video/BV1624VeAEAG/

LSM6DSV16X基于MLC智能笔动作识别(3)----MEMS Studio训练数据

样品申请

https://www.wjx.top/vm/OhcKxJk.aspx#

源码下载

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为STM32H503CB,陀螺仪为LSM6DSV16X,磁力计为LIS2MDL。
在这里插入图片描述

选择MEMS

使用 MEMS Studio 的 MLC(Machine Learning Core)进行训练, “Sensor” 字段选择要配置的传感器 。
在这里插入图片描述

导入数据

点击“Browse”选择采集到的数据,给该类数据命名后下载。

在这里插入图片描述

将所有采集到的数据都导入进去,下载成功如图所示。

在这里插入图片描述

配置窗口长度和量程

MLC ODR(输出数据速率):已设置为 240Hz,这是 MLC 处理数据的速率。
时间窗口长度(Window length):设置的窗口长度为 60,表示 MLC 每 60个样本计算一次统计特征。
加速度计(Accelerometer):
● 量程(Full Scale):设置为 ±2g,表示能够测量的最大加速度为 ±2g。
● ODR(数据速率):设置为 480Hz,表示加速度计的采样频率为 480Hz。
陀螺仪(Gyroscope):
● 量程(Full Scale):设置为 ±125 dps,表示最大旋转速度为 ±125 度/秒。
● ODR(数据速率):设置为 480Hz,表示陀螺仪的采样频率为 480Hz。

在这里插入图片描述

配置滤波器

● filter_1:应用于 HP_Acc_XYZ,表示这是一个 高通滤波器(HP,High-Pass Filter),用于对加速度计的 X、Y、Z 轴的三维数据进行滤波。
● HP_Acc_XYZ:此滤波器将过滤掉加速度数据中低频成分,保留高频部分。这可能是为了消除像重力这样的低频信号干扰,保留运动的快速变化部分。
● filter_2:应用于 HP_Gyr_XYZ,这是一个 高通滤波器,用于对陀螺仪的 X、Y、Z 轴数据进行滤波。
● HP_Gyr_XYZ:此滤波器将过滤掉陀螺仪数据中的低频部分,保留高频的旋转变化信息,适合检测快速旋转或角速度的变化。
● filter_3:应用于 HP_Acc_V2,也是一个 高通滤波器,用于处理加速度矢量平方值(即组合了 X、Y 和 Z 轴的加速度数据)。
● HP_Acc_V2:此滤波器将对加速度矢量平方值的低频信号进行过滤,保留高频部分,帮助识别运动的剧烈变化。
● filter_4:应用于 HP_Gyr_V2,是一个 高通滤波器,用于处理陀螺仪矢量平方值(即组合了 X、Y 和 Z 轴的角速度数据)。
● HP_Gyr_V2:此滤波器将对陀螺仪矢量平方值的低频部分进行过滤,保留高频部分,帮助识别旋转运动中的快速变化。

在这里插入图片描述

选择特征数据

MLC(Machine Learning Core) 的 特征选择(Features Selection) 区域可以为传感器数据选择要计算的统计特征,并将其作为机器学习的输入。
MEAN:均值,表示在给定的时间窗口内计算的传感器数据的平均值。
VARIANCE:方差,表示数据的分散程度,反映数据在给定时间窗口内的变化。
ENERGY(能量): 计算信号在给定时间窗口内的总能量。它反映了信号强度,通常用于识别较强或较弱的活动。
PEAK_TO_PEAK(峰峰值):峰峰值特征计算的是信号在给定时间窗口内的最大值和最小值之间的差异。这个特征可以帮助检测信号的最大振幅,是评估运动强度和突发变化的有力指标。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

设备树生成

生成的设备树文件为 arff 文件。

在这里插入图片描述

决策树生成

点击 “Generate Decision Tree” 按钮以生成决策树。这个按钮基于之前通过 ARFF 文件加载的数据和特征生成了一个分类模型(决策树),用于识别不同的动作或状态。

在这里插入图片描述

Kappa 统计量 是一种用于衡量分类器在考虑偶然因素时的准确性度量。这里显示为 0.307479,虽然分类准确度高,但 Kappa 值可能表明结果受到数据分布或样本量的影响。
● 0.81 - 1.00:几乎完美的分类一致性。
● 0.61 - 0.80:很好的分类一致性。
● 0.41 - 0.60:中等分类一致性。
● 0.21 - 0.40:较低的分类一致性。
● 0.00 - 0.20:几乎没有一致性(接近随机猜测)。

在这里插入图片描述

查看分析信息。

在这里插入图片描述
在这里插入图片描述

F1_MEAN_on_ACC_X <= 0.0360312
|   F1_MEAN_on_ACC_X <= -0.88916: other (65.0)
|   F1_MEAN_on_ACC_X > -0.88916: Steady (52.0)
F1_MEAN_on_ACC_X > 0.0360312
|   F7_ENERGY_on_GY_X <= 0.241577: Idle (62.0)
|   F7_ENERGY_on_GY_X > 0.241577: Writing (68.0)Number of Leaves  : 	4
Size of the tree : 	7class:=> Idle, Writing, other, Steady, 
features:=> F1_MEAN_on_ACC_X, F2_MEAN_on_ACC_Y, F3_MEAN_on_ACC_Z, F4_MEAN_on_ACC_V2, F5_VAR_on_ACC_V2, F6_VAR_on_GY_V2, F7_ENERGY_on_GY_X, F8_ENERGY_on_GY_Y, F9_ENERGY_on_GY_Z, F10_ENERGY_on_GY_V2, F11_PeakToPeak_on_ACC_V2, F12_PeakToPeak_on_GY_V2, Mean absolute error	1
Root mean squared error	1======= Whole data training with Confidence Factor: 0.9 ========= ===== Confusion Matrix =====Idle     	Writing  	other    	Steady   	<-- classified as
Idle     	62	0	0	0	
Writing  	0	68	0	0	
other    	0	0	65	0	
Steady   	0	0	0	52	Total Number of Instances        : 247
Correctly Classified Instances   : 247
Incorrectly Classified Instances : 0
Kappa Statistic: 0.252373
Accuracy: 100%Report  :	precision	recall	support	
Idle     	1    	1	 62
Writing  	1    	1	 68
other    	1    	1	 65
Steady   	1    	1	 52avg/total	1    	1	 247

根节点判断条件:
● F1_MEAN_on_ACC_X <= 0.0360312:
○ 如果 X 轴加速度的均值小于或等于 0.0360312:
■ 如果 F1_MEAN_on_ACC_X <= -0.88916,则分类为 other(65 个样本)。
■ 如果 F1_MEAN_on_ACC_X > -0.88916,则分类为 Steady(52 个样本)。
○ 如果 X 轴加速度的均值大于 0.0360312:
■ 如果 F7_ENERGY_on_GY_X <= 0.241577,则分类为 Idle(62 个样本)。
■ 如果 F7_ENERGY_on_GY_X > 0.241577,则分类为 Writing(68 个样本)。

● 混淆矩阵 显示模型在每一类的分类结果:
○ Idle:62 个样本被正确分类。
○ Writing:68 个样本被正确分类。
○ other:65 个样本被正确分类。
○ Steady:52 个样本被正确分类。

● Kappa Statistic:0.252373。尽管分类准确度为 100%,但 Kappa 值较低,表明不同类别之间可能存在某些重叠或类别分布不均衡。
决策树模型在当前的小型数据集上表现良好,分类准确度为 100%,没有任何错误分类的实例。然而,Kappa 统计量(0.252373) 表明类别之间可能存在数据不平衡,导致模型虽然能够准确分类,但泛化能力可能较差。

参考程序

https://github.com/STMicroelectronics/STMems_Machine_Learning_Core/tree/master/application_examples/lsm6dsv16x

转换UCF文件

类输出值可以根据自己的需求修改,然后点击“Generate Config File”生成ucf文件。

在这里插入图片描述

将得到的UCF文件存放到LSM6DSV16X的程序中。

在这里插入图片描述

在初始化中添加MLC检测功能。

	for( uint32_t i=0; i<(sizeof(lsm6dsv16x_activity_recognition) /sizeof(ucf_line_t) ); i++ ) {lsm6dsv16x_write_reg(&dev_ctx, lsm6dsv16x_activity_recognition[i].address,(uint8_t *)&lsm6dsv16x_activity_recognition[i].data, 1);}	

在主函数中获取状态值,查询类的输出值,编译程序。

  /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){lsm6dsv16x_mlc_handler();if (event_catched != 0) {printf("event_catched=%d",event_catched);// 握(0) 拍(1) 挥(2) 拍(3) 静(4) 止(5)switch(event_catched) {case 2:event_catched = 0;printf("闲置(Idle)\r\n");break;case 4:event_catched = 0;printf("书写(Writing)\r\n");break;case 8:event_catched = 0;printf("其他(other)\r\n");break;case 12:event_catched = 0;printf("静止(Steady)\r\n");break;					default:break;}event_catched = 0;}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */

演示
静止状态如下。

在这里插入图片描述

闲置状态如下,手抓笔静止。

在这里插入图片描述

书写状态如下,移动笔进行识别判定。

在这里插入图片描述

其他如下,笔倒置。

在这里插入图片描述


http://www.ppmy.cn/ops/121394.html

相关文章

vim 操作

vim编辑器的有三种工作模式&#xff1a;命令模式、插入模式和底行命令模式 打开进入命令模式&#xff1a; 由命令模式到输入模式&#xff1a;i:在光标前插&#xff1b;a:在光标后插&#xff1b;o:在下一行插 由输入模式进入命令模式&#xff1a;esc 由命令模式进入底行命令…

Python的异步编程

什么是协程&#xff1f; 协程不是计算机系统提供&#xff0c;程序员人为创造。 协程也可以被称为微线程&#xff0c;是一种用户态内的上下文切换技术。简而言之&#xff0c;其实就是通过一个线程实现代码块相互切换执行。 实现协程有那么几种方法&#xff1a; greenlet&…

瑜伽培训行业为何要搭建自己的专属知识付费小程序平台?集师知识付费系统 集师知识付费小程序 集师知识服务系统 集师线上培训系统

在当今快节奏的生活中&#xff0c;瑜伽作为一种舒缓压力、增强体质的生活方式&#xff0c;受到了越来越多人的青睐。瑜伽培训行业也随之蓬勃发展&#xff0c;但如何在激烈的市场竞争中脱颖而出&#xff0c;成为众多瑜伽培训机构面临的一大挑战。搭建自己的专属知识付费小程序平…

借助ChatGPT校对学术论文的10 个有效提示词指令

校对你的学术论文内容可能需要时间,但 ChatGPT 让它变得更容易。 使用正确的提示词,您可以快速检查语法、拼写和清晰度。 这里有 10 个提示可以帮助您使用 ChatGPT 有效地校对你的学术作品。 1、更正语法错误 ChatGPT 提示: 充当校对专家,负责纠正给定 [文本] 中的语法…

EasyCVR视频汇聚平台:解锁视频监控核心功能,打造高效安全监管体系

随着科技的飞速发展&#xff0c;视频监控技术已成为现代社会安全、企业管理、智慧城市构建等领域不可或缺的一部分。EasyCVR视频汇聚平台作为一款高性能的视频综合管理平台&#xff0c;凭借其强大的视频处理、汇聚与融合能力&#xff0c;在构建智慧安防/视频监控系统中展现出了…

docker 部署nacos

目录 一、拉取镜像 二、部署 三、访问&#xff08;默认是用内嵌数据库&#xff09; 四、配置 五、重启容器 一、拉取镜像 docker pull nacos/nacos-server 二、部署 docker run --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 --restartalways --privilegedt…

C++函数指针类型

// // Created by 徐昌真 on 2024/10/5. // #include <iostream>//函数指针类型 指针变成了一个类型 类似int这种 用于反复调用这个函数指针的情况 避免频繁创建一堆的函数指针using namespace std;typedef void (*fptr)(int a, double b, char c); //typedef 将fptr定义…

NIO基础

文章目录 NIO基础1. 三大组件1.1 Channel1.2 Buffer1.3 Selector 2. ByteBuffer2.1 使用方式2.2 常见方法2.3 解决黏包问题 3. 网络编程3.1 阻塞3.2 非阻塞3.3 多路复用3.4 利用多线程优化 NIO基础 1. 三大组件 1.1 Channel channel 有一点类似于 stream&#xff0c;它就是读…