Syntiant做动作识别
基于Syntiant TinyML Board的动作识别系统,可以识别三个动作并作出回应
标签
嵌入式系统
疾风亦有归途
更新2022-07-05
712

Syntiant TinyML Board简介

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

Fgi1jrJAoI7MwHNeCebn1rHGz0I3

主要特点:

· 主机处理器:SAMD21 Cortex-M0+ 32位低功耗48MHz ARM MCU                        · 神经决策处理器使用NDP101,连接了两个传感器:

· 内置256KB FLASH和32KB SRAM                                                                              · BMI160 6轴运动传感器

· 5个数字I/O,与Arduino MKR系列板兼容                                                                 · SPH0641LM4H麦克风

· 其中包含1路UART接口和1路I2C接口(包括在数字I/O引脚中)                              · NDP101支持多达 560k 个参数和 64 种输出分类

· 2MB板载串行闪存                                                                                                    · 电路板可使用5V micro-USB或3.7V LiPo电池供电

· 一个用户定义的RGB LED                                                                                          · uSD卡插槽

Fl5cARonTXIMNA67Qpyt8ig8hrXr

Funpack第二季第一期指定完成的任务,活动参与者可从以下任务中任选其一完成:

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

任务二:若您针对这个板卡有更好的创意,可自命题完成(难度不能低于任务一)

本次funpack活动,我选择任务二,选择用自带的六轴传感器,搭建机器学习模型,通过是板卡呈现出不同的动作,来使板卡上的灯光呈现出不同的效果。

首先,在配置机器学习之前前,我们需要先收集不同动作的数据。

Fh-Kp2z87OyYBsYk9nUt2yf5DFt2

将sd卡格式化后,插入板卡中,并将板卡与电脑相连。将板卡按照一定方向进行摆动,使系统可以识别其摆动方位的值。

FrSMF0Qq-MJcFTMjytV9NB4yOsep

数据收集好后点击,save impulse进行数据分类

FomPiK__ziZLIRfElS7pZEB0oXd2

scale 16 bits to 8 bits,不用选择,点击save parameters进行数据分类,效果如下图所示

FoRJWG8_aEZWqlR90DSNdyIyjzwq

下来进行机器学习,效果如下

FqnJAeRmJ3PdwCPkw7A5dNwMpQ9a

学习完成后,想直接看效果的下载Syntiant TinyML,想进行代码编写的下载Syntiant NDP101 library。此次我选择的是第二个,进行代码编写。

FqjLjvlHwLV_Mj2-MkM3MpMnC4aL

再此页面下,进入GitHub下载能编辑的adruino文件

FmBqlRAYyTLwlArtUNGGogyGgXqh

下载好后,将之前下载的模型文件中的model文件替换arduino文件中src里的model文件

FtLt9BvNgYR8LtNkWTpr6wy32tWC

按如图所示将27行和38-44行代码注释掉

FsIpRrkuVVPUSOnN15eQNZ_lSysN

编辑arduino程序代码,然后将代码下到板卡中,通过串口和灯光设置来检查训练效果是否满意。FixxksuLtqPJ-sVAclFkNzv8Fjya

程序代码:

#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, "LR") == 0) {
        // Toggle LED
        digitalWrite(LED_RED, HIGH);
        digitalWrite(LED_BLUE, LOW);
        digitalWrite(LED_GREEN, LOW);
    }

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

void setup(void)
{
    syntiant_setup();
}

void loop(void)
{
    syntiant_loop();
}

效果展示:左右摆动时亮红灯

Fi_C-loqwT2YTMBSwcQC0-J0MtQe

前后摆动亮蓝灯

FlRFzRV1T7rq-czIYYmt0sPfxnCt

上下摆动亮绿灯

FkJf9jTnrGawgilOIgIonEH1O8nT

心得体会

本次活动基于Syntiant TinyML Board进行开发,并通过对一些动作的机器学习,让我了解并会使用机器学习。后面可以针对视觉识别进行一定量的学习。

十分期待硬禾学堂下期的活动!

附件下载
firmware-syntiant-tinyml.zip
团队介绍
一名大三学生,喜欢电子设计,并在平常制作一些电子小玩意。
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号