Funpack第二季第一期 基于Syntiant TinyML开发板实现的机器学习语音识别模块
Funpack第二季第一期 基于Syntiant TinyML开发板实现的机器学习语音识别模块
标签
嵌入式系统
机器学习
TinyML
语音识别
Syntiant
qqice
更新2022-07-06
河海大学
602

一、序言

让机器听懂人类的语言一直是很多研究者的愿望。随着语音信号处理技术的不断进步和集成电路技术的发展,已经可以让机器听懂人的语言并做出动作。目前,语音识别技术正逐渐市场化,越来越多的人开始注意到语音在设备控制领域的独特优势。过去语音识别系统主要运行在PC和专用服务器上,由于这些设备不易携带以及成本等原因,将语音识别系统移植到更轻便的嵌入式系统中是很有必要的。

在社会大众的显示工作和生活当中,语音识别系统应用范围比较广,并且这种交互方式是人类自身最自然的一种交互方式,使用起来符合人类自身的习惯,同时嵌入式设备自身的小型化对于语音识别算法的应用也大有裨益。目前所应用的嵌入式设备通常情况下是针对特定的应用进行设计的,只需要对几十个词的语音命令进行识别,属于小型的语音识别系统,一旦遇到大词汇量和连续的语音识别,其应用的局限性就会变得尤其明显,难以满足当代社会大众对于嵌入式设备的要求和需求。而在实际的语音识别算法及其在嵌入式系统中的应用过程中,还具有很多其他的因素需要进行综合性的考量,这样才能达到理想的语音识别效果,并且可以在显示社会发展过程中进行对应的应用,其中成本因素就是需要考量的因素之一,因为未来的语言识别系统的应用将是十分广泛的,其成本投入过大的情况下,不能形成良好的性价比。

其次,嵌入式设备所具有的一个最重要的优势就是自身的体积比较小,这也给语音识别算法及其在嵌入式系统中的应用带来比较大的限制。为了使得比较复杂的算法在嵌入式设备中进行应用,其中硬件平台是非常重要的,其中SoC硬件平台具有很好的集成性,在这一平台上的语音识别算法应用的嵌入式系统的可靠性也得到了比较大的提升,从另一个角度上来说,语音识别算法及其在嵌入式系统中的应用,使得嵌入式系统的适应性得到了很好的提升。

语音识别系统是系统级的集成芯片,其不仅仅是将功能复杂的数字逻辑电路放到同一个芯片当中,芯片中还包含很多其他的电子元件,包含模拟器件和常见的储存器,这些都是需要进行考量的因素。

二、本次项目简介

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

Edge Impulse是由一群爱好机器学习的开发者创造出的在线机器学习平台,旨在让开发者能够创造下一代的智能设备。他们相信,机器学习可以对社会产生积极的影响,并致力于支持有益的应用。使用这一平台,即使机器学习基础较为薄弱的开发者也能轻松上手机器学习。

Arduino则是一个开源嵌入式硬件平台,用来供用户制作可交互式的嵌入式项目。此外 Arduino 作为一个开源硬件和开源软件的公司,同时兼有项目和用户社区。该公司负责设计和制造Arduino电路板及相关附件。Arduino项目的目的是为新手和专业人员提供一种低成本且简单的方法,以创建使用传感器与环境相互作用的设备执行器。Edge Impulse的支持人员为Syntiant Tinyml开发板开发了基于Arduino的开源程序,并发布在Github上允许我们进一步进行二次开发。

三、功能代码介绍

本次活动,我利用Edge Impulse平台以及Arduino IDE,训练出了自己的机器学习语音识别模型并部署到了Syntiant Tinyml开发板上。以下是功能代码介绍。

if (strcmp(event, "open") == 0) {
        // Toggle LED
        digitalWrite(LED_BLUE, HIGH);
        delay(500);
        digitalWrite(LED_RED, HIGH);
        delay(500);
        digitalWrite(LED_GREEN, HIGH);
    }

当识别到“打开”指令时,先后打开蓝灯,红灯,绿灯,之间间隔0.5秒

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

识别到“关闭”指令时,立刻同时关闭所有RGB灯

if (strcmp(event, "blink") == 0) {
        // Toggle LED
        unsigned int brightness=0;
        digitalWrite(LED_BLUE, LOW);
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_RED, LOW);
        for (brightness = 0;brightness<256;brightness++){
          analogWrite(LED_BLUE, brightness);
          delay(5);
        }
        for (brightness = 255;brightness>=1;brightness--){
          analogWrite(LED_BLUE, brightness);
          delay(5);
        }
        delay(100);
        analogWrite(LED_BLUE, 0);
    }

识别到“闪烁”(实际代码逻辑为呼吸)指令时,通过PWM控制使蓝色LED实现由暗变亮再变暗,最后关闭的效果

if (strcmp(event, "fullcolor") == 0) {
        // Toggle LED
        unsigned int rgbColour[3];
        // Start off with red.
        rgbColour[0] = 255;
        rgbColour[1] = 0;
        rgbColour[2] = 0;  
        digitalWrite(LED_BLUE, LOW);
        digitalWrite(LED_GREEN, LOW);
        digitalWrite(LED_RED, LOW);

        for (int decColour = 0; decColour < 3; decColour += 1) {
            int incColour = decColour == 2 ? 0 : decColour + 1;

            // cross-fade the two colours.
            for(int i = 0; i < 255; i += 1) {
              rgbColour[decColour] -= 1;
              rgbColour[incColour] += 1;
              
              setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]);
              delay(5);
            }
          }
    }

当识别到“全彩”指令时,通过PWM实现RGBLED的颜色流转

void setColourRgb(unsigned int red, unsigned int green, unsigned int blue) {
  analogWrite(LED_RED, red);
  analogWrite(LED_GREEN, green);
  analogWrite(LED_BLUE, blue);
 }

PWMLED设置函数,通过传入RGB值设置LED

功能展示部分见视频,因为是动态的,没法放图片

四、心得体会

在本次Funpack活动中,我对如何使用Edge Impulse平台和Arduino IDE开发嵌入式机器学习程序有了更深的了解。硬禾学堂的这项活动能让经济来源少的学生接触到更多的开发板,从而提升开发水平,是非常好的活动。以后我还会继续参加类似的活动。

PS:这块Syntiant TinyML板卡的RGB PWM好像设计的有点问题,希望以后厂商能再优化一下。

附件下载
firmware-syntiant-tinyml.zip
可以编译下载的代码(含训练好的模型)
团队介绍
此团队为个人团队,团队成员来自河海大学机器人运动与视觉实验室
团队成员
qqice
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号