語音識(shí)別在樹莓派語音控制家庭自動(dòng)化
“Ok 谷歌做我的家庭作業(yè)”——如果這個(gè)命令有效,我們的童年將會(huì)很簡單,不是嗎?但是有些事情是要我們自己來做的,當(dāng)然,我們不會(huì)設(shè)計(jì)一些東西來幫你完成作業(yè)。然而,我們都承認(rèn)用語音指令做事很有趣!!這就是為什么我們已經(jīng)建立了語音控制的家庭自動(dòng)化項(xiàng)目,如使用Arduino的Alexa控制的家庭自動(dòng)化和使用ESP32的谷歌助理家庭自動(dòng)化。
所以,在這個(gè)項(xiàng)目中,我們將建立一個(gè)基于樹莓派的語音控制家庭自動(dòng)化系統(tǒng),它可以根據(jù)我們的語音命令來監(jiān)聽、響應(yīng)和控制交流負(fù)載。我們已經(jīng)直接在樹莓派上進(jìn)行了語音識(shí)別,所以我們可以直接將麥克風(fēng)連接到樹莓派上并對(duì)著它說話。這就避免了對(duì)手機(jī)等外部設(shè)備的需求。此外,該系統(tǒng)可以一直保持開啟狀態(tài),等待特定的語音命令。在這里,我們已經(jīng)編程Pi響應(yīng)關(guān)鍵字“hello”之后,我們可以控制我們的燈打開或關(guān)閉。您還可以在此處查看其他基于物聯(lián)網(wǎng)的家庭自動(dòng)化項(xiàng)目。
首先,谷歌或其他語音助手是如何理解我們的話語并做出回應(yīng)的?首先,當(dāng)你說話時(shí),你在空氣中制造振動(dòng)。這種能量通過麥克風(fēng)轉(zhuǎn)換成電信號(hào),這種電信號(hào)是模擬信號(hào),如果直接給計(jì)算機(jī),它就不能理解,因?yàn)橛?jì)算機(jī)只能理解數(shù)字信號(hào)。因此,我們必須使用模數(shù)轉(zhuǎn)換器(a /D轉(zhuǎn)換器)將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。然后,它過濾數(shù)字化的聲音信號(hào),去除噪音,并使用復(fù)雜的自然語言處理系統(tǒng)。最后,根據(jù)算法在系統(tǒng)中運(yùn)行,得出最優(yōu)輸出。在我們的項(xiàng)目中,我們將在樹莓派上使用谷歌語音API,它利用機(jī)器學(xué)習(xí)算法將我們的語音轉(zhuǎn)換為文本,然后我們將使用Espeak將文本轉(zhuǎn)換為語音,以便我們的Pi響應(yīng)我們的命令。
組件的要求
?覆盆子π
?麥克風(fēng)
?揚(yáng)聲器
?繼電器
?跳線
語音控制家庭自動(dòng)化電路圖
我們使用3.5 mm插孔公連接器連接揚(yáng)聲器和USB麥克風(fēng)連接樹莓派。燈泡與繼電器模塊的連接很簡單,燈泡的一端連接到交流電源(中性),交流電源的相位連接到繼電器的“NO”。繼電器的公共端子連接到燈泡的另一個(gè)端子。
在這個(gè)項(xiàng)目中用于構(gòu)建上述電路的組件如下圖所示。
USB麥克風(fēng)
有不同類型的麥克風(fēng),即動(dòng)態(tài),帶狀,電容,晶體,駐極體電容等。當(dāng)聲波撞擊隔膜時(shí),它來回移動(dòng),導(dǎo)致兩個(gè)平行板之間的距離發(fā)生變化。當(dāng)電容器之間的距離增大/減小時(shí),電容減小/增大,可以看到電流的變化。這些電流的變化與輸入(聲波)成正比。這些電流被允許流向串聯(lián)連接的電阻器,輸出與電阻器并聯(lián)收集。
在我們的項(xiàng)目中,我們使用的USB麥克風(fēng)可以進(jìn)行這種(A/D)精確操作,并且它還具有內(nèi)置放大器,因此無需使用外部前置放大器電路。因此,通過使用USB麥克風(fēng),我們可以直接將它與計(jì)算機(jī)連接,在我們的例子中,與樹莓派連接。
連接USB麥克風(fēng)與樹莓派
我們需要找到麥克風(fēng)是否連接到樹莓派。在lx終端上使用以下命令進(jìn)行檢查。
輸入命令,您將看到以下對(duì)話框。
從那里,通過控制方向鍵(向上/向下方向鍵)訪問UI。使用F6從給定列表中選擇麥克風(fēng),并使用方向鍵設(shè)置錄音音量。
要測試麥克風(fēng),請(qǐng)使用lx端子并記錄您的剪輯。使用以下命令開始錄音。記錄將保存在test.wav文件中。
要播放test.wav文件,請(qǐng)?jiān)诮K端輸入以下命令。
這樣,您可以檢查麥克風(fēng)是否連接并與樹莓派正常工作。
揚(yáng)聲器
揚(yáng)聲器的工作原理與麥克風(fēng)相同,但方向相反。麥克風(fēng)將聲波轉(zhuǎn)換為電信號(hào),而揚(yáng)聲器將電信號(hào)轉(zhuǎn)換為聲波。圓錐體、電磁線圈和永磁體是揚(yáng)聲器的主要組成部分。永磁體固定在一端,而電磁鐵可移動(dòng)。電磁鐵放在永磁體的前面。電磁鐵附著在一個(gè)由柔性材料(紙或塑料)制成的錐體上,用來放大振動(dòng)。當(dāng)電磁鐵被加電時(shí),它會(huì)被永磁體吸引或排斥。當(dāng)電磁鐵來回振動(dòng)時(shí),與其相連的錐體也會(huì)產(chǎn)生振動(dòng),從而產(chǎn)生聲音。聲音的音高取決于振動(dòng)的頻率,而音量則取決于振動(dòng)的幅度。在這里,我們將使用3.5毫米插孔引腳連接揚(yáng)聲器到我們的樹莓派。下面顯示的揚(yáng)聲器有一個(gè)AUX選項(xiàng),您可以使用任何揚(yáng)聲器與樹莓派。
樹莓派上語音識(shí)別所需的庫
在開始編碼之前,我們需要安裝一些庫來簡化編碼。Espeak庫用于在樹莓派上將文本轉(zhuǎn)換為語音,speech Recognition庫用于在樹莓派上執(zhí)行語音到文本。PyAudio庫需要從USB麥克風(fēng)獲取數(shù)據(jù)。下面的命令用于下載必要的庫。
使用以下命令測試espeak。如果安裝正確,你會(huì)聽到“hello world”。
樹莓派語音識(shí)別程序
完整的語音識(shí)別程序與Pi可以找到在本頁的底部,一個(gè)解釋的代碼如下。我們首先導(dǎo)入語音識(shí)別模塊和其他需要的模塊,這些模塊用于將語音轉(zhuǎn)換為文本和將文本轉(zhuǎn)換為語音。在導(dǎo)入這些模塊之后,我們必須導(dǎo)入GPIO模塊,它控制樹莓派的引腳。
下面給出的代碼是一個(gè)函數(shù),它處理我們所說的短語的聽力。這個(gè)程序一直等待,直到用戶輸入(語音)。當(dāng)用戶說某事時(shí),它將該信息存儲(chǔ)在“audio”變量中并返回該信息。
下面的代碼是一個(gè)接受audio1變量的函數(shù)。它使用谷歌語音API識(shí)別我們的聲音,然后在屏幕上以字符串格式打印我們的語音。
在main函數(shù)中編寫的代碼用于處理短語的收聽,然后使用語音到文本模塊將其轉(zhuǎn)換為文本,然后使用Espeak給出反饋。
下面給出的if和elseif條件用于檢查文本變量中的字符串是“ light on ”還是“ light off ”。如果文本變量中的字符串是亮的,那么If函數(shù)就滿足了。
if函數(shù)內(nèi)的代碼用于將高值發(fā)送到引腳名稱led (pin 27)。在將高值發(fā)送到引腳后,我們使用espeak將文本轉(zhuǎn)換為語音,這被用作反饋。如果文本變量內(nèi)的字符串為off,則If條件不滿足,導(dǎo)致程序檢查elseif條件。如果滿足了elseif條件(如果變量“ text ”中的字符串被刪除),程序?qū)⑦M(jìn)入在elseif條件中編寫的代碼。elseif函數(shù)內(nèi)部的代碼用于向名為led (pin 27)的引腳發(fā)送低值。該引腳連接到繼電器以控制任何所需的交流負(fù)載,類似于我們?cè)贐lynk家庭自動(dòng)化和Adafruit IO家庭自動(dòng)化項(xiàng)目中所做的。
下面給出的代碼是首先運(yùn)行的代碼。當(dāng)python解釋器運(yùn)行模塊時(shí),它將__name__變量設(shè)置為值“ __main__ ”。下面的代碼處理偵聽和比較“text”變量。下面給出的代碼充當(dāng)使主程序處于待機(jī)模式的代碼,直到樹莓派偵聽到觸發(fā)短語。當(dāng)樹莓派捕獲觸發(fā)短語時(shí),它允許程序輸入主代碼,這是在另一個(gè)名為main()的函數(shù)中定義的。
通過Pi上的語音命令控制交流負(fù)載
在空閑狀態(tài)下,樹莓派繼續(xù)檢查觸發(fā)代碼的短語。在我們的例子中,我們的觸發(fā)短語將是“hello”。我們以這樣一種方式編寫代碼:當(dāng)用戶說出觸發(fā)短語hello時(shí),它將觸發(fā)代碼的其余部分。該程序?qū)⑦M(jìn)一步運(yùn)行,它處理音頻的偵聽和執(zhí)行命令(根據(jù)它偵聽的命令打開/關(guān)閉燈)。
完整的工作過程也顯示在本頁底部的視頻中。如果用戶說出預(yù)定的短語,將滿足開/關(guān)燈的功能,并運(yùn)行內(nèi)部代碼,輸出將根據(jù)命令打開或關(guān)閉燈泡。在樹莓派執(zhí)行打開或關(guān)閉的動(dòng)作后,我們可以聽到揚(yáng)聲器以音頻形式的反饋。在聽到觸發(fā)短語之后的第一個(gè)短語時(shí),樹莓派將再次回到其初始狀態(tài)并等待觸發(fā)命令,相同的過程一次又一次地重復(fù)。通過這種方式,我們可以將使用樹莓派的語音控制系統(tǒng)添加到我們的項(xiàng)目庫中。它可能與google home mini不一樣,但擁有我們自己的語音控制設(shè)備是件好事,它甚至可以以語音的形式給出反饋。
本文編譯自iotdesignpro