0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Arduino的文本语音转换器和语音控制灯

454398 来源:一板网 作者:风筝 2020-12-25 17:07 次阅读

语音识别技术在自动化中非常有用,它不仅可以让您免提控制设备,还可以提高系统的安全性。除了制造语音控制小工具外,语音识别还为患有各种残疾的人们提供了重要帮助。

在之前的帖子中,我们制作了基于Arduino的文本到语音(TTS)转换器和语音控制灯。现在,在本篇文章中,我们将使用Edge Impulse Studio通过三个命令,即“ LIGHT ON”、“ LIGHT OFF”和“ NOISE”,使用机器学习来训练语音识别模型。 Edge Impulse是一个在线机器学习平台,使开发人员能够使用嵌入式机器学习来创建下一代智能设备解决方案。

所需的组件

● Arduino 33 BLE Sense开发板

● 发光二极管

● 跳线

● Edge Impulse Studio

● Arduino IDE

电路原理

下面给出了使用Arduino进行语音识别的电路连接图。这里没有可用的Arduino 33 BLE的Fritzing部件,所以我使用了Arduino Nano,两者的引脚排列相同。

LED的正极引脚连接到Arduino 33 BLE Sense开发板的数字引脚5,负极引脚连接到Arduino的GND引脚。

创建用于Arduino语音识别的数据集

本文中,Edge Impulse Studio用于训练我们的语音识别模型。在Edge Impulse Studio上训练模型类似于在其他机器学习框架上训练机器学习模型。对于训练,机器学习模型的第一步是收集一个数据集,该数据集包含我们希望能够识别的数据样本。

由于我们的目标是使用语音命令控制LED,因此我们需要收集所有命令和噪声的语音样本,以便可以区分语音命令和其他噪声。

我们将创建一个具有三个类别的数据集:“LED ON”,“LED ON”和“noise”。要创建数据集,请先创建一个Edge Impulse帐户,验证您的帐户,然后启动一个新项目。您可以使用手机、Arduino开发板来加载样本,也可以将数据集导入到Edge Impulse帐户中。将样本加载到您的帐户中最简单的方法是使用手机。为此,将手机与Edge Impulse连接。

要连接手机,请单击“Devices”,然后单击“Connect a New Device”。

这样会将您的手机与Edge Impulse Studio连接。


通过将手机与Edge Impulse Studio连接,您现在可以加载样本。要加载样本,请点击“Data acquisition”。现在,在“Data acquisition”页面上,输入标签名称,选择麦克风作为传感器,然后输入采样长度。点击“Start sampling”,您的设备将捕获一个2秒的采样。在不同条件下总共记录10到12个语音样本。

在上传样本后,现在设置更改标签并收集“light off’”和“noise”的样本。

这些样本用于培训模块,在接下来的步骤中,我们将收集测试数据。测试数据至少应为训练数据的30%,因此请收集4个“noise”样本和4至5个“light on”和“light off”样本。

训练模型

准备好数据集后,现在我们可以为数据创建一个Impulse。为此,请转到“Create impulse”页面。将窗口大小1000 ms的默认设置更改为1200ms,将500 ms窗口增加到50ms。这意味着我们的数据将在每次58 ms的时间内一次处理1.2 s。

现在,在“Create impulse”页面上,单击“Add a processing block”。在下一个窗口中,选择Audio(MFCC)块。之后,点击“Add a learning block”,然后选择Neural Network (Keras) 模块。然后点击“Save Impulse”。

在下一步中,转到MFCC页面,然后单击“Generate Features”。它将为我们所有的音频窗口生成MFCC块。

之后,转到“ NN Classifier”页面,然后单击“Neural Network settings”右上角的三个点,然后选择“Switch to Keras (expert) mode”。

将原始代码替换为以下代码,并将“最Minimum confidence rating”更改为“ 0.70”。然后点击“Start training”按钮。它将开始训练您的模型。

import tensorflow as tf

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D

