Funpack第二季第一期--基于Syntiant TinyML的中文语音指令控制小灯设计
基于Syntiant TinyML的中文语音指令控制小灯设计,支持打开、关闭、闪烁三种指令
标签
嵌入式系统
Funpack参赛
神经网络
语音识别
冷月烟
更新2022-07-05
814

1.任务目的

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

 

2.硬件介绍

project.png?2

· 主机处理器: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电池供电

 

3.训练配置

这里我的主要配置如下:

流程设置

FnqN-JiF2j3ZT0-rksZHTZivW9_h

 

滤波器参数

FoeCS4IW6YHbZCc_A5YIDb9VQEcs

输出特征

FvVBXy0-WP-zaMYTiiL7j0-KaNL8

 

神经网络配置

Fjxxd1bgb1mKfFL5ByLHvAJPQneN

训练效果

FrdilB8zVe-tgMcfTxf1oM7dUa0g

 

测试集测试效果

FmBoLiIy3g6f_4dt7a8ZDnl2FKyW

 

4.主要代码

主要函数

当接收到ndp101产生的中断的时候,根据不同的命令去处理

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

int led_flicker_flag = 0;
/**
 * @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) {
    if (strcmp(event, "open") == 0) {
        digitalWrite(LED_BLUE, HIGH);
        led_flicker_flag = 0;
    }

    if (strcmp(event, "close") == 0) {
        digitalWrite(LED_BLUE, LOW);
        led_flicker_flag = 0;
    }

    if (strcmp(event, "flicker") == 0)
    {
      led_flicker_flag = 1;
    }
}

void setup(void)
{
    syntiant_setup();
    digitalWrite(LED_RED, LOW);
    digitalWrite(LED_BLUE, LOW);
    digitalWrite(LED_GREEN, LOW);
}

void loop(void)
{
    syntiant_loop();
}

 

配置

#ifndef _EI_CLASSIFIER_MODEL_VARIABLES_H_
#define _EI_CLASSIFIER_MODEL_VARIABLES_H_

#include <stdint.h>
#include "model_metadata.h"

const char* ei_classifier_inferencing_categories[] = { "close", "flicker", "_noise", "open" };

uint8_t ei_dsp_config_9_axes[] = { 0 };
const uint32_t ei_dsp_config_9_axes_size = 1;
ei_dsp_config_audio_syntiant_t ei_dsp_config_9 = {
    1,
    1,
    0.03200f,
    0.02400f,
    40,
    512,
    0,
    0,
    0.96875f
};

#endif // _EI_CLASSIFIER_MODEL_METADATA_H_

 

5.实际演示

接到电脑上时会出现串口设备,识别到语音指令时会打印出来。

Fr5D1tofft8wb4PRI7Xs_9qSJ493

 

6.总结感想

作为一款小型跑神经网络的芯片,它设计的很小巧,而且功能也很强大,就是对外开放程度不够,也可能是芯片比较新,大量资料没有放出来,把它的用途仅仅局限在语音与姿态两部分。不过这款芯片让我看到了对神经网络可能性的探索,很期待以后的发展会是怎么样的。

吐槽一下,对于个人玩家很难去录到各种环境下、大量的数据源,只能在安静的环境下录一些区别度大的数据,才能把效果做的还可以。神经网络,没有一定规模的数据库,确实是玩不转,也难怪目前相关领域的推动者全是大公司。

 

7.意见建议

这次活动挺好的,就是一些在外的网页、资料希望能搬运进来,做成pdf什么的,这样看起来更加省事些。

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