茍鵬程 宗 群
(天津大學電氣與自動化工程學院 天津 300072)
車載語音識別及控制系統的設計與實現
茍鵬程 宗 群
(天津大學電氣與自動化工程學院 天津 300072)
針對傳統的封閉式手動操作的車載系統,設計了基于Android系統的車載語音識別與控制系統。該車載系統采用ARM架構完成硬件搭建,設計并實現了基于網絡和LD3320語音芯片的在線離線多模態語音識別功能,并在此基礎上實現了語音控制導航、藍牙電話及音樂播放功能。該系統支持導航軟件應用的自助升級和維護,打破了傳統車載系統升級的壟斷。實驗結果表明,該多模態語音識別與控制車載系統成本低、效率高,功能強大、界面友好操作簡便,真正意義上釋放了駕駛員的雙手,具有廣闊的市場前景。
車載 語音控制 導航 藍牙 LD3320
駕車出行改善了人們的生活品質,但汽車數量的不斷增加,也帶來了嚴重的社會問題,如道路阻塞,交通事故等。科技進步推動了汽車電子技術的發展,而輔助駕駛的智能車載系統尤其被人們看重。因此,推出更加安全化和人性化的智能車載產品成為了社會各界的期望[1]。目前市場上的車載系統,絕大多數是封閉和手動操作的,受自身軟件和硬件的限制,這類系統無法完全滿足駕駛員對車載系統的快捷化、安全化及個性化的操作需求。此外,由于交通網絡信息的快速發展和繁雜,這類車載系統如果不能及時更新導航地圖,操作可能導致嚴重后果。再加上更新手段壟斷,價格昂貴,這些都是傳統車載系統的局限性[2-3]。
在已有車載語音識別及控制系統的相關研發工作中,文獻[4]設計了一款基于CSRS368的車載語音控制娛樂系統,實現了音樂播放、撥打電話的功能,但沒有開發語音控制導航功能,導致整體系統應用價值偏低。文獻[5-6]基于系統模式匹配算法開發了語音識別系統,考慮了抗噪,但沒有實現具體的控制功能。此外,以上研發工作都是依賴龐大的模式匹配數據庫,識別算法占用CPU過多資源,系統運行時容易出現卡死現象。
針對以上存在的問題,本文設計一款基于Android的車載語音識別與控制系統。系統實現了基于網絡和LD3320語音芯片的在線離線多模態語音識別功能,將語音識別任務交給其他模塊處理,ARM主控器只接收識別結果,降低對ARM硬件的依賴。并在此基礎上實現了語音控制車載導航、藍牙電話、歌曲播放的功能,功能豐富且系統運行流暢。其中語音控制導航包括語音搜索目的地、目的地列表自動推薦、目的地直接定位等功能;語音控制藍牙電話包括呼叫姓名、呼叫電話號碼以及重播等功能;語音控制歌曲播放功能包括上下首歌曲切換,控制播放指定音樂家的歌曲和控制播放指定歌曲等功能。導航應用可以在有網絡的環境下自助升級和維護。該系統摒棄了傳統的、繁雜的手動操作的累贅,改善了駕駛員在駕駛車輛時的安全性和舒適性。
系統總體架構如圖1所示。軟件采用開源的Android操作系統。硬件架構包括:ARM主控器、LCD觸摸屏及硬件驅動電路、離線語音識別單元和外圍硬件模塊。其中,車載主控器ARM采用三星的四核處理器,基于Cortex-A9架構的Exynos4412,搭配1 GB DDR3 運行內存,最高運行主頻為2 GHz[7]。Exynos4412處理器搭載高性能數據處理引擎,為車輛數據信號的收集和處理提供了有利條件。
系統采用型號為AT070TN92的可觸控LCD顯示屏,支持多點觸控,分辨率是800×480,響應迅速。顯示屏和主控器采用45 pin接口直接相連,該可控制行場掃描信號、背光控制信號和使能信號等。

