Funpack第二季第一期 基于Syntiant TinyML 机器学习语音识别
基于Syntiant TinyML 机器学习语音识别,并显示相应的亮灯
标签
嵌入式系统
机器学习
TinyML
Syntiant
安先生
更新2022-07-05
546
  • 开发板简介

Syntiant TinyML 开发板是构建低功耗语音、声学事件检测和传感器ML应用的理想平台。

​TinyML板配备了超低功耗的Syntiant® NDP101神经决策处理器,最低功耗神经网络计算。

​板载麦克风和 BMI160 传感器可轻松配置语音、 6 轴运动的应用。

​利用Edge Impulse 的边缘计算,  经过训练的模型可以通过微型USB连接轻松下载到TinyML板上 ,实现机器学习在开发板的部署。

接下来 我们开始开发板之旅:

第一步,通电验证开发板
 
开发板自带的FW 自带一个语音识别模型。
唤醒指令为: Alexa,Play music.
连接USB 通电后,等待几秒,说: Alexa,Play music 
观察是否会亮起红灯。
如果能正常亮红灯,恭喜你,没问题。可以进行下一步。
 
第二步,体验语音识别demo
 
Edge Impulse提供边缘计算的数据采集,模型训练,模型部署下载。

注册账号复制repo

复制这个respo  Dashboard - Syntiant-RC-Go-Stop - Edge Impulse

基于官方的demo 会省去很多问题。

官方demo 是一个 go stop的语音识别,有2.5小时训练数据的完整项目。

通过这个项目简单熟悉数据采集 数据训练,并下载这个项目的lib 进行部署实测。

如下图所示。按照如下路径 下载压缩包 

Fk-xrIQh7mHVx3f7pnfgSZEjB0p2

 

点击flash_windows.bat 下载到开发板

FhThw7J8GQnbxrT9YhJnDKSQV2P5

实测体验语音识别

go, 或者 Stop  

观察亮灯情况。

红灯 或者绿灯显示,表示正常识别。

到此为止 我们体验了 整个语音demo

接下来 我们要构建 我们自己的语音识别。

 

第三步,构建自定义的语音识别

这部分第一步,需要先确认语音识别词。
直播时,老师对识别词部分有详细讲解。
总结来说,推荐用四个字的词 差异化较大的词。
综合考虑后,我们采用如下语音词
 
- 关灯睡觉 (close)
- 起床吃饭 (open)
- 别看手机 (watch)
 
万事俱备,现在开始:
  • 采集数据(captured data)

如下图 选择设备源,推荐选择电脑 或者手机。

这样利用手机或者电脑的麦克风 进行音频数据采集。

 
开始数据采集,如下图所示
将关键字设置为标签,并将样本长度设置为 2 秒。
然后点击开始录制并开始一遍又一遍地说出关键字(每个话语之间稍有停顿)。
我这里是每个词录制20次。(最好是各种情况,速度快,速度慢等)
 
 
  • 训练模型(trained a model)

目前使用的训练模式

FkK8euLwgrhoyPC2LiqErccqQgNw

配置神经网络

处理完所有数据后,是时候开始训练神经网络了。神经网络是一种算法,以人脑为原型,可以学习识别其训练数据中出现的模式。
我们在这里训练的网络将处理块特征作为输入,并尝试将其映射到三个类之一 - “open”,“close”或“watch”。
单击左侧菜单中的 NN 分类器。您将看到以下页面:
 
Syntiant NN Configuration
神经网络架构自动填充了 Syntiant 配置:3 个密集层,包含 256 个神经元和 3 个 Dropout 层。
一切就绪后,单击“开始训练”。您将在训练输出面板中看到大量文本飞过 ,您现在可以忽略这些文本。培训需要几分钟时间。完成后,您将看到页面底部显示“上次训练表现”面板:

当前使用数据训练结果如下

close 情况一般 后面验证也如此

open 与watch 效果还可以。

FibqK_RngcpQ_OAwcLQc8JmkuCRK

  • 部署到开发板(deployed it to the Syntiant TinyML Board)
    • 下载代码,配置环境,更新代码逻辑
    把如下代码下载到本地 修改逻辑

修改代码逻辑。

对应的三个关键词 灯的状态为:

- 关灯睡觉   蓝灯亮
- 起床吃饭   绿灯亮
- 别看手机   红灯亮
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, "close") == 0) {
        // Toggle LED
        digitalWrite(LED_BLUE,HIGH);

    }

    if (strcmp(event, "open") == 0) {
        // Toggle LED
        digitalWrite(LED_GREEN,HIGH);
    }
    if (strcmp(event, "watch") == 0) {
        // Toggle LED
        digitalWrite(LED_RED,HIGH);
    }
}
    • 替换model 文件 替换下载model bin
      • 生成部署如下图 选择生成NDP101 LIB  会下载压缩包 包括 
      • 替换 * src/model-parameters* 文件目录
    • 生成arduino bin 
      • 生成的 arduino 地址: C:\Users\username\AppData\Local\Temp\arduino_build_106482(按按实际)
    • 下载到flash 
在二步下载的demo 包中 替换
firmware.ino.bin  
firmware.ino.with_bootloader.bin
ei_model.bin
ei_model.synpkg
然后执行flash_windows.bat  
如下图所示  下载完成。
重开机后,
分别说出
- 关灯睡觉   
- 起床吃饭
- 别看手机
观察灯的变化 
三条指令 对应灯的状态:
- 关灯睡觉   蓝灯亮
- 起床吃饭   绿灯亮
- 别看手机   红灯亮
FlynxukYPLI7yoSVd6fuzfK753hS
 
心得体会
感谢主办方,不错的活动 体验不一样的开发板  熟悉与体验AI ,希望后续能体验更多的好板子。
 
 
附件下载
syntiant.zip
code model压缩包
团队介绍
一枚攻城狮
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号