0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Arduino的文本語(yǔ)音轉(zhuǎn)換器和語(yǔ)音控制燈

454398 ? 來(lái)源:一板網(wǎng) ? 作者:風(fēng)箏 ? 2020-12-25 17:07 ? 次閱讀

語(yǔ)音識(shí)別技術(shù)在自動(dòng)化中非常有用,它不僅可以讓您免提控制設(shè)備,還可以提高系統(tǒng)的安全性。除了制造語(yǔ)音控制小工具外,語(yǔ)音識(shí)別還為患有各種殘疾的人們提供了重要幫助。

在之前的帖子中,我們制作了基于Arduino的文本到語(yǔ)音(TTS)轉(zhuǎn)換器和語(yǔ)音控制燈。現(xiàn)在,在本篇文章中,我們將使用Edge Impulse Studio通過(guò)三個(gè)命令,即“ LIGHT ON”、“ LIGHT OFF”和“ NOISE”,使用機(jī)器學(xué)習(xí)來(lái)訓(xùn)練語(yǔ)音識(shí)別模型。 Edge Impulse是一個(gè)在線機(jī)器學(xué)習(xí)平臺(tái),使開(kāi)發(fā)人員能夠使用嵌入式機(jī)器學(xué)習(xí)來(lái)創(chuàng)建下一代智能設(shè)備解決方案。

所需的組件

● Arduino 33 BLE Sense開(kāi)發(fā)板

● 發(fā)光二極管

● 跳線

● Edge Impulse Studio

● Arduino IDE

電路原理

下面給出了使用Arduino進(jìn)行語(yǔ)音識(shí)別的電路連接圖。這里沒(méi)有可用的Arduino 33 BLE的Fritzing部件,所以我使用了Arduino Nano,兩者的引腳排列相同。

LED的正極引腳連接到Arduino 33 BLE Sense開(kāi)發(fā)板的數(shù)字引腳5,負(fù)極引腳連接到Arduino的GND引腳。

創(chuàng)建用于Arduino語(yǔ)音識(shí)別的數(shù)據(jù)集

本文中,Edge Impulse Studio用于訓(xùn)練我們的語(yǔ)音識(shí)別模型。在Edge Impulse Studio上訓(xùn)練模型類(lèi)似于在其他機(jī)器學(xué)習(xí)框架上訓(xùn)練機(jī)器學(xué)習(xí)模型。對(duì)于訓(xùn)練,機(jī)器學(xué)習(xí)模型的第一步是收集一個(gè)數(shù)據(jù)集,該數(shù)據(jù)集包含我們希望能夠識(shí)別的數(shù)據(jù)樣本。

由于我們的目標(biāo)是使用語(yǔ)音命令控制LED,因此我們需要收集所有命令和噪聲的語(yǔ)音樣本,以便可以區(qū)分語(yǔ)音命令和其他噪聲。

我們將創(chuàng)建一個(gè)具有三個(gè)類(lèi)別的數(shù)據(jù)集:“LED ON”,“LED ON”和“noise”。要?jiǎng)?chuàng)建數(shù)據(jù)集,請(qǐng)先創(chuàng)建一個(gè)Edge Impulse帳戶,驗(yàn)證您的帳戶,然后啟動(dòng)一個(gè)新項(xiàng)目。您可以使用手機(jī)、Arduino開(kāi)發(fā)板來(lái)加載樣本,也可以將數(shù)據(jù)集導(dǎo)入到Edge Impulse帳戶中。將樣本加載到您的帳戶中最簡(jiǎn)單的方法是使用手機(jī)。為此,將手機(jī)與Edge Impulse連接。

要連接手機(jī),請(qǐng)單擊“Devices”,然后單擊“Connect a New Device”。

這樣會(huì)將您的手機(jī)與Edge Impulse Studio連接。


通過(guò)將手機(jī)與Edge Impulse Studio連接,您現(xiàn)在可以加載樣本。要加載樣本,請(qǐng)點(diǎn)擊“Data acquisition”?,F(xiàn)在,在“Data acquisition”頁(yè)面上,輸入標(biāo)簽名稱,選擇麥克風(fēng)作為傳感器,然后輸入采樣長(zhǎng)度。點(diǎn)擊“Start sampling”,您的設(shè)備將捕獲一個(gè)2秒的采樣。在不同條件下總共記錄10到12個(gè)語(yǔ)音樣本。