from tensorflow.keras.optimizers import Adam

from tensorflow.keras.constraints import MaxNorm

# model architecture

model = Sequential()

model.add(InputLayer(input_shape=(X_train.shape[1], ), name='x_input'))

model.add(Reshape((int(X_train.shape[1] / 13), 13, 1), input_shape=(X_train.shape[1], )))

model.add(Conv2D(10, kernel_size=5, activation='relu', padding='same', kernel_constraint=MaxNorm(3)))

model.add(AveragePooling2D(pool_size=2, padding='same'))

model.add(Conv2D(5, kernel_size=5, activation='relu', padding='same', kernel_constraint=MaxNorm(3)))

model.add(AveragePooling2D(pool_size=2, padding='same'))

model.add(Flatten())

model.add(Dense(classes, activation='softmax', name='y_pred', kernel_constraint=MaxNorm(3)))

# this controls the learning rate

opt = Adam(lr=0.005, beta_1=0.9, beta_2=0.999)

# train the neural network

model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])

model.fit(X_train, Y_train, batch_size=32, epochs=9, validation_data=(X_test, Y_test), verbose=2)

训练模型后,它将显示训练效果。本文中,精度为81.1%,损耗为0.45,这不是理想的,但我们可以继续进行。您可以通过创建庞大的数据集来提高模型的性能。

现在,当我们的语音识别模型准备就绪时,我们将把该模型部署为Arduino库。在将模型下载为库之前,您可以转到“Live Classification”页面来测试性能。Live Classification功能使您既可以使用数据集附带的现有测试数据,也可以通过流式传输手机中的音频数据来测试模型。

要使用手机测试数据,请在手机上选择“Switch to Classification Mode”。

现在要将模型下载为Arduino库,请转到“Deployment”页面,然后选择“ Arduino库”。现在向下滚动并点击“Build”。这将为您的项目制作一个Arduino库。

现在,在您的Arduino IDE中添加该库。请打开Arduino IDE,然后单击Sketch> Include Library> Add.ZIP library。然后,转到File > Examples > Your project name - Edge Impulse > nano_ble33_sense_microphone加载示例。

用于Arduino语音识别的代码

我们在void loop()函数中进行一些更改,在该处打印命令的概率。在原始代码中,它将所有标签及其值一起打印。

for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {

ei_printf(" %s: %.5f\n", result.classification[ix].label, result.classification[ix].value);

}

为了控制LED,我们必须将所有命令概率保存在三个不同的变量中,以便我们可以在它们上放置条件语句。因此,根据新代码,如果“light on”命令的概率大于0.50,则它将打开LED;如果“light off’”命令的概率大于0.50,则它将关闭LED。

for (size_t ix = 2; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {

noise = result.classification[ix].value;

Serial.println("Noise: ");

Serial.println(noise);

}

for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix--) {

lightoff = result.classification[ix].value;

Serial.println("Light Off: ");

Serial.print(lightoff);

}

lighton = 1- (noise +lightoff);

Serial.println("Light ON: ");

Serial.print(lighton);

if (lighton > 0.50){

digitalWrite(led, HIGH);

}

if (lightoff > 0.50){

digitalWrite(led, LOW);

}

进行更改后,将代码上传到Arduino。以115200波特率打开串口监视器。

