Funpack第二季第一期Syntiant TinyML任务实现
Funpack第二季第一期Syntiant TinyML任务实现,完成了三种语音识别
标签
嵌入式系统
voncg
更新2022-07-05
806

一.项目描述

其配备超低功耗 Syntiant ® NDP101神经决策处理器™,可以使语音和传感器应用程序分别在 140 和 100 微瓦以下运行,与基于 MCU 的传统 MCU 相比,吞吐量提高 20 倍,系统效率提高 200 倍。

Syntiant TinyML 板的尺寸为 24 毫米 x 28 毫米,是一个小型的独立系统,通过微型 USB 连接通过 Edge Impulse 轻松下载经过训练的模型,而无需任何专用硬件。

主机处理器: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卡插槽
  • 神经决策处理器使用NDP101,连接了两个传感器:
  • BMI160 6轴运动传感器
  • SPH0641LM4H麦克风
  • NDP101支持多达 560k 个参数和 64 种输出分类
  • 电路板可使用5V micro-USB或3.7V LiPo电池供电

关于Arduino配置

安装TinyML依赖库,现在的软件已经很少有“不依赖”的情况了.我们需要分别安装如下6个库,以及对应的版本号.依次点击Arduino IDE “项目”->“加载库”->“管理库”打开管理,等待“更新已安装库”进度条完成后,在“搜索框”中输入 如下6个库的名称,等待显示完成,选择对应的库版本号,最后点击安装即可。

  Adafruit BusIO                                v1.5.0

  Adafruit ZeroTimer Library         v1.0.1

  HID-Project                                     v2.6.1

  avdweb_SAMDtimer                    v1.0.0

  Adafruit GFX Library                      v1.10.1

  Adafruit SSD1306                           v2.4.0

我们在EDGE IMPULSE官方网站上进行语音记录,我记录了三种语音,分别为siri开灯,把灯关闭,灯光闪烁实现三种方式。每种录音训练大约100s,测试50s,识别效率高。我们在训练界面可以清晰看到声音频谱分布,识别率等,十分方便。随后我们生成一个库文件,和烧录固件,结合arduino可以做到神经网络的更新。

二.代码



    // 在这里写反馈执行

    if (strcmp(event, "kaideng") == 0) { //判断语句,看收听到的语音标签是对应匹配 这里是开灯

        // Toggle LED

        digitalWrite(LED_GREEN, HIGH);//如果匹配,就点绿灯

    }




    if (strcmp(event, "guandeng") == 0) {//判断语句,看收听到的语音标签是对应匹配 这里是关灯

        // Toggle LED

        digitalWrite(LED_RED, LOW);     //如果匹配,灯光全灭

        digitalWrite(LED_BLUE, LOW);

        digitalWrite(LED_GREEN, LOW);

}




    if (strcmp(event, "shanshuo") == 0) {//判断语句,看收听到的语音标签是对应匹配 这里是灯光闪烁

        // Toggle LED

        for(i=0;i<=5;i++)

        {

        digitalWrite(LED_GREEN, HIGH);//灯光进行开 关 开 关闪烁

        delay(800);

        digitalWrite(LED_RED, LOW);

        digitalWrite(LED_BLUE, LOW);

        digitalWrite(LED_GREEN, LOW);

        delay(800);

        }

    }

}




void setup(void)

{

    syntiant_setup();//初始化

}




void loop(void)

{

    syntiant_loop();//循环

}




void syntiant_loop(void)

{

    
        if (timer4TimedOut)//计时器溢出

        {

  //          timer4TimedOut = 0;

            // Turn Off Arduino LED

  //          digitalWrite(LED_RED, LOW);

  //          digitalWrite(LED_BLUE, LOW);

 //           digitalWrite(LED_GREEN, LOW);
//这里我进行了注释处理,不注释的话,灯光过一会会自动熄灭,为了方便进行关灯处理,所以选择了注释
        }

  }
//本次funpack代码部分相比之前一期,占比很少,更多的是进行神经网络训练的处理

三.效果展示

 

1

2

四.总结

首先很感谢硬禾学堂,能够提供一个平台,能够在空余时间提高自己开发的能力。我作为一名大二学生,第一次接触到机器学习,可以说有很大的新鲜感,同时,也学习到了更多的知识。同时我也期待未来还能够通过电子森林的funpack等活动学习更多的内容。感谢电子森林能够提供这个平台。希望未来电子森林能够有更多好玩有趣的项目(多出点非Arduino项目)。

 

附件下载
firmware-syntiant-tinyml.zip
代码
syntiant-rc-go-stop-syntiant-ndp101-v56 (2).zip
烧录固件
团队介绍
伏波队
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号