亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

TinyML-Language Detector-基于 Edge Impulse &Arduino

组件和用品

Arduino Nano 33 BLE Sense
× 1
National Control Devices PCA9685 8 通道 8W 12V FET 驱动器比例阀带 I2C 接口的控制器
× 1
SG90 微伺服电机
× 3
9V 电池夹
× 1

必要的工具和机器

3D 打印机(通用)
烙铁(通用)

应用和在线服务

Edge Impulse Studio
Arduino IDE
Autodesk Fusion 360

关于这个项目

概览

该项目背后的想法是使用在微控制器中实现的神经网络/深度学习来创建语言分类。该设备将识别意大利语、英语和法国语言的一个词。要识别的词是“si " 对于意大利语,"oui " 代表法语,而 " " 表示英语。设备持续收听,一旦识别出 3 个单词中的一个,就会出现相关语言的标志。

该项目基于两个主要组件:Arduino Nano 33 BLE Sense 微控制器和 Edge Impulse Studio 开发平台。

项目实施遵循以下步骤:

  • 采样/创建数据集
  • 设计模型
  • 训练模型
  • 测试模型
  • 为硬件定制
  • 模型的部署及其定制
  • 构建最终设备(模型周围的硬件)。

采样/创建数据集

数据集由3个单词(oui、si、yes)的全局记录组成,持续约30分钟(每个单词10分钟)。

为每个单词创建一个连续的声音文件,其中相同的单词不断重复,然后使用 Audacity 应用程序将文件拆分为多个文件,每个文件持续一秒。每个文件都包含一个单词示例。

然后将这些文件上传到边缘脉冲并根据单词进行标记。

除了这些文件,另一组时长为 1 秒的录音文件也被上传并标记为背景噪音。

全局训练数据由 33 分钟组成(每个单词 10 分钟,背景噪音 3 分钟)

设计模型

该模型是利用边缘脉冲平台实现的,其中大部分需要的算法已经定义了一个凹坑。

创建模型的第一步是将声音转换为时间序列。然后使用预定义的时间窗口大小对时间序列进行分区。

(第一个转换显示在下图的红色一侧)。

第二步是使用信号处理技术,在这种情况下是 MFCC(梅尔频率倒谱系数),从时间序列中提取最能表征 4 个类别(3 个词 + 背景)的特征。

下面是 MFCC 变换及其系数的示例。

时间序列和系数的卷积用于馈送神经网络。最后,神经网络的输出提供了每个类别的归属概率。

下面是神经网络实现及其分类性能的概述。

培训 - 为 Arduino Nano 33 BLE Sense 定制

对于训练和最终模型定制,Edge Impulse Studio 上提供了一个名为“EON Tuner”的新选项 "。它允许为嵌入式机器学习应用程序选择最佳架构。

它并行运行许多可能模型的实例,每个实例具有不同的配置(不同的信号数字技术和不同的神经网络架构)。

此选项只需要一些信息即可运行:

  • 目标 " 代表模型类型(在本例中为 "Keyword Spotting ")
  • 运行应用程序的硬件(在本例中为“Arduino Nano 33 BLE Sense (Cortex-M4F 64MHz) ".

对于每个实例,它给出了少数分类性能指标、计算所需的时间、内存量以及微控制器文件系统上使用的文件系统空间。

对于这个项目,我们选择了 5 个分类准确度最好的实例,并从中选择了最快的一个。

测试

测试是通过收集一组新的记录器文件并检查分类质量来进行的。

一旦验证分类是准确的。我们进入了实施的下一步,即最终部署。

部署

由于 edge-impulse studio 的部署非常简单。

从部署选项中选择了 Arduino 库选项。这提供了模型的标准 arduino C 文件,可以根据我们的需要对其进行定制。

边缘脉冲构建完成后,在本地机器上创建并下载一个zip文件,只需将其导入Arduino Ide中进行最终定制即可。

代码

该代码可在链接中找到。代码基于edge-impulse下载的代码,做了少量自定义,如下所示。

1. 添加库 Adafruit_PWMServoDriver.h 用于驱动附在旗帜上的舵机。

2. 定义函数servos_selector 根据分类结果协调舵机。

voidservos_selector(int iter){
time_now =millis();
delta=time_now - time_was;
if (delta> 2000){
time_was=time_now;
switch (iter) {
case 0:
pwm.setPWM(0, 0, 350);
delay(500);
pwm.setPWM( 0, 0, 200);
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
case 1:
pwm.setPWM(1, 0, 350);
Serial.println("2222");
delay(500);
pwm.setPWM(0, 0, 200) );
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
case 2:
pwm .setPWM(2, 0, 350);
Serial.println("333");
delay(500);
pwm.setPWM(0, 0, 200);
pwm.setPWM(1, 0, 200);
pwm.setPWM(2, 0, 200);
break;
}
}
}

3. 最后,添加了调用servos_select的IF条件 基于“result.classification的函数 " 对象。

for (size_t ix =0; ix ei_printf(" %s:%.5f\n", result.classification[ix].label,
result.classification[ix].value);
}

#if EI_CLASSIFIER_HAS_ANOMALY ==1
ei_printf(" 异常分数:%.3f\n", result.anomaly);
#endif
print_results =0;
}
if (result.classification[1].value> 0.80){
servos_selector(0);
}
else if (result.classification[2].value> 0.80){
servos_selector(1);
}
else if (result.classification[3].value> 0.80){
servos_selector(2);
}
}

电路

电路基于微控制器Arduino Nano 33 BLE Sense微控制器,使用PCA9685驱动3个舵机。

PCA9685 工作负载由外部 9v 电池支持。

仅此而已。

代码

代码
https://github.com/EnzoCalogero/Tensorflow_Lite_embeded/tree/main/nano_sense_EdgeImpulse/language_detection/nano_ble33_sense_microphone_continuous

定制零件和外壳

示意图

语言检测_9RxXhRX5sj.fzz

制造工艺

  1. Arduino Gyroscope Game with MPU-6050
  2. Arduino 数字骰子
  3. 钢铁侠
  4. 找到我
  5. Arduino 加湿器控制
  6. Sonar 使用 arduino 并在处理 IDE 上显示
  7. MobBob:由 Android 智能手机控制的 DIY Arduino 机器人
  8. Arduino Audio Reactive Desk Light
  9. NeoMatrix Arduino Pong
  10. Arduino Joystick
  11. 计步器(Arduino 101)
  12. Arduino 混色器