以上就是您可以使用Arduino构建语音识别并发出命令以操作设备的方式。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22447

    浏览量

    645849
  • 机器学习
    +关注

    关注

    66

    文章

    8122

    浏览量

    130551
  • 语音控制
    +关注

    关注

    5

    文章

    460

    浏览量

    28068
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184826
收藏 人收藏

    评论

    相关推荐

    如何使用Arduino和蓝牙的语音控制LED

    使用语音命令控制 LED 似乎是一项艰巨的任务,但它很容易,您可以快速构建它。我们只需要一个Arduino UNO与HC-06蓝牙模块串行通信,智能手机就可以向蓝牙模块HC-06发送语音
    的头像 发表于 11-15 16:43 4952次阅读
    如何使用<b class='flag-5'>Arduino</b>和蓝牙的<b class='flag-5'>语音</b><b class='flag-5'>控制</b>LED

    微雪Arduino系列教程(包含基本语法和实验:语音、传感.... )——持续更新中

    Arduino系列教程教程七:DHT11-温湿度传感Arduino系列教程教程八:PM2.5灰尘传感Arduino系列教程九:SPIAr
    发表于 06-08 09:09

    微雪Arduino系列教程(包含基本语法和实验:语音、传感....

    Arduino系列教程教程七:DHT11-温湿度传感Arduino系列教程教程八:PM2.5灰尘传感Arduino系列教程九:SPIAr
    发表于 06-08 09:10

    语音控制模块怎么和定时相连,最后通过arduino板子控制步进电机驱动。

    首先,要通过语音模块控制定时器定时,定时时间到了之后给arduino一个信号,arduino控制
    发表于 06-13 13:40

    语音合成芯片与语音芯片对比

    )的转换。其特性是:支持任意中文文本的合成,对常见的数值、电话号码、时间日期、度量衡符号等格式的文本具有文本智能分析处理功能;只需要上位机通过串行通信对其发送一段
    发表于 03-08 17:26

    语音合成芯片与语音芯片对比

    )的转换。其特性是:支持任意中文文本的合成,对常见的数值、电话号码、时间日期、度量衡符号等格式的文本具有文本智能分析处理功能;只需要上位机通过串行通信对其发送一段
    发表于 03-11 15:39

    语音合成IC与语音IC的两三事

    通讯方式,接收待合成的文本数据,实现文本语音(或TTS语音)的转换。其特性是:支持任意中文文本
    发表于 05-13 17:02

    如何在Python中将语音转换文本

      语音识别是计算机软件识别口语中的单词和短语,并将其转换为可读文本的能力。那么如何在Python中将语音转换
    发表于 07-29 18:12

    基于Arduino UNO控制板的语音播放设计

    案例主控板如不做特殊说明的话,均默认是Arduino UNO控制板。本次实验以UNO发送串口协议控制语音播放播放歌曲,
    发表于 07-30 08:06

    arduino如何控制JQ***P语音模块

    首先要感谢stm32通过 一线串口通信控制JQ***P语音模块的作者我就是根据这位博主的代码改写的,但是碰到了意想不到的问题。其实代码是写对了,语音模块是单独供电,这个供电的地要和arduin
    发表于 01-07 08:09

    利用语音识别模块与arduino UNO测试一个简单的语音控制亮灭的程序

    文章目录简述器件代码部分测试结果总结简述这里利用语音识别模块与arduino UNO 测试一个简单的语音控制亮灭的程序。希望能给我一样的
    发表于 02-15 07:03

    基于语音识别做一款能识别语音的App

    最近做了一款语音识别的App,想着利用手机控制arduino实现RGB的调节,开发思路:基于讯飞语音识别做一款能识别我们语音的App,识别出
    发表于 03-01 07:05

    基于Arduino Nano和DS3231的语音时钟模块

    描述语音时钟这款手表基于Arduino Nano、时钟模块DS3231、天气传感模块BME280和带Micro-SD卡的MP3播放模块,由三个触摸按钮
    发表于 08-24 07:15

    使用RTS0072B的语音转换器电路图

    语音转换器电路电子项目是使用该RTS0072B设计的。 RTS0072B语音转换器电路必须由直流电源电路供电,该电路将提供 3 到 5 伏之间的固定输出电压 。 RTS0072B单芯
    发表于 09-11 16:03

    Arduino带蓝牙和语音的家庭控制

    电子发烧友网站提供《Arduino带蓝牙和语音的家庭控制.zip》资料免费下载
    发表于 12-22 16:28 0次下载
    <b class='flag-5'>Arduino</b>带蓝牙和<b class='flag-5'>语音</b>的家庭<b class='flag-5'>控制</b>