當前位置:
首頁 > 科技 > 在「樹莓派」上玩兒轉語音識別,就這麼簡單!

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

作者:Digi-Key"s North American Editors

語音助理已經迅速成為一個重要的產品功能,這要歸功於流行的基於智能語音的產品,例如Amazon Echo和Google Home。雖然語音服務提供商為開發人員提供了應用程序編程介面 (API) 支持——因此他們不必成為語音識別和解析細節方面的專家——但是將音頻硬體和語音處理軟體相結合的要求仍然是一個重大障礙。

此外,在與每個學科相關的細節工作中,在聲學設計、音頻工程、基於雲的服務方面缺乏豐富經驗的項目,可能會面臨嚴重延遲的問題。

為了解決這些問題,供應商提供了完整的語音助理開發套件,以求顯著簡化問題。本文將分別介紹兩種此類套件,一個套件來自XMOS,另一個套件來自Seeed Technology,它們分別實現了基於Amazon Alexa語音服務 (AVS) 和Google Assistant的定製產品的快速開發。這些電路板可與Raspberry Foundation的Raspberry Pi 3 (RPi 3)電路板連接。

本文將介紹如何讓每個套件投入運行,並展示每個套件如何隨時利用語音助理技術。

快速搭建AVS原型

Amazon公司推出了Alexa智能音箱,這是一款面向家庭的產品,提供智能語音助理功能,但過去這些功能在很大程度上僅限於智能手機。對於開發人員來說,AVS API的發布為在定製系統設計中使用相同的語音助理功能打開了大門,但其仍然需要音頻硬體和軟體方面的豐富專業知識。現在,隨著適用於Amazon Alexa語音服務 (AVS) 的XMOS xCORE VocalFusion 4-Mic 套件的推出,實施語音助理功能的最後一個難題也迎刃而解。

XMOS套件包括一個XVF3000處理器基板、由四個Infineon IM69D130 MEMS麥克風組成的100mm線性陣列、xTAG調試器、安裝套件和電纜。開發人員需要為RPi 3提供有源揚聲器、USB電源,以及USB鍵盤、滑鼠、監視器和互聯網連接。在使用安裝套件將XMOS板和麥克風陣列連接到RPi 3之後,開發人員可以快速評估Amazon Alexa語音助理(圖1)。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖1:開發人員使用XMOS xCORE VocalFusion套件開始工作,將提供的麥克風陣列板(最左側)和XMOS處理器板(中間)插入Raspberry Pi 3板(右側)。(圖片來源:XMOS)

將RPi 3連接到USB鍵盤、滑鼠、監視器和互聯網服務之後,下一步驟是從SD微型卡安裝Raspbian操作系統,在RPi 3上打開端子,並克隆XMOS VocalFusion 存儲庫。安裝操作系統和存儲庫之後,只需運行位於克隆的vocalfusion-avs-setup目錄下的auto_install.sh。

安裝腳本將配置Raspberry Pi音頻系統及其與xCORE VocalFusion套件的連接,並在Raspberry Pi上安裝和配置AVS Device SDK。這個安裝過程可能需要大約兩個小時完成。

安裝完成後,開發人員需要執行一個簡單的過程來載入他們的Amazon開發人員憑據,然後開始測試大量的語音命令和內置功能。此時,XMOS套件將能夠演示Alexa的全套功能,如定時器、鬧鐘和日曆,以及使用Alexa Skills套件構建的第三方功能。

AVS設計套件揭秘

雖然設置步驟簡單,但XMOS套件中的硬體和軟體組件的功能卻非常複雜。該套件為開發人員提供了實現定製設計的全面參考設計。XMOS套件的核心是XMOS XVF3000TQ128器件,它提供了很高的處理能力(圖2)。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖2:XMOS XVF3000-TQ128器件集成了兩個xCORE Tile,每個Tile包含八個內核,以提供高性能音頻處理。(圖片來源:XMOS)

該器件專為並行處理任務而構建,包含兩個xCORE Tile,每個Tile包含八個帶集成I/O的32位xCORE內核、256KB的SRAM、8KB的一次性可編程(OTP)片上存儲器。xTIME調度程序管理內核,並觸發來自I/O引腳的硬體事件的內核操作。每個內核都可以獨立執行計算、信號處理或控制任務,利用了xCORE VocalFusion套件中的集成式2MB快閃記憶體,以及用於套件設置和執行的代碼和數據。

