Funpack第二季第一期,基于Syntiant TinyML的语音控制灯光系统
Funpack第二季第一期,基于Syntiant TinyML的语音控制灯光系统
标签
Funpack第二季第一期
Syntiant TinyML
yzc
更新2022-07-29
北京理工大学
479

1.板卡介绍

Syntiant TinyML Board

深度学习解决方案提供商Syntiant Corp推出的TinyML 开发板

FujSQTmhWsvAm4RLNF4C6EjvyJlo

 

配备超低功耗 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电池供电

 

2.数据训练

三个控制类别

分别是开红灯,开绿灯,熄灭,z-openset是我从例程里下载的噪声,以希望提高识别率。

FjlGpJlPZgtGXu81Yvf5evqqmvm-

 

训练结果如下,准确率不错。

FrtV6QFmjP4tVP3qS4k0-qXExKSB

 

3.生成模型

为了提高准确率,我尝试了加入噪声和不加噪声的情况,也尝试了采用English radio和No calibration两种模式,最后发现不加噪声会比较好。

 

4.搭建环境

以上部分都不难,难的是搭建环境和烧录,我也是琢磨尝试了很久。

首先,按照b站方法下载了cli,arduino环境等,然后配置环境变量,且要把cli和flash-windows放在同一目录,再通过flash-windows去自动配置。

FpNUiE-kA2wv8PXu6xFFJQgG35Zv

 

5.编写代码

写代码前,将build出来的文件要放进文件夹里,

下面两个放到外面的文件夹里,用flash-windows.bat去烧录

FiKXgn4sgO9YElEwjp-1gsNaed17

上面三个复制到src里的model-parameters中去替换

然后修改metadata.h和variables.h里的代码,

FkvdGq3IaD52lWjwPM7YONwEJIW7

 

这里可以修改类别数量

FtLKR2sxrnkC5f08ceHvCG_Mv5MJ

这里需要注释掉一下不然报错

 

然后安装arduino

用update_libraries_windows.bat自动加载库文件,比较方便

进去后一定要选择板卡以及端口,不然没法运行。

 

打开arduino,写代码,代码比较简单

#include "src/syntiant.h"
#include <NDP.h>
#include <NDP_utils.h>
#include <Arduino.h>

/**
 * @brief      Called when a inference matches 1 of the features
 *
 * @param[in]  event          The event
 * @param[in]  confidence     The confidence
 * @param[in]  anomaly_score  The anomaly score
 */
 
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, "kh") == 0) {
        // Toggle LED
        digitalWrite(LED_RED, HIGH);
    }

    if (strcmp(event, "kl") == 0) {
        // Toggle LED
        digitalWrite(LED_GREEN, HIGH);
    }
    if (strcmp(event, "xi") == 0) {
        // Toggle LED
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_RED, LOW);
    }
}



void setup(void)
{
    syntiant_setup();
}

void loop(void)
{
    syntiant_loop();
}

 

写完后编译发现NDP报错

解决方法是下载github上例程firmware-syntiant-tinyml-fix-header-references就不会NDP报错了

最后编译上传进板子

 

6.测试结果

查看结果,我下载了串口工具xcom来方便使用

FsOuSefcdorT-P0z8XVnI7-g-K9Z

在尝试过程中,很难受的是有几次烧录板卡卡住了,需要用xcom发送:F来刷新,还有两次板卡亮绿灯,串口也无法连接,无法发送指令到板卡,摸索后发现只要在开关板卡瞬间发送:F就能解除

 

尝试了几种模型以后,选择了准确还不错的一种,能够有效识别,也不会因为环境声音而亮灯。

效果如下:

FpXF2o8a8SUZCt2s2hC4MSgQoQyO

Fp_6O3lii9D185l4wEYXi84K-oGt

 

7.心得总结

这次花了一个礼拜的时间好好研究了这个板子,总的来说,不算难,但过程坎坷,主要是环境配置的时候一直出现各种错误,我也是在网上查了各种资料,花了很长时间才慢慢解决,在这之中也算学到了很多关于环境以及串口的知识,收获颇丰,也希望下次在指导时在这方面老师能够讲解更多,这样学生可以少走弯路。

附件下载
firmware-syntiant-tinyml.zip
团队介绍
俞卓晨 大三 电子信息工程
团队成员
yzc
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号