圖1 系統結構
離線語音識別單元由微控器STM32F103控制LD3320專業語音識別芯片實現。LD3320是由ICRoute公司設計制造的一款專業、快速且穩定的語音識別芯片,優點是效率高、成本低、無需外圍輔助元器件如內存和閃存等、無需駕駛員事前語音訓練等,即可實現準確率>95%的單芯片語音識別。此外,可以動態編輯LD3320識別語句,這就為車載環境下語音識別提供了強有力的條件[8]。
STM32F103是采用Cortex-M3架構的32位微控器,時鐘頻率為72 MHz,指令執行效率高,響應速度快[9],成本低。STM32F103通過SPI串行通信控制LD3320,以配置LD3320內部寄存器的方式,傳入識別關鍵字,從而實現識別列表的動態編輯。STM32F103采集LD3320識別結果,通過串口發送到車載主控器,架構如圖2所示。

圖2 離線語音識別架構
STM32F103不直接提供SPI接口,需要配置相關GPIO口復用功能來實現[10]。具體的硬件連接采用STM32F103的PA5(復用SCK,時鐘信號)、PA6(復用MISO,接LD3320的MOSI)和PA7(復用MOSI,接LD3320的MISO)三個GPIO復用,實現LD3320和STM32F103的SPI通信。使用STM32F103的PC15,PA4分別控制LD3320的復位信號和片選信號;中斷信號由LD3320的IRQ發出,配置STM32F103的PC14引腳為接受外部觸發中斷。
以上工作完成之后,接下來針對車載環境編寫在線、離線語音識別程序、語音指令執行程序和LCD顯示以及效果響應等程序。
在通常的語音識別中,用戶無法針對特定環境(如車載環境)自行設計安排識別目的。此外,還需要將采集到的音頻數據經過強大的DSP處理器進行數據處理,再依據特定的算法,建立龐大的數據匹配庫,交給核心處理器進行提取、匹配和識別。這需要更高性能的處理器,軟件的設計要求會更高,成本會更高。這樣勢必會占用過多的CPU資源,使其他軟件(如導航、音頻播放等)卡死。
針對上述問題,提出將語音識別分為在線和離線模態,其中在線識別的優勢在于硬件要求低,可以識別更廣泛的語音信號,如駕駛員使用語音控制導航,在線識別駕駛員所指定的目的地,駕駛員自由選擇目的地進行自主導航,方便快捷,更加體現語音控制車載系統的人性化;離線模態語音識別是由LD3320專業語音識別芯片通過對比離線數據存儲庫,得到最佳語音識別結果。在線和離線模態的結合,將語音識別這一大環節交給其他模塊處理,車載核心處理器只接收識別結果,降低對硬件的依賴,將CPU主要資源放在其他軟件諸如導航、音頻播放等,保證系統性能,以最低的成本達到最佳的、最智能的用戶體驗。
2.1 在線語音識別設計實現
在線語音識別采用類神經網絡的辨識算法,以Http模式請求,縮短了開發周期,降低成本。本文以接入百度語音API實現在線語音識別。
該功能實現主要是軟件編程,選擇Java語言,IDE為Eclipse。考慮整個識別過程是耗時性操作,為了不影響其他事件的運行,設計采用多線程工作模式,實現流程如圖3所示。

圖3 在線語音識別設計流程
首先是初始化過程,包括主控器和外圍電子器件的初始化。主要任務是Android系統的初始配置、LCD顯示屏幕的初始配置與網絡通信系統的初始配置以及麥克風的使用配置。
其次,開啟UI更新主線程、語音識別子線程,數據處理子線程。其中,語音識別線程需要連接網絡,數據處理相對耗時,但產生的數據都需要發送到UI主線程進行界面更新,從而與駕駛員進行交流。在Android操作系統中,UI界面的更新只能在UI主線程里面,其他耗時操作和線程不能阻塞UI線程[11]。因此建立三個線程以數據交互為基礎,分工運行,使數據交流高效,系統運行流暢。系統啟動時,自動啟動UI主線程,加載UI界面,在UI界面上對語音識別的功能進行的描述,方便駕駛員更好地操作系統,然后等待來自其他子線程的數據,更新UI界面。UI主視圖部分內容僅涉及Android界面編程這里不再詳述。下面介紹語音識別子線程實現。
語音識別線程的主要任務包括語音識別的實現和識別數據結果的分析。語音識別的實現主要依靠百度語音API中的SpeechRecognitionClient,SpeechRecognitionConfig和SpeechClientStatusChangeListener三個重要的類。其中SpeechRecognitionClient實現了對語音識別流程的整體掌控,該類的三個方法startSpeechRecognition()、speakFinish()、stopSpeechRecognition()分別用來實現語音過程的開始、結束和終止;SpeechRecognitionConfig類用來對語音識別進行參數請求配置,包括采樣頻率,語言種類等。針對車載環境,采樣頻率配置為8 kHz,以節省成本,語言種類設置為LANGUAGE_CHINESE;SpeechClientStatusChangeListener類的實現,用來掌控具體語音識別過程以及識別結果的反饋。在線語音識別實現效果如圖4所示。