除了XVF3000-TQ128器件之外,XMOS處理器基板還需要少量的附加組件(圖3)。除了基本的緩衝器和針座連接外,基板還包括Cirrus Logic CS43L21數模轉換器(DAC),用於為外部揚聲器生成輸出音頻。最後,底板還引出了XVF3000-TQ128器件I2C埠,以及經過音頻優化的I2S數字音頻介面。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖3:XMOS套件的基板包括XVF3000-TQ128器件、DAC、緩衝器,以及用於連接Raspberry Pi 3板和外部揚聲器的針座。(圖片來源:XMOS)

該套件的整體功能分為兩個部分:XMOS板上的音頻處理、RPi 3上的高級語音處理服務(圖4)。RPi的Broadcom四核處理器運行軟體,該軟體用於分析音頻流,進行喚醒詞識別,並且處理與Amazon AVS的交互。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖4: XMOS VocalFusion套件將基板和Raspberry Pi 3板上的Alexa功能分開,前者用於音頻信號處理,後者用於語音識別和更高級別的Alexa服務。(圖片來源:XMOS)

軟體安裝過程配置這些子系統並載入所需的軟體包,包括Sensory的獨立於揚聲器的喚醒詞引擎,以及AVS客戶端軟體等。

AVS提供了一系列與高級功能(如語音識別、音頻回放和音量控制)相關的介面。操作通過來自AVS的消息(指令)和來自客戶端的消息(事件)進行。例如,為了響應某些條件,AVS可能會向客戶端發送指示,指示客戶端應播放音頻、設置鬧鐘或打開燈光。相反,來自客戶端的事件可通知AVS發生了某些事件,例如來自用戶的新語音請求。

開發人員可以使用AVS 器件軟體開發套件 (SDK) API和C++軟體庫來擴展其XMOS套件或XMOS定製設計的功能。AVS Device SDK通過一系列單獨的C++類和對象,提取出低級別操作,如音頻輸入處理、通信和AVS指令管理,開發人員可以使用或擴展它們,用於定製應用程序(圖5)。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖5: Amazon AVS Device SDK將AVS的廣泛功能組織為單獨的功能區域,每個功能區域都有自己的介面和庫。(圖片來源:AWS)

包含在AVS Device SDK中的完整樣例應用程序展示了關鍵設計模式,包括創建設備客戶端和喚醒詞交互管理器(列表1)除了全套的樣例服務常式之外,該應用還顯示了主程序如何只需要實例化樣例應用程序對象sampleApplication,並使用一個簡單的命令來啟動它:sampleApplication->run.

/*

* Creating the DefaultClient - this component serves as an out-of-box default object that instantiates and "glues"

* together all the modules.

*/

std::shared_ptr<alexaClientSDK::defaultClient::DefaultClient> client =

alexaClientSDK::defaultClient::DefaultClient::create(

m_speakMediaPlayer,

m_audioMediaPlayer,

m_alertsMediaPlayer,

speakSpeaker,

audioSpeaker,

alertsSpeaker,

audioFactory,

authDelegate,

alertStorage,

settingsStorage,

{userInterfaceManager},

{connectionObserver, userInterfaceManager});

...

// If wake word is enabled, then creating the interaction manager with a wake word audio provider.

auto interactionManager = std::make_shared<alexaClientSDK::sampleApp::InteractionManager>(

client,

micWrapper,

userInterfaceManager,

holdToTalkAudioProvider,

tapToTalkAudioProvider,

wakeWordAudioProvider);

...

client->addAlexaDialogStateObserver(interactionManager);

// Creating the input observer.

m_userInputManager = alexaClientSDK::sampleApp::UserInputManager::create(interactionManager);

...

void SampleApplication::run {

m_userInputManager->run;

}

列表1: 開發人員可以使用AVS Device SDK C++樣例應用程序來擴展設備AVS客戶端,AVS Device SDK C++樣例應用程序演示了用於創建AVS客戶端、喚醒詞交互管理器和用戶輸入管理器等的關鍵設計模式。(列表來源:AWS)

Google Assistant快速原型開發

XMOS套件可加快Amazon Alexa原型的開發速度,Seeed Technology的Google AIY 語音套件可幫助開發人員使用Google Assistant構建原型。與XMOS AVS套件相同,Seeed Google AIY語音套件可與Raspberry Pi 3板配合使用來構建原型,並提供必要的組件(圖6)。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖6: 開發人員可將Raspberry Pi 3與Seeed Technology的Google AIY語音套件配合使用(它提供了構建原型所需的組件),從而快速創建Google Assistant應用。(圖片來源:Google)

