Funpack 2-1 Syntiant TinyML 语音控制LED
1.Syntiant TinyML Board简介 2.使用Syntiant TinyML Board进行本体语音识别的功能开发过程简介
标签
嵌入式系统
Arduino
TinyML
Syntiant
EDGE IMPLUSE
Demo Board
Titan
更新2022-07-06
558

.项目介绍  

1.Syntiant TinyML Board

引用部分官方介绍:配备超低功耗 Syntiant ® NDP101神经决策处理器™,可以使语音和传感器应用程序分别在 140 和 100 微瓦以下运行,比传统 MCU 吞吐量提高 20 倍,系统效率提高 200 倍。Syntiant TinyML 板的尺寸为 24 毫米 x 28 毫米,是一个微小型独立系统,通过micro USB 连接,通过 Edge Impulse 训练的模型,模型数据下载到开发板后直接使用,而无需任何专用硬件。

FmyZs1hnQ58fqxTGvwPnv7zskDbpFmjXXOho0LKhrGnnGRW1v8BQ04Kh

2.Arduino IDE: 

Arduino IDE设置适配Syntiant TinyML Board可参照官网

有坑注意:

1.当按官网介绍配置好IDE后,在下载时会报错,这时候会发现其实syntiant.h其实是存在的,只是会在src文件夹中,按说是不影响的,那真正影响的是firmware-syntiant-tinyml文件夹命名,一般从Github上下载下来文件名是firmware-syntiant-tinyml-master,需要删掉-master字样才行。

FoS-nkP8gZfj1c_hNalO0oaIVI5G

2.当文件夹名称更改好后,还会出现一个报错,按照这个报错,大家一般是在..\firmware-syntiant-tinyml\src\model-parameters文件夹中的model_variables.h文件中修改,大家一般是把其中的这个语句注释掉,同时还需要把这段代码中另外一大块也注释掉,不过我发现,其实只需要在如下语句中的edge前面增加../就行,这是从原始文件中对比发现的。

#include "../edge-impulse-sdk/classifier/ei_model_types.h"

 

2.Edge Impulse: 

edge impulse的使用可以按照官网guidelines来一步步走就行,另外也可以参考硬禾学堂的直播回放,我使用这个网站的注意点如下:

使用DATA ACQUISITION收集数据时,首先需要确保开发板连接在电脑上,并且需要在电脑的声音选项中确认使用的是开发板的麦克风,具体如果确认可以Bing一下,另外收集数据时一定要提前设定好标签,标签就是用来后续对板载识别数据用的。

当数据集的impluse design完成后,可以用model testing先看看效果,不过这个效果仅供参考,实际部署到开发板后,本人感觉效果会差异很大。

最后就是部署deployment,布署会在下一段着重介绍。

 

.任务完成思路和实现过程  

此次活动我选取了任务1:用自带的麦克风,搭建机器学习模型,使板卡上的LED灯根据中文语音指令(不少于三个指令)呈现出不同效果,如开灯、关灯、闪烁、SOS、呼吸等。

以下对本次任务进行分解:

第一步:使用edge impluse进行语音训练。

edge impluse的使用方法在前面已经进行了简单介绍,关于硬件,是因为开发板上有NDP101,所以可以对NDP101进行firmware更新,从而可以让开发板进行本地识别。

 

第二步:下载edge impluse的数据到本地开发板上。

用arduino IDE的时候,这个布署过程比较复杂:

1.首先安装如下标记的1,2,3,顺序,先1,然后2,开始build一次,再3,再build一次,那样就会下载两个压缩包下来,这两个压缩包按我理解,就是给两颗主控用的,1的library是给Atmel用,另外Syntiant的压缩包是给NDP101用的,这么理解就容易多了

FlvFVsV3CQBYUTTNs_NscpH1s65Q

2.当两个压缩包下载下来后,首先解压,然后发现lib的压缩包中有一些文件,其中model-parameters文件中的model_variables.h如上面描述,先改好,然后将model-parameters文件夹中3个文件复制到..firmware-syntiant-tinyml\src\model-parameters文件夹中,并替换掉原来件,然后,回到..firmware-syntiant-tinyml文件夹根目录下,运行update_libraries_windows.bat,如果能上Github,那运行这个问题不大,如果不能上Github,那要想办法确保先能上Github,接下来过程更复杂

3.批处理运行好了后,运行firmware-syntiant-tinyml.ino按说可以正常下载文件到开发板了,运行arduino 好了后,在C盘中C:\Users\W\AppData\Local\Temp,其中W是个人自己的电脑名称,AppData是隐藏文件夹,记得设置显示隐藏,在这里找arduino_build_文件夹,选更新时间是arduino下载的时候那个时间,打开那个文件夹,找firmware-syntiant-tinyml.ino.bin和firmware-syntiant-tinyml.ino.with_bootloader.bin这两个文件

4.接下来,我们解压缩Syntiant的压缩包,解压缩后将之前下载的lib文件中ei_model.bin和ei_model.synpkg复制Syntiant解压缩包中,然后,再将从C盘找的两个.ino.bin文件放进来,并且将firmware-syntiant-tinyml的命名都改成firmware,将原来这个文件夹中同名文件放其他文件夹或删除,再运行flash_windows.bat

至此,如果一切顺序,开发板就下载程序成功,可以使用了。

第三步:实现和调试(完整代码详见附件)

程序中需要载入的库会在运行update_libraries_windows.bat时自动安装好,前提是在Arduino上先安装好MKRZERO的库,这个在edge impluse上有很清楚的介绍。

需要调试的部分:

(1)亮灯部分:针对选用的功能,比如开关灯,闪烁灯进行代码编辑,根据提供的sample进行简单修改即可。以开红灯为例,如下即可

    if (strcmp(event, "turn on red") == 0) {
        // Toggle LED
        digitalWrite(LED_RED, HIGH);        
    }

(2)正确率调试,当发现正确率过低时,需要先确保语音是否被正确截取,比如要确保如下框中都能截取说需要的语音。Fgs_GuFFJOs1ToNmqNnPhEQ0IzDt

使用edge impluse,大部分情况下使用体验不错,但是对语音录取要求较高,比如用开发板录取语音时,会在说话后延迟约0.5s才开始,这就导致经常录取的语音会丢失一部分,所以建议设定3s或以上时间的录取时长。

第四步:演示效果  

贴上演示效果如下:

Fp3YHtwkPqI-HaQBXjJhCnN5BYc6Fg8bWbDvbAgN2wDkGm5uJZB4hWHGFmIy5ozCUWs-smKwNjc2cg3rQekg

.活动总结,一些感想

本次活动,是第一次接触edge impluse,也是第二次接触机器学习的相关内容,因为个人原因,没有足够时间来打磨这个项目,导致实现效果时会很容易引起误触发,不过语音识别的效果能实现了,感谢微信群里各位大佬的帮忙,差点因为无法正确下载导致无法使用,还好最后边学边摸索出下载方法,感谢硬禾学堂提供这些机会,希望硬禾学堂的活动越办越好。

 

 

附件下载
Titan funpack 2-1 code.zip
包含了lib包,syntiant包,arduino_build包
团队介绍
个人
团队成员
Titan
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号