圖4 在線語音識別實現效果
提取出來的識別結果是直譯文字信息,使系統以識別的文字結果為命令,就必須對識別結果文字信息進行語義解析。考慮到車載環境,語音命令都是祈使句命令,比如“播放周杰倫的音樂”、“撥打王某某的電話”、“導航去天津站”等。使用正則表達式進行語法分析,采用的語法結構為基礎語法結構:謂語+間接賓語+直接賓語、謂語+賓語、謂語+賓語+補語;同時將“的”作為句子理解的斷點。整個句子結構采用上述語法分析之后將拆分后的數據封裝在Json數據結構中,其中謂語是語音命令的核心,它指導動作的方向,賓語是具體的動作。例如,“播放周杰倫的音樂”進行語義解析之后,拆封得到的數據:“播放”(是指向音樂播放器的命令),“周杰倫”和“音樂”(是具體到播放的最終目的)。
最后,語義解析完成之后,將結果數據發送到UI主線程,更新UI界面,提示駕駛員識別的結果。同時,將解析結果數據交給數據處理子線程,數據處理子線程根據具體的信息,進行軟硬件響應。各線程以數據為基礎分工明確,節約成本,降低功耗,實際操作中識別流暢,用戶體驗良好。
2.2 離線語音識別設計實現
其他任一類型語音識別,都是以中文文本庫為匹配對象,語音識別出來的結果是同音字,但不一定是正確識別結果。例如呼叫“王鵬”,就可能識別為“王朋”或“王彭”,這樣就可能導致識別失效或者打錯電話的尷尬。故采用離線語音識別控制藍牙電話,將通訊錄里聯系人的名字設定為離線語音識別匹配庫,這樣匹配到的結果就是要找的聯系人,識別快速準確。
LD3320語音識別芯片是通過和寫入芯片的關鍵詞對比實現語音識別的[12]。將需要識別的關鍵詞以拼音字符串的形式,寫入到微控器的運行內存ROM內部。LD3320進行語音識別時,將語音信號進行分析和特征提取,與關鍵詞列表中的信息進行匹配,相似度最高的即最佳識別結果。
考慮到車載語音環境的特性,設計時采用觸發識別,即微控器接收到一個外部觸發命令(設計為駕駛員的按鍵命令)時,才會開放LD3320的識別條件,即一次觸發進行一個語音識別過程。此外,采用LED燈光提示,提示駕駛員語音識別環境準備就緒,避免駕駛員隨性的語音導致識別率降低,會進一步提高語音識別效率,增強駕駛安全性。有語音識別結果時,LED自動熄滅。觸發識別還是一種低功耗模式,在駕駛員不操作語音識別時,微控器不控制LD3320工作,以達到省電降耗的功效。
LD3320語音識別設計流程如圖5所示,具體軟件驅動編寫如下:
(1) 初始化:對芯片各個寄存器按照序列進行設置。
(2) 寫入所要識別的詞條:待識別的詞條按照鍵值對的形式傳入,形成詞庫。詞庫的法則:一條識別詞條對應一個特定值,不同的待識別詞條可以對應同一特定值。系統內部傳遞的是詞條對應的特定值,根據特定值,即可確定語義。
(3) 等待識別過程:設置全局控制變量,指示當前狀態是否具備完備的識別條件。
(4) 響應中斷:當語音按鍵被按下,麥克風采集語音命令,LD3320產生中斷,讀取BA寄存器的數值,根據數值判斷識別是否正確。
(5) 結果輸出:檢測到識別正確,且讀取到特定值,將結果通過串口發送到主控器。STM32F103與主控器的串口通信配置為:115 200波特率,8位數據傳輸,1位停止位,無奇偶校驗。

圖5 離線語音識別設計流程
離線軟件驅動編寫完成之后,在電腦上通過串口調試助手調試測試,識別迅速,體驗效果良好,如圖6所示。