除了圖6中所示Seeed Voice HAT擴展板 (1)、麥克風板 (2) 和揚聲器 (4) 之外,套件還包括紙板外殼 (8) 和內部框架 (9),以及一些基本組件,包括支座 (3)、電纜(6 和 7)和按鈕 (5)。

開發人員首先將RPi 3、揚聲器電線、麥克風電纜連接到語音HAT,然後組裝套件。 AVS套件不同,Google套件提供了一個簡單的外殼和內部框架,用於固定電路板組件和揚聲器(圖7)。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖7:Seeed Google AIY語音套件包括一個內部紙板框架,開發人員將其摺疊成為電路板組件的載體。(圖片來源: Seeed Technology)

框架安裝在支撐按鈕和麥克風陣列的外殼內,完成裝配(圖8)。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖8:除了固定內部框架和揚聲器之外,Seey Google AIY語音套件的外殼還包括按鈕和麥克風(看起來像外殼頂部的兩個孔)。(圖片來源:Seeed Technology)

下載語音套件鏡像並將其載入SD卡中後,只需將SD卡插入RPi並打開電路板電源,即可調出套件。經過短暫的初始化過程以確認每個組件正常工作之後,開發人員需要激活Google Cloud端的服務。為此,請設置工作沙箱區域並啟用Google Assistant API,以創建和下載身份驗證憑據。

最後,開發人員需要在RPi 3上打開一個終端控制台並執行Python腳本assistant_library_demo.py,以便在套件上啟動Google Assistant。此時,開發人員可以毫不費力地使用完整的Google Assistant功能。

定製化的Google Assistant開發

使用Seeed Google AIY語音套件進行自定義開發,可以充分利用Raspberry Pi的靈活性。Seeed Voice HAT引出了多個已經為典型IO功能配置的RPi 3 GPIO(圖9)。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖9:開發人員可以使用Seeed Voice HAT擴展板上引出的I/O埠,快速擴展Seeed Google AIY語音套件的硬體功能。(圖片來源:Raspberry Pi)

在軟體方面,開發人員可以使用Google的語音套件 API軟體,輕鬆擴展套件的基準功能。除了支持軟體和實用程序之外,該軟體包還包含樣例應用程序軟體,演示了通過 Google Cloud Speech API和Google Assistant SDK實施語音服務的多種方法。

雲語音服務與智能助理方法截然不同,它提供了語音識別功能,將實現特定語音啟動操作的任務留給了程序員。對於只需要語音輸入功能的設計,該服務提供了一個簡單的解決方案。開發人員只需將音頻傳遞到雲語音服務,即可將語音轉換為文本,並返回識別的文本,如語音套件API中包含的樣例Python腳本所示(列表2)。

...

import aiy.audio

import aiy.cloudspeech

import aiy.voicehat

def main:

recognizer = aiy.cloudspeech.get_recognizer

recognizer.expect_phrase("turn off the light")

recognizer.expect_phrase("turn on the light")

recognizer.expect_phrase("blink")

button = aiy.voicehat.get_button

led = aiy.voicehat.get_led

aiy.audio.get_recorder.start

while True:

print("Press the button and speak")

button.wait_for_press

print("Listening...")

text = recognizer.recognize

if not text:

print("Sorry, I did not hear you.")

else:

print("You said "", text, """)

if "turn on the light" in text:

led.set_state(aiy.voicehat.LED.ON)

elif "turn off the light" in text:

led.set_state(aiy.voicehat.LED.OFF)

elif "blink" in text:

led.set_state(aiy.voicehat.LED.BLINK)

elif "goodbye" in text:

break

if __name__ == "__main__":

main

列表2: 在Google語音套件API提供的軟體常式中,樣常式序的這個片段演示了如何使用Google Cloud Speech服務,將語音轉換為文本,並將實現任何語音指導操作的任務留給了程序員。(列表來源:Google)

對於需要Google Assistant的更廣泛功能的開發人員,Google Assistant SDK提供了兩個實施選項:Google Assistant Library和Google Assistant Service。

基於Python的Google Assistant Library提供了一種在原型中快速實施Google Assistant的入門方法,例如在Seeed語音套件中。使用這種方法,原型可以即時利用基本的Google Assistant服務,包括音頻捕獲、對話管理和定時器。

