基于Syntiant TinyML开发板
实现中文语音灯控
一、项目描述
深度学习解决方案提供商Syntiant Corp推出的TinyML 开发板,配备超低功耗 Syntiant ® NDP101神经决策处理器™,可以使语音和传感器应用程序分别在 140 和 100 微瓦以下运行,与基于 MCU 的传统 MCU 相比,吞吐量提高 20 倍,系统效率提高 200 倍。Syntiant TinyML 板的尺寸为 24 毫米 x 28 毫米,是一个小型的独立系统,通过微型 USB 连接通过 Edge Impulse 轻松下载经过训练的模型,而无需任何专用硬件。神经决策处理器使用NDP101,连接了两个传感器BMI160 6轴运动传感器和SPH0641LM4H麦克风,主机处理器:SAMD21 Cortex-M0+ 32位低功耗48MHz ARM MCU,内置256KB FLASH和32KB SRAM,5个数字I/O,与Arduino MKR系列板兼容,其中包含1路UART接口和1路I2C接口(包括在数字I/O引脚中),2MB板载串行闪存,一个用户定义的RGB LED,uSD卡插槽。另外电路板可使用5V micro-USB或3.7V LiPo电池供电。根据任务要求,即任务一:用自带的麦克风,搭建机器学习模型,使板卡上的LED灯根据中文语音指令(不少于三个指令)呈现出不同效果,如开灯、关灯、闪烁、SOS、呼吸等。选用三个中文指令“kai”、“guan”、“shan”,分别对应开灯、关灯及灯闪烁三个功能。通过阅读和修改参考例程,主要是首先要训练一个机器学习的模型,能够完成语音指令的识别,在edgeimpulse网站上,录制数据集,建立模型,训练好后布置到开发板程序中,最终实现语音指令的识别,并作出相应的动作。
二、各功能对应的主要代码片段及说明
在edgeimpulse网站上,录制了三个中文指令的语音片段共计5分钟10秒,通过切片得到了中文指令集,另外下载了一个中文语音库,导入后数据集如图所示。数据集分为训练集和测试集,分别占80%和20%。
图1 中文指令集
具体训练过程根据Syntiant_TinyML Tutorial (Windows)文档提示完成。最终得到训练模型,并下载模型文件,如图所示。
图2下载训练模型
将模型参数导入arduino固件中,替换模型参数。Arduino中主要有三个函数,syntiant_setup(void)函数是Arduino的系统设置程序,在函数中初始化设备,读取闪存设备,以查看是否有效的uilib程序,最后加载uilib程序。syntiant_loop(void)函数循环检测是否收到语音指令以及低功耗管理。通过void on_classification_changed()这个函数实现了语音指令对应的功能。代码具体内容如下所示。如果检测到“kai”的指令,那就给RGB灯中的绿灯一个高电平,点亮绿灯;如果检测到“guan”的指令,那就给RGB灯中的绿灯一个低电平,关掉绿灯;如果检测到“shan”的指令,那就给RGB灯中的绿灯一个低电平,延时后给一个高电平,达到绿灯闪烁的效果。
void setup(void)
{
syntiant_setup();
}
void loop(void)
{
syntiant_loop();
}
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, "kai") == 0) {
// Toggle LED
digitalWrite(LED_GREEN, HIGH);
}
if (strcmp(event, "guan") == 0) {
// Toggle LED
//digitalWrite(LED_GREEN, HIGH);
delay(500);
digitalWrite(LED_GREEN, LOW);
}
if (strcmp(event, "shan") == 0) {
// Toggle LED
digitalWrite(LED_GREEN, HIGH);
delay(1000);
digitalWrite(LED_GREEN, LOW);
delay(1000);
digitalWrite(LED_GREEN, HIGH);
delay(1000);
digitalWrite(LED_GREEN, LOW);
delay(1000);
//digitalWrite(LED_GREEN, HIGH);
}
}
三、功能展示及说明
如图所示,说出“kai”的指令,点亮绿灯;说出“guan”的指令,关掉绿灯;输出“shan”的指令,绿灯闪烁。
四、对本活动的心得体会(包括意见或建议)
第一次接触tinyML的板子,对于机器学习方面学到了一些东西,但是其中具体的内容还不够理解,总的来说有一定的进步,希望继续举办类似的活动。