圖6 離線語音識別實現效果
對安裝在車載系統車上的任一種導航軟件的語音控制,是通過提取駕駛員語音信息進行目的地搜索,再采用Android系統提供的Intent機制,將帶有目的地經緯度信息Intent對象發送到第三方導航軟件,從而實現語音對導航的通信和控制。導航軟件在接收到目的地信息后自動啟動并跳轉到目的地導航頁面,這樣在保證識別效率和正確操作的前提下,真正釋放駕駛員雙手,保證安全駕駛。語音控制導航設計流程如圖7所示。

圖7 語音控制導航設計流程
首先是UI主線程接收來自語音識別線程的識別結果,同時UI主線程更新界面,告知駕駛員識別結果。同時啟動數據處理子線程,接收處理完成的語音數據,為保證安全駕駛,數據處理子線程再次對語音命令進行解析。
當解析結果是正確導航命令時,從Json數據結構中提取目的地信息,再啟動搜索線程,進行對目的地的搜索。目的地的搜索有三個重要的變量PoiSearch初始化檢索對象,PoiCitySearchOption對檢索對象進行參數配置,OnGetPoiSearchResultListener是一個監聽類,用來監聽是否存在有效的搜索結果[13]。通過onGetPoiResult方法得到結果數據PoiResult, PoiResult包含所有搜索結果的地址信息、統一標識符ID及經緯度等信息。將搜索到的每個結果信息打包處理成hashmap數據結構,所有的hashmap數據構成一個LIST鏈表。將LIST鏈表封裝好后發送到UI線程,UI線程啟動后,提取LIST鏈表中的數據,界面上形成目的地推薦列表AlertDialog。實現效果如圖8所示,可以清楚地看到語音識別后目的地推薦列表。

圖8 目的地推薦列表效果圖
Intent是Android不同應用之間數據交流的橋梁。使用帶有經緯度參數的Intent通過startActivity啟動導航,其中配置數據采用Uri。
駕駛員選擇AlertDialog列表中的目的地,會觸發一個帶有經緯度數據Intent對象傳遞到第三方導航應用,將導航信息顯示在LCD顯示器上,最終實現語音控制導航。實現效果如圖9所示。

圖9 語音控制導航實現效果
用戶可以根據自身需要和喜好自行安裝導航軟件,升級方法同樣操作簡單,像操作Android手機一樣,可以采用SD卡下載安裝包升級,可以采用網絡手段升級,打破了傳統車載導航升級的壟斷。
車載環境下,音樂播放器處于后臺播放狀態,程序在后臺運行而不影響其它程序的正常運轉,這是基于Android系統的重要組件——服務Service。所以應當設計語音控制后臺音樂播放Service,這樣就要用到Android的廣播(Broadcast)機制。該功能的設計流程圖如圖10所示。

圖10 語音控制歌曲設計流程
Android操作系統提供了MediaStore類,使用內容解析器ContentResolver提供Cursor的query查詢方法來調取MediaStore類所提供的數據表格。包括歌曲名稱TITLE、歌曲專輯名ALBUM、歌手名字ARTIST等。從UI主線程提取到語音識別有效控制信息時,如“播放周杰倫的音樂”,在ARTIST中匹配“周杰倫”,得到文件位置。將文件位置信息搭載到Intent對象,主線程通過Broadcast將Intent發送到音樂播放器Service,接受命令從而播放歌曲。
語音控制藍牙電話,主要是通過語音來控制主控器操作藍牙模塊:主控器通過串口向藍牙模塊發送AT命令,實現對駕駛員手機的語音控制。不同的語音命令觸發不同的AT命令,從而實現接聽、重撥、呼叫某人及呼叫電話號碼等功能[14]。該功能的設計流程如圖11所示。