與Cloud Speech方法相反,Google Assistant Library通過將每個對話處理為一系列與對話和發聲狀態相關的事件來管理對話。語音識別完成後,實例化的助理對象將提供事件對象,其中包括了適當的處理結果。如另一個Google樣例腳本所示,開發人員使用特徵事件處理設計模式和一系列的if/else語句來處理預期的事件結果(列表3)。

...

import aiy.assistant.auth_helpers

from google.assistant.library import Assistant

from google.assistant.library.event import EventType

def power_off_pi:

aiy.audio.say("Good bye!")

subprocess.call("sudo shutdown now", shell=True)

def reboot_pi:

aiy.audio.say("See you in a bit!")

subprocess.call("sudo reboot", shell=True)

def say_ip:

ip_address = subprocess.check_output("hostname -I | cut -d" " -f1", shell=True)

aiy.audio.say("My IP address is %s" % ip_address.decode("utf-8"))

def process_event(assistant, event):

status_ui = aiy.voicehat.get_status_ui

if event.type == EventType.ON_START_FINISHED:

status_ui.status("ready")

if sys.stdout.isatty:

print("Say "OK, Google" then speak, or press Ctrl+C to quit...")

elif event.type == EventType.ON_CONVERSATION_TURN_STARTED:

status_ui.status("listening")

elif event.type == EventType.ON_RECOGNIZING_SPEECH_FINISHED and event.args:

print("You said:", event.args["text"])

text = event.args["text"].lower

if text == "power off":

assistant.stop_conversation

power_off_pi

elif text == "reboot":

assistant.stop_conversation

reboot_pi

elif text == "ip address":

assistant.stop_conversation

say_ip

elif event.type == EventType.ON_END_OF_UTTERANCE:

status_ui.status("thinking")

elif event.type == EventType.ON_CONVERSATION_TURN_FINISHED:

credentials = aiy.assistant.auth_helpers.get_assistant_credentials

with Assistant(credentials) as assistant:

for event in assistant.start:

process_event(assistant, event)

列表3: 如Google Voice套件中的樣例所示,使用Google Assistant Library的應用程序中的主循環啟動一個助理對象,然後生成一系列事件,由開發人員的代碼處理。(圖片來源:Google)

對於要求更高的定製需求,開發人員可以轉向使用Google Assistant Service(以前稱為 Google Assistant gRPC API)提供的全套介面。Google Assistant Service基於Google RPC(gRPC),讓開發人員能夠將音頻查詢傳送到雲端,處理識別的語音文本,並且處理相應的響應。為了實現定製功能,開發人員可以使用各種編程語言(包括 C++、Node.js 和 Java)來訪問 Google Assistant Service API。

在將Google Assistant SDK用於自己的設計時,設計人員可以使用Google的器件匹配功能,實現特定於硬體的功能。作為器件設置的一部分,開發人員提供關於定製器件的信息,包括功能和特性,稱為特質。對於涉及到定製器件的用戶語音請求,服務會識別器件的有效特質,並為器件生成適當的響應(圖10)。開發人員只需在器件的事件處理程序中包括與器件特質相關的對應代碼(例如列表3中的def power_off_pi())。

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

圖10:Google Assistant SDK使用自動語音識別 (ASR) 和自然語言處理 (NLP) 服務,將用戶請求與特定設備進行匹配,並發出與定製設備及其認可特質一致的響應。(圖片來源:Google)

總結

過去,智能語音助理在很大程度上是主流開發人員無法實現的。隨著兩個現成套件的推出,開發人員可以在定製設計中快速實施Amazon Alexa和Google Assistant。每個套件都允許開發人員在基本原型中快速調用相應的智能助理,或者使用定製的硬體和軟體來擴展設計。

原文:https://www.digikey.com.cn/zh/articles/techzone/2018/feb/rapid-prototyping-smart-voice-assistant-raspberry-pi

在「樹莓派」上玩兒轉語音識別,就這麼簡單!

喜歡Digi-Key的文章嗎?立即到Digi-Key官網,或關注Digi-Key官方微信吧!

關於電子創新網電子創新網及時發布有關創新設計的最新全球半導體產業信息、半導體供應商最新動態、展會研討會信息、技術趨勢信息以及人物訪談等相關新聞,關注公眾號獲取更多資訊。

歡迎關注年度技術盛會點擊閱讀原文鏈接了解更多信息

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 電子創新設計 的精彩文章:

世強元件電商代理愛普生 年業績複合增長率201%
Vishay全新直接水冷繞線電阻系列可節省空間並提高可靠性

TAG:電子創新設計 |