路遠爭 張凱亮 曹興旗 許武



摘 要:在汽車駕駛中,由于各種意外情況,駕駛者經(jīng)常需要去控制手機或者車內(nèi)的其它設(shè)備,這時手就會離開方向盤,這顯然給汽車安全駕駛埋下安全隱患。因此,利用智能語音識別技術(shù)來改變駕駛環(huán)境下現(xiàn)有的人機交互方式,從而解放駕駛者的雙手,有效的提高駕車安全性。本設(shè)計以Android開發(fā)平臺為基礎(chǔ),為車載環(huán)境下的用戶提供一個可以直接識別語音指令的系統(tǒng)。該系統(tǒng)主要實現(xiàn)語音識別、語音合成、查看當前位置、導(dǎo)航、控制車輛天窗等功能。結(jié)果表明,該系統(tǒng)具有較好的識別效果,界面友好操作簡便,能夠消除一定的駕駛環(huán)境下的安全隱患。該平臺也可以作為語音云體驗質(zhì)量測試的基礎(chǔ)平臺。
關(guān)鍵詞:Android Studio;百度語音SDK;語音識別;語音合成
1設(shè)計背景與意義
服務(wù)機器人以服務(wù)為目的,但是在處理一些特定場景下的人機交互的時候,比如駕車時,這時候交互就會比較困難,因為沒法空出雙手沒法去操控機器。因此人們需要一種更方便、更自然、更加人性化的方式與機器交互,而不僅僅是復(fù)雜的鍵盤和按鈕操作。基于聽覺的人機交互是該領(lǐng)域的一個重要發(fā)展方向。語音識別技術(shù),也被稱為自動語音識別,即讓機器通過識別把人類的語音信號轉(zhuǎn)變?yōu)橄鄳?yīng)的文本或命令的技術(shù),能讓計算機理解和運用人類的自然語言,實現(xiàn)人機之間的自然語音通信。自動語音識別技術(shù)所要解決的問題是就是讓計算機能夠“聽懂”人類的語言,將語言中包含的文字信息“提取”出來。
語音識別技術(shù)是一門交叉學科 ,語音識別正逐步成為信息技術(shù)中人機交互的關(guān)鍵技術(shù),語音識別技術(shù)與語音合成技術(shù)的結(jié)合,開啟了人機交互方式的新時代,它將徹底解放用戶的雙手與眼睛,使人們能夠甩掉鍵盤,通過語音命令進行操作。語音技術(shù)的應(yīng)用已經(jīng)成為一個具有競爭性的新興高技術(shù)產(chǎn)業(yè)。當今,語音識別產(chǎn)品在人機交互應(yīng)用中占到越來越大的比例。不難想象,語音命令操作一定會完美替代現(xiàn)如今智能設(shè)備上最為流行的按鍵以及觸摸操作。
如今汽車工業(yè)在不斷發(fā)展,人們的生活品質(zhì)隨著可以駕車出行有著巨大的提升,同樣的,智能車載系統(tǒng)也是人們最為看重的。隨著車載語音系統(tǒng)及各類語音識別軟件的開發(fā),語音識別開始走入人們的生活,憑借其實用性和準確性得到了用戶的認可。互聯(lián)網(wǎng)和移動通訊技術(shù)的不斷發(fā)展加快了移動APP的廣泛應(yīng)用,這意味著語音識別技術(shù)逐漸走進了移動APP中。本系統(tǒng)摒棄了傳統(tǒng)的、繁雜的手動操作的累贅。系統(tǒng)旨在改變傳統(tǒng)的人機交互方式,使人們能夠在生活環(huán)境中采用更為直接便利的方式與手機對話,獲取更為便捷有效的人機交互。
2系統(tǒng)的總體設(shè)計
系統(tǒng)的總體功能模塊結(jié)構(gòu)如圖1所示,其中,語音識別模塊和語音合成模塊的實現(xiàn)利用的是百度語音技術(shù)服務(wù)提供的軟件開發(fā)工具包。GPS定位模塊和APP拉起模塊利用的是安卓自帶的軟件開發(fā)工具包來實現(xiàn)的。
本次設(shè)計所采用的百度語音識別技術(shù)是通過百度語音開放平臺為廣大開發(fā)者提供精準、免費、安全、穩(wěn)定的服務(wù)。不同于以往的識別模塊,百度的語音識別技術(shù)采用的是類似神經(jīng)網(wǎng)絡(luò)的深度學習算法,這個算法是比目前主流語音識別系統(tǒng)更為簡單更為有效的方法,所以也大幅度的提升了識別效率。
上傳整個錄音文件。百度語音識別要求安靜的環(huán)境,真人的正常語速的日常用語,并且不能多個人同時發(fā)音。
以下場景講會導(dǎo)致識別效果變差:
1)吵雜的環(huán)境;
2)有背景音樂,包括揚聲器在播放百度合成的語音;
3)使用非遠場語音時,離麥克風較遠。
語音識別SDK的主要輸入事件如表1所示
其中,主要利用ASR_START 事件常用的輸入事件參數(shù)如表2所示。
3 系統(tǒng)的功能設(shè)計與實現(xiàn)
3.1軟件的總體設(shè)計
軟件主要包括五個功能,分別為語音識別功能、語音合成功能、位置獲取功能、音樂播放功能以及交互功能。語音識別功能實現(xiàn)將外界的語音信息識別轉(zhuǎn)換為機器可以理解的字符序列。語音合成功能實現(xiàn)的是將語音識別的字符序列合成為語音并播放。位置獲取功能是通過手機GPS獲取當前的位置信息并保存。音樂播放功能是啟動新界面并自動開始播放音樂。交互功能通過語音識別的結(jié)果,判斷外界語音的目的。例如外界語音內(nèi)容為“打開蝦米音樂”,語音識別模塊將進行識別,并顯示識別結(jié)果“打開蝦米音樂”,語音合成模塊將會合成內(nèi)容“正在打開蝦米音樂”并且播放,同時交互模塊會啟動手機里面的蝦米音樂APP,系統(tǒng)的總體流程圖如圖1所示。
3.2 語音識別功能實現(xiàn)
語音識別的實現(xiàn)首先新建事件監(jiān)聽類對象EventListener yls,并實現(xiàn)回調(diào)接口OnEvent(String name, String params, byte[] data, int offset, int length),OnEvent方法會處理識別過程中的回調(diào)事件。OnEvent方法中,name是輸出事件名,params是事件返回的JSON格式數(shù)據(jù),(data,offset, length)三者一起組成額外數(shù)據(jù)。如回調(diào)的音頻數(shù)據(jù),從data[offset]開始至data[offset + length] 結(jié)束,長度為length。
然后需要新建一個EventManager類對象asr,并初始化EventManager對象asr,即EventManager asr =EventManagerFactory.create(this, "asr");同時為asr設(shè)置語音識別監(jiān)聽器asr.registerListener(yls)。
事件管理器以及事件監(jiān)聽器設(shè)置完之后,開始識別只需要利用EventManager類中的send 方法發(fā)送asr_star參數(shù),即asr.send(SpeechConstant.ASR_START, json, null, 0, 0),其中json參數(shù)用來存放需要發(fā)送的識別參數(shù)。
同樣的,停止識別與取消識別也是通過該方法實現(xiàn),代碼如下:
asr.send(SpeechConstant.ASR_STOP,null,null,0,0);? asr.send(SpeechConstant.ASR_CANCE, null, null, 0, 0);
開始事件發(fā)送之后,程序開始進行語音識別,然后需要觀察回調(diào)事件中的輸出事件名,當輸出事件名為final_result時,代表著識別結(jié)束。這時,識別結(jié)果就是params中的best_result數(shù)據(jù)。程序的語音識別流程圖如圖2所示。
3.3語音合成功能實現(xiàn)
首先新建一個SpeechSynthesizer對象mSpeechSynthesizer并設(shè)置當前的Context。同時為mSpeechSynthesizer設(shè)置監(jiān)聽器,即? ? ?mSpeechSynthesizer.setSpeechSynthesizerListener(listener);
回調(diào)成功后,SDK會調(diào)設(shè)置的SpeechSynthesizerListener 里的回調(diào)方法。在語音合成前,還需要進行合成參數(shù)的設(shè)置以及合成引擎的初始化。
百度語音合成SDK提供了兩個合成播放接口即synthesize方法和speak方法,synthesize方法只有合成功能,speak方法是在合成后立即播放,此設(shè)計選用的是speak方法。
需要注意的是,合成的每個文本text不能超過1024的GBK字節(jié),即512個漢字或英文字母數(shù)字。超過需要按照句號問號等標點切分,調(diào)用多次合成接口。在合成播放完成之后,需要釋放資源,即將mSpeechSynthesizer設(shè)為null。
語音合成模塊的流程圖如圖3所示。
3.4定位功能實現(xiàn)
如果只需要一個簡單定位,Android已經(jīng)提供了兩個獲取經(jīng)緯度的方式。GPS獲取當前位置和網(wǎng)絡(luò)定位獲取當前位置。相對來說,GPS準確度高但耗電多,網(wǎng)絡(luò)定位耗電少但準確度低。通過GPS芯片接收衛(wèi)星的定位信息,定位精度達10米以內(nèi),因此本次開發(fā)選擇的是GPS獲取當前位置。
要利用GPS獲取位置信息首先需要在AndroidMainfest.xml中添加一個權(quán)限,即
該權(quán)限是允許程序訪問精良位置(如GPS)。然后編寫beginLocatioon()方法用來獲取位置信息。具體實現(xiàn)流程如圖4所示。
3.5交互功能實現(xiàn)
交互功能實現(xiàn)的是判斷語音識別內(nèi)容,然后執(zhí)行語音命令,比如打開高德地圖,本軟件就會自動拉起高德地圖APP。此次是利用包名,特定Activity名拉起方式。具體代碼如下:
Intent it=new Intent();//交互功能的實現(xiàn)
ComponentName cn = new ComponentName("com.autonavi.minimap",
"com.autonavi.map.activity.SplashActivity");
it.setComponent(cn);
startActivity(it);
4總結(jié)
本設(shè)計使用Android Studio開發(fā)環(huán)境,利用百度提供的語音識別技術(shù)服務(wù)員開發(fā)一款可以識別語音指令的系統(tǒng)。用戶只要通過語音指令就可以控制手機導(dǎo)航、播放音樂、獲取當前位置、拉起APP以及控制車輛天窗等。此外,該系統(tǒng)還會根據(jù)語音識別的反饋結(jié)果合成播放特定語音。在該系統(tǒng)的開發(fā)以及調(diào)試的過程中,也遇到一些很難解決的問題,如回調(diào)數(shù)據(jù)的解析,百度語音識別SDK的回調(diào)函數(shù)中的回調(diào)數(shù)據(jù)是JSON格式的,應(yīng)該怎樣去解析然后獲取識別結(jié)果。在通過資料的查找之后,發(fā)現(xiàn)只需要先將數(shù)據(jù)轉(zhuǎn)換成字符串,然后再通過getString方法就可以獲取到識別結(jié)果。
參考文獻:
[1] 馬顏軍.科技與企業(yè).基于Android系統(tǒng)的APP開發(fā)[J]. 2015(22)
[2] 高輝.浙江大學.智能車載信息系統(tǒng)共享平臺及安全機制的研究與實現(xiàn)[D]. 2015
[3] 何明均,劉成,黃上. GPS技術(shù)在地質(zhì)測量中的應(yīng)用與分析[J]. 科技信息. 2014(01):70.
[4] 張頔.吉林大學.基于Android的車載多媒體信息交互終端的研發(fā)[D]. 2015
[5] 新技術(shù)新工藝.基于語音控制的人機交互智能系統(tǒng)研究[J].梁漢泉,陳錦彪. 2015(09)
[6] 中國工程機械學報.基于HMM的非特定人漢語語音識別系統(tǒng)[J].聞靜. 2014(05)
[7] 李彥奇.吉林大學.基于語音控制的車載娛樂系統(tǒng)的研究[D]. 2015
[8] 歐陽丹.湖北大學.基于ARM的車載語音識別系統(tǒng)的設(shè)計[D]. 2014
[9] 丁亦喆,廖楠楠,田津浩.基于Android系統(tǒng)的智能交互APP設(shè)計思路研究[J]. 信息記錄材料. 2018(05)
[10]肖方. 車載多媒體語音指令控制系統(tǒng)的開發(fā)[D].南京航空航天大學,2010.
基金項目:徐州工程學院大學生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計劃項目(xcx2019254)