圖11 語音控制藍牙電話設計流程
首先是UI主線程接收來自語音識別線程的識別結果,這部分同語音控制導航,這里不再贅述。從Json數據結構里面提取控制電話信息,如檢測是呼叫電話號碼數字命令或是直接的控制命令(如重撥、拒絕接聽等),將控制信息直接形成藍牙AT命令。
同樣,如果檢測到控制命令是呼叫某某人,將姓名提取出來,從通訊錄中提取電話號碼信息,再轉化為藍牙AT命令。 根據姓名查找電話號碼,使用Android內容提供者(ContentProvider)和內容解析器(ContentResolver)。Android通訊錄作為ContentProvider負責將數據(根據姓名匹配到的電話號碼信息)傳遞給ContentResolver(藍牙串口線程),形成AT命令,繼而控制藍牙電話。
本文從底層硬件架構設計到Android操作系統上層控制應用等各個方面對該車載語音識別與控制系統的開發進行詳細論述。設計并實現了在線離線多模態語音識別功能,又在充分考慮安全駕駛和節約能耗的基礎上,實現了語音控制車載導航、藍牙電話及歌曲播放的功能。整體系統功能豐富,操作簡單且具有很好的控制效果和穩定性。在實驗室條件下模擬車內環境對該系統進行了測試,結果表明,系統整體運行流暢,識別率在95%以上。此外,本系統可以自助升級導航應用,擺脫了傳統系統升級受壟斷的限制。
本系統還可以在軟硬件控制方面進行拓展,例如對空調系統的控制、限行語音提示以及天氣情況語音提示等,可繼續拓展功能,使該系統成為集語音和服務于一體的智能化車載系統。此外,隨著科技不斷發展,Android系統的不斷滲透,該系統必當會在各個類型汽車中盛行,具有廣闊的未來市場和廣泛的應用前景。
[1] 孫康慧. 中國汽車電子產業創新體系構建研究[D]. 吉林大學, 2011.
[2] 李永鈞. 中國汽車導航業面臨的機遇與挑戰[J]. 汽車工業研究, 2012(10):22-24.
[3] 胡剛, 金振偉, 司小平,等. 車載導航技術現狀及其發展趨勢[J]. 系統工程, 2006, 24(1):41-47.
[4] 李彥奇. 基于語音控制的車載娛樂系統的研究[D]. 吉林大學, 2015.
[5] 歐陽丹. 基于ARM的車載語音識別系統的設計[D]. 湖北大學, 2014.
[6] 劉林峰. 基于智能化車載交互的語音識別系統的建立與實現[D]. 中國地質大學, 2013.
[7] 黃智偉. ARM9嵌入式系統設計基礎教程[M]. 北京航空航天大學出版社, 2013.
[8] LD3320開發手冊[EB/OL].[ 2011-10-13]. http://www.icroute.com/doc/LD3320.pdf.
[9] 孫書鷹, 陳志佳, 寇超. 新一代嵌入式微處理器STM32F103開發與應用[J]. 網絡新媒體技術, 2010, 31(12):59-63.
[10] 李寧. 基于MDK的STM32處理器開發應用[M]. 北京航空航天大學出版社, 2008.
[11] 周兵. Android中UI線程與后臺線程交互的探討[J]. 鄖陽師范高等專科學校學報, 2013, 33(3):14-16.
[12] 鐘晨帆. 基于LD3320芯片的語音識別系統設計與開發[D]. 南京大學, 2015.
[13] 百度地圖Android SDK [EB/OL].[2014-11-14]. http://blog.csdn.net/callmesen/article/details/41121667.
[14] 趙虎成. 基于Android平臺的藍牙電話應用設計及實現[D]. 東南大學, 2013.
DESIGN AND REALIZATION OF VEHICLE SPEECH RECOGNITION AND CONTROL SYSTEM
Gou Pengcheng Zong Qun
(SchoolofAutomationandElectricalEngineering,TianjinUniversity,Tianjin300072,China)
Aimed at the traditional enclosed manual operation of the vehicle system, a car speech recognition and control system based on Android system is designed. The vehicle system uses ARM architecture to complete the hardware structures,the on-line and off-line multi-mode speech recognition based on the network and LD3320 voice chip is designed and implemented. On this basis, voice control navigation, Bluetooth phone and music playing function are realized. The system supports self-service upgrade and maintenance of navigation software, breaking the monopoly of traditional vehicle system upgrade. The experimental results show that the multi-mode speech recognition and control vehicle system has low cost, high efficiency, powerful function, friendly interface and easy operation. It realizes releasing the driver’s hands and has broad market prospect.
In-car Speech control Navigation Bluetooth LD3320
2016-04-18。國家自然科學基金項目(91016018);天津市基礎研究重點項目(11JCZDJC25100)。茍鵬程,碩士生,主研領域:嵌入式開發。宗群,教授。
TP368.1
A
10.3969/j.issn.1000-386x.2017.05.023