在上傳樣本后,現(xiàn)在設(shè)置更改標(biāo)簽并收集“l(fā)ight off’”和“noise”的樣本。

這些樣本用于培訓(xùn)模塊,在接下來(lái)的步驟中,我們將收集測(cè)試數(shù)據(jù)。測(cè)試數(shù)據(jù)至少應(yīng)為訓(xùn)練數(shù)據(jù)的30%,因此請(qǐng)收集4個(gè)“noise”樣本和4至5個(gè)“l(fā)ight on”和“l(fā)ight off”樣本。

訓(xùn)練模型

準(zhǔn)備好數(shù)據(jù)集后,現(xiàn)在我們可以為數(shù)據(jù)創(chuàng)建一個(gè)Impulse。為此,請(qǐng)轉(zhuǎn)到“Create impulse”頁(yè)面。將窗口大小1000 ms的默認(rèn)設(shè)置更改為1200ms,將500 ms窗口增加到50ms。這意味著我們的數(shù)據(jù)將在每次58 ms的時(shí)間內(nèi)一次處理1.2 s。

現(xiàn)在,在“Create impulse”頁(yè)面上,單擊“Add a processing block”。在下一個(gè)窗口中,選擇Audio(MFCC)塊。之后,點(diǎn)擊“Add a learning block”,然后選擇Neural Network (Keras) 模塊。然后點(diǎn)擊“Save Impulse”。

在下一步中,轉(zhuǎn)到MFCC頁(yè)面,然后單擊“Generate Features”。它將為我們所有的音頻窗口生成MFCC塊。

之后,轉(zhuǎn)到“ NN Classifier”頁(yè)面,然后單擊“Neural Network settings”右上角的三個(gè)點(diǎn),然后選擇“Switch to Keras (expert) mode”。

將原始代碼替換為以下代碼,并將“最Minimum confidence rating”更改為“ 0.70”。然后點(diǎn)擊“Start training”按鈕。它將開(kāi)始訓(xùn)練您的模型。

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)

訓(xùn)練模型后,它將顯示訓(xùn)練效果。本文中,精度為81.1%,損耗為0.45,這不是理想的,但我們可以繼續(xù)進(jìn)行。您可以通過(guò)創(chuàng)建龐大的數(shù)據(jù)集來(lái)提高模型的性能。

現(xiàn)在,當(dāng)我們的語(yǔ)音識(shí)別模型準(zhǔn)備就緒時(shí),我們將把該模型部署為Arduino庫(kù)。在將模型下載為庫(kù)之前,您可以轉(zhuǎn)到“Live Classification”頁(yè)面來(lái)測(cè)試性能。Live Classification功能使您既可以使用數(shù)據(jù)集附帶的現(xiàn)有測(cè)試數(shù)據(jù),也可以通過(guò)流式傳輸手機(jī)中的音頻數(shù)據(jù)來(lái)測(cè)試模型。

要使用手機(jī)測(cè)試數(shù)據(jù),請(qǐng)?jiān)谑謾C(jī)上選擇“Switch to Classification Mode”。

現(xiàn)在要將模型下載為Arduino庫(kù),請(qǐng)轉(zhuǎn)到“Deployment”頁(yè)面,然后選擇“ Arduino庫(kù)”?,F(xiàn)在向下滾動(dòng)并點(diǎn)擊“Build”。這將為您的項(xiàng)目制作一個(gè)Arduino庫(kù)。

現(xiàn)在,在您的Arduino IDE中添加該庫(kù)。請(qǐng)打開(kāi)Arduino IDE,然后單擊Sketch> Include Library> Add.ZIP library。然后,轉(zhuǎn)到File > Examples > Your project name - Edge Impulse > nano_ble33_sense_microphone加載示例。

用于Arduino語(yǔ)音識(shí)別的代碼

