一. 项目说明
任务
使用麦克风采集使用者说话口型并识别,同时在屏幕上画出对应的表情。
需要实现以下效果:
- 通过神经网络语音识别口型
- 通过LCD显示口型图片
板卡技术和功能规格
开发环境
-
VS Code: Visual Studio Code(VS Code)是微软2015年推出的一个轻量但功能强大的源代码编辑器,基于 Electron 开发,支持 Windows、Linux 和 macOS 操作系统。内置了对JavaScript,TypeScript和Node.js的支持并且具有丰富的其它语言和扩展的支持,功能超级强大。
-
Arduino: Arduino是一款便捷灵活、方便上手的开源电子原型平台
- Edge Impulse: 是一个应用于嵌入式领域的在线的机器学习网站,不仅为用户提供了一些现成的神经网络模型以供训练,还能直接将训练好的模型转换成能在单片机MCU上运行的代码
二. 模型训练
-
收集样本:
数据源页面实际上不仅仅是从外部源添加数据。 它使您可以创建完整的自动化数据管道,以便您可以制定主动学习策略。
从那里,您可以从现有的云存储桶中导入数据集,自动化和安排导入,并触发诸如探索和标记新数据、重新训练模型、自动构建新部署任务等操作。 -
设置模型
训练和部署高性能 ML 模型通常被认为是一个持续的过程,而不是一次性的练习。当您验证模型并发现过度拟合时,您可能会考虑添加一些更多样化的数据,然后执行模型重新训练,同时保持最初设置的 DSP 和神经网络模块配置。
同样在推理过程中,如果您发现数据分布与初始训练分布有显着差异,通常最好的做法是在较新的数据分布上重新训练您的模型,以跟上较高的模型性能。
在向项目添加新数据时,Edge Impulse Studio 中的“重新训练模型”功能通常很有用。它使用您选择的 DSP 和 ML 模块中的已知参数,然后使用它们自动重新生成新功能并在一个步骤中重新训练神经网络模型。您可以将其视为重新训练模型的捷径,因为您无需一次又一次地遍历冲动中的所有块。
要在添加一些数据后重新训练您的模型,请导航到工作室上的“重新训练模型”,然后单击“训练模型” - 训练
- 部署
三. 程序代码
#include "src/syntiant.h"
#include <NDP.h>
#include <NDP_utils.h>
#include <Arduino.h>
/**
* @brief Called when a inference matches 1 of the features
*
* @param[in] event The event
* @param[in] confidence The confidence
* @param[in] anomaly_score The anomaly score
*/
void on_classification_changed(const char *event, float confidence, float anomaly_score) {
// here you can write application code, e.g. to toggle LEDs based on keywords
if (strcmp(event, "open") == 0) && (strcmp(event, "red") == 0) {
// Toggle LED
digitalWrite(LED_RED, HIGH);
}
if (strcmp(event, "open") == 0) && (strcmp(event, "green") == 0) {
// Toggle LED
digitalWrite(LED_GREEN, HIGH);
}
if (strcmp(event, "close") == 0) {
// Toggle LED
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, LOW);
}
}
if (inference.buf_ready == 0) {
for(int i = 0; i < 8001; i++) {
inference.buffer[inference.buf_count++] = map(analogRead(WIO_MIC), 0, 1023, -32768, 32767);
delayMicroseconds(sampling_period_us);
if(inference.buf_count >= inference.n_samples) {
inference.buf_count = 0;
inference.buf_ready = 1;
break;
}
}
}
void setup(void)
{
syntiant_setup();
}
void loop(void)
{
syntiant_loop();
}
四. 实验现象
- 说出指令开灯:当说出指令的时候会打开LED灯, 说出关闭红灯的时候, 会将红色的LED关闭
五. 实验心得
- 学习了如何进行神经网络的训练