2018年11月4日 星期日

模組介紹 : faya語音辨識模組


學習目標 : 認識faya語音辨識模組的功能及使用方式
學習時間 :  45min
示範模組 : (1) faya brickNano
                   (2) faya 語音辨識模組
                   (3) faya RGB LED模組
工具 : (1) 樂高積木底板 (相容)

====================功能介紹====================
faya語音辨識模組採用了ICRoute公司所開發的語音辨識晶片(LD3320),該晶片內建語音辨識DSP和一些外部電路,包含AD/DA轉換器,麥克風和音源輸出介面等等.....這顆晶片不需要外接任何的記憶體如Flash、RAM等,最大的特點在於可以針對非特定用戶的語音做辨識,不需要事先進行錄音訓練,最多可編輯50組關鍵詞,用戶可以根據場地需要,隨時編輯和更新關鍵詞內容,方便電子產品中實現聲控、人機對話功能。


感測器如上圖所示,利用左方的麥克風收音,對外溝通的腳位包含IRQ / NSS / RST / MOSI / MISO / SCK / WR,右方用了兩排的排母強化其結構穩定,訊號埠左右兩邊是相連的,除了WR埠,其左邊的排母連接WR腳位,右邊的排母連接GND,原因是因為在進行語音辨識時,WR需要接地,因此我們用一個短跳線將其連接起來,如此可以減少一條單心線。

本晶片所提供的Arduino函式庫已經先定義好每個訊號埠所連接的腳位了,因此使用時不需要在主程式中再次定義腳位,預設腳位如下:


如果有需要重新定義腳位 (RST和NSS),請在修改函式庫內的ld3320.cpp,前幾行的地方就可以重新定義 RST 和 NSS (CS)的腳位。


使用此模組的方式非常簡單,該模組首先會將所辨識的中文語音轉成漢語拼音,然後在我們建好的關鍵詞庫內進行比對,如果結果一致,就會輸出相對應的指令。因此使用者所需要的動作就是在程式內建立漢語拼音的識別列表,做多支援50組,每組列表用標準普通話的漢語拼音(小寫),每兩個字中間要空格隔開,舉例如下 :


漢語拼音大家可以在這個網址查詢,只要輸入中文,就會列出對應的漢語拼音方式 (國音第二式):


逗號後方的編號用來代表所辨識的語音,編號可以相通,可以不連續,但是數值要小於256。以上識別列表需在setup()中完成,之後我們只要在loop()中下.read()指令,就會讀出以辨識成功的編號。


有興趣了解更多細部功能的讀者,可以參考其Datasheet

====================原理知識====================
以下解釋提供給有需要知道背後原理的人:

faya語音辨識模組的電路圖如下,LD3320晶片裡面還有MCU的GPIO腳位、MP3錄製和撥放的等功能,但為了模組的單純避免失焦,我們只把和語音辨識模組有關的腳位拉出來。



===================範例實作(1)===================
了解模組功能(原理)後,我們用以下範例來展示模組的功能:

目標:
(1) 建立語音指令控制RGB的LED燈。

接線:
(1) 電源線連接
     如下圖所示,連接的說明請看這篇文章 簡易版


(2) 訊號線連接
      RGB LED模組:
      Arduino_A3 ===>  RGB LED模組_A3
      Arduino_A2 ===>  RGB LED模組_A2
      Arduino_A1 ===>  RGB LED模組_A1


      語音辨識模組:

      Arduino_D2 ===> 語音辨識模組_IRQ
      Arduino_D4 ===> 語音辨識模組_NSS
      Arduino_D9 ===> 語音辨識模組_RST
      Arduino_D11 ==> 語音辨識模組_MOSI
      Arduino_D12 ==> 語音辨識模組_MISO
      Arduino_D13 ==> 語音辨識模組_SCK
      語音辨識模組_GND ==> 語音辨識模組_WR


範例程式:


備註:
-L32~38 : 在setup區塊內,先建立識別列表,可以到羅馬拼音查詢系統網站查詢漢語拼音。注意到我刻意把語音命令從兩個字測試到五個字,並且讓[亮紅燈]和[打開紅色燈]的語音指向同一命令。
-L43: check_b2函式用來檢查暫存器B2的狀態 (DSP是否忙碌),datasheet有提到,當電路的地流出現不穩定或較大波動時,有小機率會出現內部晶片出錯,因此需要用此函示確認是否正常運作,如出錯時,則重置晶片。

-L44 : 利用fayaVoice.Read()讀取比對到的語音命令
-L45~88 : 利用switch指令執行所比對到的語音命令,透過Arduino的RGB的腳位點亮相關的LED。三原色的配置圖如下給各位參考。


範例結果:


討論:
- 本範例的語音辨識模組無時不刻的都在收音辨識,因此很容易地把背景音也辨識進去,我們建議多增加一個實體開關和一段小程式,用來當作啟動語音辨識的功能,也就是當壓著開關的時候,才進行語音辨識,如此一來,平常時刻就不會把不想要的聲音收音辨識了。
- 經過我們的測試,由於此晶片不需要事先經過錄音訓練,因此辨識的能力如果發音太接近時,還是會有誤判的可能,因此設定辨識列表前,儘量把發音相似的語詞避開,例如[紅燈]和[黃燈]兩詞遇到誤判的機會大很多,因此可以把語音設成[紅色燈] / [點亮黃燈] 來區別。

歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================

1 則留言:

  1. 不錯, 你作的很好, 全部都參考你的, 謝謝

    回覆刪除