项目说明
本次项目用 syntiant tinyml 开发板自带的麦克风,通过 edge impulse 搭建机器学习模型,使板卡上的 led 灯根据中文语音指令呈现出不同效果。一共训练了四个标签的声音数据,具体说明如下。
标签 关键词 动作
turn_on_blue 打开蓝灯 使板卡上的 rgb led 灯显示蓝色
turn_on_green 打开绿灯 使板卡上的 rgb led 灯显示绿色
turn_on_red 打开红灯 使板卡上的 rgb led 灯显示红色
turn_off 关灯 关闭板卡上的 rgb led 灯
硬件平台
syntiant tinyml board 是美国 ai 芯片研发商 syntiant 推出的一款 tinyml 开发板,它配备了超低功耗 syntiant ndp101 神经决策处理器,可以使语音和传感器应用程序分别在 140 和 100 微瓦以下运行。与基于 mcu 的传统 mcu 相比,syntiant tinyml 板的吞吐量提高 20 倍,系统效率提高 200 倍。
syntiant tinyml 板的尺寸非常小,仅为 24 毫米 x 28 毫米,是一个小型的独立系统。开发者可以直接通过 micro 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 电池供电
语音训练
打开 studio.edgeimpulse.com 网页,创建一个新的项目,例如 syntiant_tinyml_voice,作为本次语音训练的项目。
创建完成后进入项目主页面,在这里可以看到训练的大致流程:选择设备、选择语音输入源、采集语音数据、创建 impulse 模型、训练数据、生成固件、部署到硬件。
语音数据采集方面,由于我们需要采集类似“打开红灯”这样的语音,为了方便采集和训练,我们将采集时长定为 2 秒。分别为四个标签采集 20 组数据,按照 8:2 的比例分为训练集和测试集。
采集数据后记得检查一下数据的质量,在 data acquisition 页面选中任意一条采集的语音数据,可以看到声音的波形,回放该条录音。在训练之前需要确保所有训练和测试的数据完好,否则会影响训练效果。
如果数据没问题,接下来就可以创建机器学习模型,一共分为四个模块。首先是时间窗口的设置,对于 syntiant tinyml 语音模块,window size 大小固定为 968 ms,window increase 设置为 30 ms(窗口增加设置比较小有利于机器学习匹配出语音)。第二个模块选择 syntiant audio,第三个模块选择最近邻分类器(nearest neighbor classifier),最后确认输出 turn_off、turn_on_blue、turn_on_green 和 turn_on_red 四个标签。点击 save impulse 保存模型。
然后设置 mel 滤波器特征参数,这里采用默认参数。
开始训练模式,训练结果准确率为 90.2%,不是特别高,但也可以测试看看。
点击左侧边栏的 deployment,选择 syntiant ndp101 library 下载训练好的库,将其替换到你的工程中(参考 syntiant tinyml board 固件下载)。
arduino 工程
参考 syntiant_tinyml_board_demo 中的 voiceresponding 项目,修改标签名称及其触发的动作,代码如下。
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, turn_on_red) == 0) { // toggle led digitalwrite(led_red, high); digitalwrite(led_blue, low); digitalwrite(led_green, low); } if (strcmp(event, turn_on_green) == 0) { // toggle led digitalwrite(led_green, high); digitalwrite(led_blue, low); digitalwrite(led_red, low); } if (strcmp(event, turn_on_blue) == 0) { // toggle led digitalwrite(led_blue, high); digitalwrite(led_green, low); digitalwrite(led_red, low); } if (strcmp(event, turn_off) == 0) { // toggle led digitalwrite(led_blue, low); digitalwrite(led_green, low); digitalwrite(led_red, low); }}
通过 arduino ide 重新编译、上传到 syntiant tinyml board,就可以看到效果啦!
优于深度学习AI芯片效率更高、功耗更低,类脑芯片研究进展如何?
MDK -ARM如何生产Bin文件
海康威视去年净利润达到124亿元
华为新一代碳化硅电机发布:22000转/分、零百加速3.3秒
xp操作系统技巧
Syntiant TinyML板搭建Edge Impulse模型实现语音识别效果
全方面解读福特锐界底盘
TranSwitch推出LTE固定无线家庭网关解决方案
普通探头如何测量电压?
如何在软件中实现高精度NCO
千亿级虚拟现实市场难爆发,究竟原因是什么?
如何将毫米波5G固定到无线接入的方案详细分析概述
浅谈新能源汽车电驱动总成制造技术
什么是二强玻璃应力仪?微晶玻璃应力仪原理与使用方法?
得润电子荣获2021年度汽车电子科学技术奖领军企业奖
Meta新一代VR头显有哪些爆料
短路电流的大小由什么决定
披覆胶(三防漆)全面解析——下
浅析电磁屏蔽点胶加工设备点胶机的工作原理
乐扩M.2转10/100/1000M/2.5G网卡的介绍