我們?cè)趘oid loop()函數(shù)中進(jìn)行一些更改,在該處打印命令的概率。在原始代碼中,它將所有標(biāo)簽及其值一起打印。

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,我們必須將所有命令概率保存在三個(gè)不同的變量中,以便我們可以在它們上放置條件語(yǔ)句。因此,根據(jù)新代碼,如果“l(fā)ight on”命令的概率大于0.50,則它將打開(kāi)LED;如果“l(fā)ight off’”命令的概率大于0.50,則它將關(guān)閉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);

}

進(jìn)行更改后,將代碼上傳到Arduino。以115200波特率打開(kāi)串口監(jiān)視器。

以上就是您可以使用Arduino構(gòu)建語(yǔ)音識(shí)別并發(fā)出命令以操作設(shè)備的方式。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23339

    瀏覽量

    662265
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8437

    瀏覽量

    132892
  • 語(yǔ)音控制
    +關(guān)注

    關(guān)注

    5

    文章

    484

    瀏覽量

    28274
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6477

    瀏覽量

    187555
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用Arduino和藍(lán)牙的語(yǔ)音控制LED

    使用語(yǔ)音命令控制 LED 似乎是一項(xiàng)艱巨的任務(wù),但它很容易,您可以快速構(gòu)建它。我們只需要一個(gè)Arduino UNO與HC-06藍(lán)牙模塊串行通信,智能手機(jī)就可以向藍(lán)牙模塊HC-06發(fā)送語(yǔ)音
    的頭像 發(fā)表于 11-15 16:43 ?5820次閱讀
    如何使用<b class='flag-5'>Arduino</b>和藍(lán)牙的<b class='flag-5'>語(yǔ)音</b><b class='flag-5'>控制</b>LED

    語(yǔ)音控制模塊怎么和定時(shí)相連,最后通過(guò)arduino板子控制步進(jìn)電機(jī)驅(qū)動(dòng)。

    首先,要通過(guò)語(yǔ)音模塊控制定時(shí)器定時(shí),定時(shí)時(shí)間到了之后給arduino一個(gè)信號(hào),arduino控制
    發(fā)表于 06-13 13:40

    語(yǔ)音合成芯片與語(yǔ)音芯片對(duì)比

    )的轉(zhuǎn)換。其特性是:支持任意中文文本的合成,對(duì)常見(jiàn)的數(shù)值、電話號(hào)碼、時(shí)間日期、度量衡符號(hào)等格式的文本具有文本智能分析處理功能;只需要上位機(jī)通過(guò)串行通信對(duì)其發(fā)送一段
    發(fā)表于 03-08 17:26

    語(yǔ)音合成芯片與語(yǔ)音芯片對(duì)比

    )的轉(zhuǎn)換。其特性是:支持任意中文文本的合成,對(duì)常見(jiàn)的數(shù)值、電話號(hào)碼、時(shí)間日期、度量衡符號(hào)等格式的文本具有文本智能分析處理功能;只需要上位機(jī)通過(guò)串行通信對(duì)其發(fā)送一段
    發(fā)表于 03-11 15:39

    如何在Python中將語(yǔ)音轉(zhuǎn)換文本

      語(yǔ)音識(shí)別是計(jì)算機(jī)軟件識(shí)別口語(yǔ)中的單詞和短語(yǔ),并將其轉(zhuǎn)換為可讀文本的能力。那么如何在Python中將語(yǔ)音轉(zhuǎn)換
    發(fā)表于 07-29 18:12

    基于Arduino UNO控制板的語(yǔ)音播放設(shè)計(jì)

    案例主控板如不做特殊說(shuō)明的話,均默認(rèn)是Arduino UNO控制板。本次實(shí)驗(yàn)以UNO發(fā)送串口協(xié)議控制語(yǔ)音播放播放歌曲,
    發(fā)表于 07-30 08:06

    arduino如何控制JQ***P語(yǔ)音模塊

    首先要感謝stm32通過(guò) 一線串口通信控制JQ***P語(yǔ)音模塊的作者我就是根據(jù)這位博主的代碼改寫(xiě)的,但是碰到了意想不到的問(wèn)題。其實(shí)代碼是寫(xiě)對(duì)了,語(yǔ)音模塊是單獨(dú)供電,這個(gè)供電的地要和arduin
    發(fā)表于 01-07 08:09

    利用語(yǔ)音識(shí)別模塊與arduino UNO測(cè)試一個(gè)簡(jiǎn)單的語(yǔ)音控制亮滅的程序

    文章目錄簡(jiǎn)述器件代碼部分測(cè)試結(jié)果總結(jié)簡(jiǎn)述這里利用語(yǔ)音識(shí)別模塊與arduino UNO 測(cè)試一個(gè)簡(jiǎn)單的語(yǔ)音控制亮滅的程序。希望能給我一樣的
    發(fā)表于 02-15 07:03

    基于語(yǔ)音識(shí)別做一款能識(shí)別語(yǔ)音的App

    最近做了一款語(yǔ)音識(shí)別的App,想著利用手機(jī)控制arduino實(shí)現(xiàn)RGB的調(diào)節(jié),開(kāi)發(fā)思路:基于訊飛語(yǔ)音識(shí)別做一款能識(shí)別我們語(yǔ)音的App,識(shí)別出
    發(fā)表于 03-01 07:05

    使用RTS0072B的語(yǔ)音轉(zhuǎn)換器電路圖

    語(yǔ)音轉(zhuǎn)換器電路電子項(xiàng)目是使用該RTS0072B設(shè)計(jì)的。 RTS0072B語(yǔ)音轉(zhuǎn)換器電路必須由直流電源電路供電,該電路將提供 3 到 5 伏之間的固定輸出電壓 。 RTS0072B單芯
    發(fā)表于 09-11 16:03

    Arduino語(yǔ)音控制智能家居

    電子發(fā)燒友網(wǎng)站提供《Arduino語(yǔ)音控制智能家居.zip》資料免費(fèi)下載
    發(fā)表于 11-07 15:18 ?4次下載
    <b class='flag-5'>Arduino</b><b class='flag-5'>語(yǔ)音</b><b class='flag-5'>控制</b>智能家居

    使用BoltIot的語(yǔ)音控制LED

    電子發(fā)燒友網(wǎng)站提供《使用BoltIot的語(yǔ)音控制LED.zip》資料免費(fèi)下載
    發(fā)表于 12-19 11:35 ?0次下載
    使用BoltIot的<b class='flag-5'>語(yǔ)音</b><b class='flag-5'>控制</b>LED<b class='flag-5'>燈</b>

    Arduino帶藍(lán)牙和語(yǔ)音的家庭控制

    電子發(fā)燒友網(wǎng)站提供《Arduino帶藍(lán)牙和語(yǔ)音的家庭控制.zip》資料免費(fèi)下載
    發(fā)表于 12-22 16:28 ?0次下載
    <b class='flag-5'>Arduino</b>帶藍(lán)牙和<b class='flag-5'>語(yǔ)音</b>的家庭<b class='flag-5'>控制</b>

    語(yǔ)音識(shí)別芯片在氛圍控制器上的應(yīng)用

    普通的氛圍控制器主要是通過(guò)遙控來(lái)控制氛圍開(kāi)關(guān),沒(méi)有辦法實(shí)現(xiàn)語(yǔ)音聲控,而使用智能
    的頭像 發(fā)表于 04-25 17:10 ?1127次閱讀
    <b class='flag-5'>語(yǔ)音</b>識(shí)別芯片在氛圍<b class='flag-5'>燈</b><b class='flag-5'>控制器</b>上的應(yīng)用

    智能語(yǔ)音落地:離線語(yǔ)音控制技術(shù)的優(yōu)勢(shì)與應(yīng)用

    離線語(yǔ)音控制技術(shù)還使得智能語(yǔ)音落地的亮度可以自由調(diào)節(jié)。根據(jù)不同的場(chǎng)景和需求,用戶可以通過(guò)語(yǔ)音指令對(duì)
    的頭像 發(fā)表于 07-13 15:55 ?1123次閱讀
    智能<b class='flag-5'>語(yǔ)音</b>落地<b class='flag-5'>燈</b>:離線<b class='flag-5'>語(yǔ)音</b><b class='flag-5'>控制</b>技術(shù)的優(yōu)勢(shì)與應(yīng)用