本篇是完全複製作者漢亞科技,原始連結:https://han-ya.blogspot.com/2021/02/ld3320-esp32.html
實驗說明
使用離線語音辨識晶片 LD3320,獲得辨識結果後透過 ESP32S 無線模組傳輸到另一塊無線模組上顯示出結果,如下圖一所示。
無線模組 ESP32
無線模組 ESP 系列是上海樂鑫所開發,經由安信可二次開發後推廣,模組提供 AT command (UART) 的方式進行控制,但這種方式使用起來總是覺得隔了一層紗,有層距離感,操控上反應或速度不夠即時。幸運的是,隨著這塊模組的生態系越來越成熟,使用者也越多了,ESP 模組已經能像 Arduino 一樣,可以在 Arduino IDE 環境下開發編譯並下載,同時不少開發者也分享各類無線模組的案例,方便我們拿來參考 [1][2]。
研究過程中,發現 ESP32S 上面的 FLASH 所屬的接腳不能直接拿來當作 GPIO 使用,因為這樣會影響到 IDE 燒錄,FLASH D0-D3 + CMD + SCK 正好對應到 GPIO 6-11,電路規劃時得避開使用這幾根 I/O。另外,這塊 ESP32S 模組有提供 3.3V 和 5V 輸出,正好 LCD_I2C 模組需要吃 5V 電壓,而語音辨識晶片吃 3.3V 電壓,能同時滿足開發的需求。
圖一:以無線傳輸語音辨識的結果 |
ESP32S 是同時具有 WiFi 和藍芽功能的模組,實驗中,我們使用模組的藍芽傳輸功能,並參考範例中的 BluetoothSerial 程式,通訊的一端代碼是 Bluetooth Master,另一端為 Bluetooth Slave,下圖二是兩邊代碼的說明。將 Slave 端設定藍芽名稱 (ESP32-ASR) 後,等待 Master 來連接,在 Master 端則對名稱 (ESP32-ASR) 發出連線請求,接著雙方就會自動連接成功。
圖二:藍芽通訊雙方的原始碼 |
離線語音辨識
LD3320 是十年前的語音辨識晶片 [3],主要辨識中文,已不是新鮮貨。它不需要連上雲端,只要設定好辨識的字句儲存到晶片的暫存器內,它就能進行離線辨識。優點是辨識過程很快,而且是不特定人的辨識方式,對於設定後的字句,其辨識準確率算不錯的 (在無噪音干擾環境下)。然而,其缺點是針對不特定語句的辨識,如果講了一段不是一開始設定給晶片的字句,晶片辨識後,通常會給出不正確的結果。比如,我們設定給晶片的字句是 "打開" "關閉"...之類,但是我們講了一句 "你好" 這類無關的字句,它可能會給出 "打開" 的結果,這可能會造成嚴重的操作。當然,現在已經有不少雲端的語音辨識服務,也許借助大公司的服務是更好的選擇。
開發 LD3320 時,我們要把欲辨識的中文語句建立成表,再寫入晶片內,如下圖所示。C++ 語法的編譯過程不可能接受中文字,所以程式碼的中文語句是以漢語拼音為基準,每個語句則對應一個 ID 編號,晶片將辨識出的結果以編號方式告知我們,例如:"二十五" 和 "二五" 都代表數值 25,那我們就會將這兩個語句定義同一個 ID 編號。
圖三:建立辨識的語句表 |
將 LD3320 驅動程式寫在 ESP32S 模組上,測試的結果錄製成底下影片,請參考。說完一句話後,辨識的結果很快地顯示在 LCD 模組上。
文章標籤
全站熱搜
留言列表