楊煥崢 楊國華 徐玲 孫慧敏
摘? 要: 綜合利用了云端和本地語音識別算法,借助百度云端語音識別大數據庫實現大量語音命令識別,和借助類似神經網絡的深度學習算法使識別準確率提高,使語音特征數據庫更新容易。結果表明,利用本地語音識別模組能準確響應特定詞匯的語音識別,該方法方便快捷;并由STM32 MCU進行邏輯判斷獲取綜合語音識別結果,提升了有效性和準確性。
關鍵詞: 百度語音識別; SYN7318; STM32F103; 嵌入式系統(tǒng); ESP32 WiFi
中圖分類號: TN 912.34? ? ? ? ? 文獻標志碼: A? ? ? ? ? 文章編號: 1671-2153(2019)01-0086-04
1? 問題提出
嵌入式設備語音識別主要有兩種,一種是在線自由交談的云端AI語音識別,另一種是執(zhí)行有限的控制命令詞本地語音模塊識別[1]。
云端語音識別的優(yōu)點:借助大數據庫可實現海量語音命令識別,借助復雜算法能使識別準確率提高,語音特征數據庫更新容易,缺點:需要借助通信網絡,響應速度慢。本地語音識別優(yōu)點:無需借助網絡,結構簡單,響應速度快,缺點:只能實現有限語音命令識別,語音特征數據庫更新麻煩。將云端和本地語音識別方式相結合,能實現:①在沒有網絡的時候使用本地語音識別,有網絡的時候借助云端支持海量語音命令識別及提高識別準確率;②如果在本地語音識別的詞語庫內存在要識別的詞語而且能較好識別,則使用本地識別結果實現快速響應;否則選取來自云端的識別結果;③在網絡數據傳輸速度不穩(wěn)定,或者發(fā)生丟包的時候,由MCU通過時間等閾值判斷自適應選擇合適的識別結果。本文研究了系統(tǒng)結構和工作流程,硬件電路設計和軟件編程,完成了樣機制作,對性能進行測試分析。相比物聯網節(jié)點MQTT通信協議,研究了百度AI語音識別平臺通過REST API方式給予的Http端口進行JSON數據流的傳輸。
2? 系統(tǒng)功能結構和工作流程
基于云端AI和本地相結合的語音識別系統(tǒng)可以很好的識別人的語音,結構包括云端AI語音識別服務器和本地綜合語音識別模組,兩者利用WiFi通信方式進行數據交互,如圖1所示。
本地綜合語音識別模組主要由SYN7318模塊、WM8978模塊、ESP32 WiFi控制器、STM32 MCU控制器[2]等組成,云端語音識別服務器采用百度語音識別云平臺。
系統(tǒng)工作過程包含以下6個步驟:①本地語音識別SYN7318模塊獲取人的語音信號進行識別,得到語音識別本地的結果,通過UART接口送入STM32 MCU控制器;②STM32 MCU控制器連接ESP32 WiFi控制器判斷是否有WiFi網絡,如果沒有網絡或網絡信號較差,則直接使用SYN7318模塊的本地語音識別結果并立即進入最后一步,如果有網絡,則轉到下一步執(zhí)行;③WM8978模塊將語音信號采集后送入ESP32 WiFi控制器,由該控制器通過WiFi通信發(fā)送語音信號至云端AI語音識別服務器,云端AI語音識別平臺識別語音信號從而得到語音識別云端的結果;④云端AI語音識別服務器將云端語音識別結果通過WiFi傳輸反饋給ESP32 WiFi控制器,并發(fā)送給STM32 MCU控制器;⑤STM32 MCU控制器將收到的本地和云端語音識別結果進行邏輯判斷以確定最終輸出的語音識別結果;⑥將選取結果輸出,最終輸出語音指令。
3? 本地語音識別功能實現
3.1? 硬件電路設計
綜合語音識別模組的本地語音識別功能模塊使用SYN7318模塊,擁有最新語音喚醒算法,能夠完成非特定人的語音識別,可以預定義1萬條語音指令。SYN7318模塊集成了音頻輸入和輸出電路,以及語音喚醒、識別、合成、音樂播放電路和USART串行通信電路。將外接的麥克風輸入的語音信號通過芯片37和38引腳經音頻輸入電路接收后進行語音識別,通過MP3播放電路通過27和28引腳音頻輸出外接功率放大器及喇叭將聲音播放出來。本地語音識別SYN7318模組通過UART接口33和34引腳與STM32 F103 MCU控制器串口2的16和17引腳相連,由MCU發(fā)送控制命令給該模組并接收反饋的識別結果信息。
3.2? 程序設計
本地語音識別程序設計范例如下:預先將“027 您好”通過軟件燒錄進SYN7318語音識別模組磁條,當用戶發(fā)出語音命令給該模塊后,需進行語音識別,此時由STM32F103 MCU發(fā)5個字節(jié)的語音識別命令給SYN7318語音識別模組,告知其所用的用戶詞典。如len=5,0xFD 0x00 0x02 0x10 0x03。MCU接收4個字節(jié)的SYN7318語音識別模組的反饋信息;如0xFC 0x00 0x01 0x41,并根據第4字節(jié)是否為0x41判斷接收是否成功。MCU繼續(xù)接收3個字節(jié)的語音識別命令回傳結果,如:0xFC 0x00 0x06,根據幀頭是否是0xFC判斷,是的話進一步接收6個字節(jié)回傳數據,如:0x01 0x64 0x00 0x1A 0x00 0x1B,并判斷幀頭是否是0x01,第6個字節(jié)0x1B對應的命令ID,即十進制數27,由此可以知道是“您好”這一詞語。
4? 云端語音識別功能實現
4.1? 百度語音識別工作流程
百度語音識別技術使用和神經網絡類似的深度學習算法,極大提高了識別效率[3]。利用REST
API給予一個標準的Http端口,允許識別整段錄音文件,允許使用語音識別控件,但錄音要滿足PCM 8k或16k抽樣率,單聲道16位深等要求,支持未壓縮的pcm、wav等,支持中英文和粵語[4]。
具體設計流程為:登陸百度語音識別平臺,從管理控制臺轉入創(chuàng)建的應用,獲取API、Secret密鑰和應用ID,依據百度的權限方法得到Access_token。語音數據與其他參數經過標準JSON格式序列化POST上傳,語音數據被放置到JSON數據流的“speech”數據段內,以base64形式編碼,將語音數據的長度標注到“l(fā)en”數據段內;或者直接在“url”數據段內給出語音獲取地址,在“callback”數據段內放置識別結果的調用地址。假如可以識別,則在JSON數據流的“result”數據段內放置識別結果,并按UTF-8模式編碼。
4.2? 百度語音識別硬件電路
綜合語音識別模組的云端語音識別功能選用集成2.4GHz WiFi的ESP32控制器,通過WiFi將需識別的采樣語音信號傳輸給百度云服務器,ESP32控制器通過集成電路內置音頻總線I2S和立體聲多媒體數字信號編譯碼器WM8978進行數據傳輸,WM8978外接麥克風MIC和揚聲器SPK,由WM8978對人的說話進行錄音,播放語音識別結果。ESP32外接TF卡,可以存儲網絡文件、音樂等。ESP32通過RS-232串口和STM32F103 ARM相連,可以傳輸語音識別的結果,同時外接CP2104 USB轉串口電平轉換芯片,可用USB口進行調試和現象觀察,如圖3所示。
4.3? 百度語音識別軟件編程
在Windows系統(tǒng)電腦下,安裝VMware虛擬PC軟件,在該虛擬機下配置ubuntu-14.04 64位操作系統(tǒng),安裝代碼編輯器Sublime Text軟件編輯C程序,通過ubuntu命令終端窗口安裝詞法、語法分析工具,安裝Linux平臺的ESP32交叉編譯器,設置編譯路徑等,將編寫的C代碼通過編譯后,下載到ESP32 WiFi控制器里,程序流程如圖4所示。
具體程序設計的邏輯為當檢測到語音錄入開始,將錄音文件按wav格式寫進SD卡存儲,檢測到語音錄入結束后發(fā)送超文本傳輸http申請,一段段傳輸經base64編碼后的數據。
將百度語音識別網站注冊后得到的API Key和Secret Key填入百度提供的oauth的http鏈接,得到access_token,將該token添加在程序stream_head字段中。stream_head="{\"format\":\"wav\",\"cuid\":\"witsrc_test\",\"token\":\"24.ce5f2e56975a06c172abd07f71eef516.2592000.1523604181.282335-10887800\",\"rate\":8000,\"channel\":1,\"speech\":\"";//","len":0,}",將真實的語音采樣數據插入在中間發(fā)送。
5? 性能測試結果樣例分析
目前,對該系統(tǒng)主要的識別響應速度、準確性和穩(wěn)定性等性能分別進行了測試,得到了測試結果。采用ESP32 WiFi控制器等模塊構成的云端識別功能電路,將語音信號通過WiFi路由器,經20M速率Internet寬帶網絡發(fā)送給云端,到微處理器得到語音識別反饋結果輸出給用戶,平均耗時大約2~3 s,采用SYN7318等模塊構成的本地識別功能電路進行語音識別,平均耗時大約1 s以內,得到識別結果速度要更快。
測試者擁有國內二級甲等普通話水平測試合格證書,在環(huán)境基本無干擾和有微弱干擾的情況下,對5個中文單詞、1個英文單詞和1個數字進行了3次發(fā)音,有1個中文單詞未燒寫在本地語音識別模組磁條內,測試后得到了表1相應的識別結果。
本測試云端和本地語音識別電路具體耗時和識別準確性等原因有待對該系統(tǒng)軟硬件及測試方法等做進一步分析,并不針對所使用的企業(yè)產品模塊或識別算法等。
本地語音識別模組磁條內已有的中文單詞,識別準確率很高,如果發(fā)音準確,識別準確率能接近100%,對英文和數字識別困難,而磁條內沒有的中文單詞,識別不出來,使用時需要有較強的針對性,云端識別模組可以對海量語音命令識別,準確率較高,有延時,使用時不需較強的針對性。所以,該系統(tǒng)結合了這兩種情況,使用STM32 MCU進行邏輯判斷獲取語音綜合識別結果,使得語音識別維持較高準確率的同時增強了適用性,另外,該系統(tǒng)多次持續(xù)運行3 h左右,暫未發(fā)現語音識別過程中有系統(tǒng)崩潰、死機等問題,可靠性和穩(wěn)定性較強。
6? 結束語
一種云端AI與本地相結合的嵌入式語音識別系統(tǒng)綜合了云端和本地語音識別方式,提升了語音識別有效性、可靠性和時滯性等。可以借助百度云端語音識別大數據庫實現海量語音命令識別,借助類似神經網絡的深度學習算法使識別準確率提高,同時語音特征數據庫更新容易[5]。也可以利用本地語音識別模組快速響應語音識別,控制簡單。
據此思路和結構,未來,綜合語音識別模組可以考慮使用人工智能AI芯片作為MCU控制器,結合云端海量語音識別大數據庫,進行自我學習和網絡在線、離線的語音識別結果評分判斷,時延判斷等,綜合應對各種情況,進一步提升系統(tǒng)性能。
參考文獻:
[1] 郝雯超,馮月芹,李春光,等. 基于嵌入式平臺的實用語音識別研究[J]. 電子器件,2018,41(1):110-114.
[2] 任玲,陳寬政,袁書恒,等. 基于STM32的聯合收割機脫粒滾筒監(jiān)控系統(tǒng)[J]. 寧波職業(yè)技術學院學報,2018(3):93-95.
[3] End-to-end attention-based large vocabulary speech recognition[A]. Bahdanau D,Chorowski J,Serdyuk D,et al. International Conference on Acoustics,Speech and Signal Processing[C]. 2016.
[4] 楊晨,李勇,金德鵬. 基于REST-API的SDN控制器故障恢復機制[J]. 計算機工程,2015,41(9):131-134.
[5] 張仕良.基于深度神經網絡的語音識別模型研究[D]. 合肥:中國科學技術大學,2017.