Funpack第二季第一期基于Syntiant TinyML开发板实现中文语音灯控
用自带的麦克风,搭建机器学习模型,使板卡上的LED灯根据中文语音指令(不少于三个指令)呈现出不同效果,如开灯、关灯、闪烁、SOS、呼吸等。选用三个中文指令“kai”、“guan”、“shan”,分别对应开灯、关灯及灯闪烁三个功能。
标签
嵌入式系统
Arduino
TinyML
大风吹
更新2022-07-04
南开大学
602

基于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%。

FmbKj9zIvY9ii-_hjEDr2h5iMNT4

图1 中文指令集

具体训练过程根据Syntiant_TinyML Tutorial (Windows)文档提示完成。最终得到训练模型,并下载模型文件,如图所示。

FpHnEeE7wwTTz8xeEocEZW2gGOPBFqf2AVkdmBPpWDiw9LwhKjt-Jp6J

 

图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的板子,对于机器学习方面学到了一些东西,但是其中具体的内容还不够理解,总的来说有一定的进步,希望继续举办类似的活动。

附件下载
syntiant-tinyml.rar
团队介绍
一个业余电子爱好者,小白,希望大家多关照
团队成员
大风吹
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号