李喬娜 陳璐璐 劉兵
(東風(fēng)汽車有限公司東風(fēng)日產(chǎn)乘用車公司技術(shù)中心,廣州 510800)
主題詞:車載語音識別 識別率 Python 自動化測試
縮略語
ASR Automatic Speech Recognition
LPCC Linear Prediction Cepstrum Coefficient
MFCC Mel Frequency Cepstrum Coefficient
HMM Hidden Markov Model
ANN Artificial Neural Network
DA Display Audio
TTS Text To Speech
語音識別(Speech recognition),是將語音轉(zhuǎn)換為文字的技術(shù)。車輛導(dǎo)入語音識別最初是希望可以通過語音對汽車進(jìn)行控制,無需勞煩雙手,提升駕駛的主動安全和娛樂性[1-2]隨著車聯(lián)網(wǎng)技術(shù)的繁榮發(fā)展,乘客對車載語音功能的需求也快速上升,使得語音識別在車輛上得到廣泛應(yīng)用。作為檢驗語音識別性能的重要指標(biāo)之一,車載語音識別率其測試系統(tǒng)和測試方法也是業(yè)界不斷研究的方向。
本論文在深入分析車載語音識別過程的基礎(chǔ)上,綜合考慮當(dāng)前車載語音識別率測試的缺點和難點,獨創(chuàng)了一套能夠代替人工進(jìn)行實車測試和結(jié)果記錄、分析的自動化測試系統(tǒng),測試過程不需人員在場,如有異常情況會遠(yuǎn)程提醒,且測試結(jié)果不受外界噪聲的影響,對環(huán)境的依賴程度較低。經(jīng)實際測試驗證,運行效果和測試結(jié)果均符合預(yù)期,具有非常實用的工程應(yīng)用價值。
語音識別技術(shù)源于20世紀(jì)50年代早期在貝爾實驗室所做的研究,也被稱為自動語音識別(英語:Automatic Speech Recognition,ASR),狹義的語音識別技術(shù)即將語音轉(zhuǎn)換為文字的技術(shù)[3]。
語音識別原理如圖1所示[4]。
圖1 語音識別原理[4]
識別過程主要包括如下幾個步驟:
(1)預(yù)處理:對輸入語音信號進(jìn)行預(yù)加重和分幀加窗、斷點檢測、降噪操作[5];
(2)特征提?。撼R姷奶卣鲄?shù)有基于時域的幅度、過零率、能量,以及基于頻域的線性預(yù)測倒譜系數(shù)(LPCC)、Mel倒譜系數(shù)(MFCC)等;
(3)模式匹配:即將測試集與經(jīng)過訓(xùn)練得到的模板庫進(jìn)行模型匹配,從而得出識別結(jié)果。
目前已有2種主流的語音識別技術(shù):隱馬爾可夫模型(HMM)技術(shù)、人工神經(jīng)網(wǎng)絡(luò)(ANN)技術(shù)。
調(diào)查各主機(jī)廠的語音識別功能,一般車載語音識別系統(tǒng)工作過程見圖2。
圖2 車載語音識別過程
關(guān)聯(lián)各部分的功能如下:
(1)方向盤:方向盤上有語音按鍵,按下之后可以調(diào)起語音識別功能。也可以通過DA屏幕上的語音軟按鍵或通過喚醒詞來開啟。
(2)麥克風(fēng):采集音頻。有的車載麥克風(fēng)自帶降噪功能,可以將采集到的音頻進(jìn)行初步的噪聲消除。
(3)DA:Display Audio,即車輛的主機(jī),其內(nèi)部集成了語音套件,是語音識別的主體。接收到麥克風(fēng)的音頻之后,DA會進(jìn)行音頻的A/D轉(zhuǎn)化、降噪、回聲消除操作,將處理后的音頻發(fā)送的識別引擎,完成識別后,語音套件內(nèi)會留存相應(yīng)的日志文件,識別結(jié)果會在DA屏幕上彈出。
(4)揚聲器:輸出DA各channel的聲音,在語音識別過程中,可以進(jìn)行識別結(jié)果的TTS播報。
車載語音識別有其特殊的影響因素,不同路面和車速下的行駛噪聲、車內(nèi)混響、測試人員發(fā)音特征、麥克風(fēng)在安裝位置的開孔率,都會影響車載語音識別率。這些因素的復(fù)雜性也使得近些年針對語音識別在車輛上的應(yīng)用研究層出不窮[6-7],有分析稱“車聯(lián)網(wǎng)給了語音科技人第二次創(chuàng)業(yè)的希望”[8]。
語音識別是由聲學(xué)模型匹配和語言模型匹配共同確定的結(jié)果,因而會引入音的識別錯誤和文字轉(zhuǎn)換的錯誤[9],所以,識別率是語音識別始終繞不開的重要話題。
當(dāng)前各主機(jī)廠對車載語音識別率的測試方法主要有客觀測試和主觀測試。
客觀測試是指語音識別引擎對主機(jī)廠規(guī)定語料的識別率測試。這種測試方法往往脫離實車噪聲環(huán)境、DA性能和混響條件,并不能直接代表車載語音的識別效果。
主觀測試是指實車現(xiàn)場口呼[10],將DA顯示的識別結(jié)果與測試語料對比。這種測試方法考慮了實車因素,但因測試量級大,會消耗大量的人力,且識別結(jié)果會受到測試場地環(huán)境噪聲、發(fā)音人測試情緒等不確定因素的影響。
為了克服測試難題,識別率的自動化測試成為眾多機(jī)構(gòu)的研究內(nèi)容。中國科學(xué)技術(shù)大學(xué)人機(jī)語音通信研究評測實驗曾提出一項全自動語音識別綜合評測系統(tǒng)[10],能同時對不同識別系統(tǒng)的識別結(jié)果做測試和對比,可廣泛應(yīng)用于語音識別大賽類的結(jié)果評測,但仍難以適用于實車綜合環(huán)境的評價。部分主機(jī)廠用頭肩模擬器播放錄音代替真人現(xiàn)場口呼,減少了測試人員主觀因素對測試結(jié)果的影響,但對車機(jī)的操作和對識別結(jié)果的記錄仍需現(xiàn)場手動記錄,人力資源并未得到有效降低,且周圍噪聲環(huán)境仍然會影響測試結(jié)果。
本測試系統(tǒng)在設(shè)計之初,我們首先詳細(xì)分解了語音識別率實車人工測試的詳細(xì)步驟,針對其中的缺點和測試難點進(jìn)行梳理,并制定了相應(yīng)的應(yīng)對措施,最終實現(xiàn)整個測試過程的自動化進(jìn)行。
車載語音識別率測試的一般操作過程見圖3[10]。
圖3 車載語音識別率人工測試過程[10]
圖3 中:
(1)行駛噪聲還原:因車載語音識別率測試一般是測試車輛在某類型路面上以規(guī)定車速行駛時的識別率,所以需要將此條件下車輛的行駛噪聲事先錄制,待測試階段,將噪聲文件在車內(nèi)還原,以此來模擬車輛行駛時的噪聲環(huán)境。
(2)設(shè)置初始界面:不同界面下,操作語音按鍵調(diào)起的功能不盡相同。所以,在每次指令測試之前,一般需要會將車機(jī)調(diào)到合適的界面,如統(tǒng)一調(diào)整到主界面。
(3)啟動語音識別:常用的方法,方向盤語音按鍵、DA界面圖標(biāo)、喚醒。
(4)現(xiàn)場口呼/播放錄音:測試人員根據(jù)指令清單,說出相應(yīng)的測試指令/操作播放器,播放指定測試語句的錄音文件。
(5)等待識別:錄音結(jié)束后,DA內(nèi)部開始音頻處理,并發(fā)送音頻到識別引擎。
(6)記錄測試結(jié)果:待識別結(jié)束后,在DA屏幕上會顯示識別結(jié)果。因顯示時間較短,所以需測試人員集中精力,避免錯過查看時機(jī)。
(7)開始下一條測試:待全部測試完成后,統(tǒng)計識別率測試結(jié)果。
人工測試存在以下3個難點。
(1)測試過程繁復(fù),測試量級大,消耗大量人力。且隨著車聯(lián)網(wǎng)技術(shù)的快速發(fā)展,語音控制的功能越來越多,語音識別率測試的工作量將持續(xù)上升。
(2)對測試環(huán)境的要求高。因識別率受環(huán)境噪聲的影響很大,所以,如要減少此部分影響,整個測試過程需要在消音室進(jìn)行,占用場地資源。
(3)人工測試結(jié)果不穩(wěn)定。受測試人員情緒狀態(tài)變化、音量大小變化、測試人員變更等因素影響,測試結(jié)果的客觀性和一致性難以保證,也不易進(jìn)行不同車型、不同環(huán)境的識別率對比。
結(jié)合人工測試的過程和難點,本文的解決思路主要有以下3方面。
(1)人工測試→自動化測試:包括界面設(shè)定、啟動語音識別、播放測試指令、記錄測試結(jié)果、結(jié)果統(tǒng)計等,大幅節(jié)省人力。
(2)麥克風(fēng)現(xiàn)場拾音→DA音頻灌入:將車輛的行駛噪聲和測試語料音頻事先錄制,構(gòu)建噪聲庫和語音庫。測試開始時,先對噪聲和語音進(jìn)行實車還原,并將音頻直接灌入DA,不需麥克風(fēng)現(xiàn)場拾音,消除了測試現(xiàn)場噪聲對識別結(jié)果的影響。
(3)現(xiàn)場口呼→提前錄制:根據(jù)錄音標(biāo)準(zhǔn),選取合適的錄音人員,用標(biāo)準(zhǔn)麥克風(fēng)在消音室進(jìn)行音頻錄制,構(gòu)建語音庫。對于不符合要求的語料音頻要進(jìn)行剔除和重新錄制。適用到不同車型時,可用頭肩模擬器在車內(nèi)播放語音庫語料,在麥克風(fēng)輸出端對音頻重新錄制,如此就充分考慮了不同車型的麥克風(fēng)性能和車內(nèi)混響效果,在語音庫通話化的基礎(chǔ)上,實現(xiàn)對不同車型的語音定制。
本測試系統(tǒng)采用的主要開發(fā)工具為Python。Python是一種面向?qū)ο蟮慕忉屝湍_本語言,具有鮮明的簡潔性、易讀性以及可擴(kuò)展性。Python擁有一個強大的標(biāo)準(zhǔn)庫,提供了系統(tǒng)管理、網(wǎng)絡(luò)通信、文本處理、數(shù)據(jù)庫接口、圖形系統(tǒng)、XML處理等額外的功能[11]。本系統(tǒng)主要用到以下幾個功能庫/模塊:
(1)threading:多線程控制和處理,是一種操作系統(tǒng)功能庫,用于控制程序同時執(zhí)行多個任務(wù)而不受彼此干擾。
(2)os.path:獲取文件屬性,是一種文件處理功能庫,在本系統(tǒng)中用于處理指定路徑下的文件,包括遍歷、增刪文件等。
(3)winsound:聲音播放模塊,通??梢圆シ?WAV格式的音頻文件,在本系統(tǒng)中用于播放錄制好的測試指令。
(4)smtplib:郵件發(fā)送模塊,對smtp協(xié)議進(jìn)行了簡單封裝,提供一種方便的發(fā)送電子郵件的途徑,在本系統(tǒng)中用于異常情況的遠(yuǎn)程提醒。
本文自動化測試系統(tǒng)流程如右圖4所示。
音頻庫建立完后之后,整個測試過程可以不需人工操作和記錄,如有需要,可以查看監(jiān)控界面,或在收到異常提醒時,到測試現(xiàn)場排查問題。
圖4流程中,界面預(yù)設(shè),啟動語音識別都可通過簡單的shell指令來實現(xiàn),音頻的錄制和還原也有業(yè)界通用方法,本文不做詳細(xì)說明。本文著重介紹音頻灌入DA、獲取識別結(jié)果、遠(yuǎn)程提醒和監(jiān)控界面設(shè)計這4部分。4.2.1 音頻灌入
音頻灌入是指將噪聲和語音還原之后,直接灌入DA的麥克風(fēng)信號輸入端,替代麥克風(fēng)的現(xiàn)場拾音。其原理和方法如圖5所示。
圖4 車載語音識別率自動化測試流程示意
圖5 音頻灌入方法示意
采用音頻灌入代替現(xiàn)場拾音,有2個主要優(yōu)勢:
(1)可以避免測試環(huán)境不可控噪聲對測試結(jié)果的影響。該方法在測試過程中不需接入麥克風(fēng),所以不會受到外界噪聲的影響,減少了對測試環(huán)境的依賴。
(2)可以將實車測試轉(zhuǎn)為臺上測試。由于灌入的噪聲是實車采集,灌入的語音是經(jīng)頭肩模擬器在實車播放之后重新采集的音頻,即噪聲和語音都已考慮了車輛對聲音的影響,所以,識別率測試可以轉(zhuǎn)為臺上進(jìn)行,既可以節(jié)省實驗車輛資源,又增加了測試的自由度。
4.2.2 獲取識別結(jié)果
(1)識別結(jié)果原始文件:搭載語音識別功能的車輛,在DA內(nèi)部都會集成語音識別套件,內(nèi)含一系列配置文件、識別日志等。每次語音交互之后,在套件的日志里都會建立本次識別的交互信息,其中就包含了語音識別的文本結(jié)果。
(2)從日志文件中獲取識別結(jié)果并記錄:因日志文件包含了語音交互的多種信息,從繁雜的信息中篩選識別結(jié)果,是自動記錄結(jié)果并統(tǒng)計識別率的關(guān)鍵。
經(jīng)分析,日志文件中的信息雖然多樣,但每條信息都有其特定的標(biāo)簽和特征,不同廠家定義可能不同,但都遵循一定的規(guī)則。假定activity_type表征服務(wù)類型,ASR表征語音識別的結(jié)果等,那么,文本特征提取就可以解決結(jié)果篩選的問題。本文采用的是Python的正則匹配算法,即通過正則表達(dá)式,用特定的字符序列,提取日志文件中的匹配信息。
舉例,如果語句“今天天氣怎么樣”的識別結(jié)果在日志文件里的記錄為:
“activity_type:天氣查詢
ASR:今天天氣怎么樣”
那么提取識別結(jié)果“今天天氣怎么樣”的正則表達(dá)式可以定義為:
re.findall('ASR":"(.*?)",',data)#提取“ASR:”后面的內(nèi)容
4.2.3 自動記錄識別結(jié)果
本文對底層測試結(jié)果的記錄采用EXCEL表格形式,便于數(shù)據(jù)的對比和處理。示例如表1。
那么,指令“今天天氣怎么樣”的第一次識別結(jié)果需要被自動計入單元格C3,此時需要用到Python的Openpyxl模塊。
表1 底層測試結(jié)果記錄示例
Openpyxl是Python用來讀寫Excel的工具包,結(jié)合正
則匹配過程,完成“今天天氣怎么樣”的第一次測試之后,結(jié)果記錄的代碼可寫為:
find_lst=re.findall('ASR":"(.*?)",',data)#提取識別結(jié)果
for RecognationResult in find_lst:
“sheet_name”.write(2,2,''.join(RecognationResult).encode("utf-8"))#將匹配結(jié)果寫入第2行第2列(從0開始計數(shù))
4.2.4 遠(yuǎn)程提醒
首先說明遠(yuǎn)程提醒作用場景和觸發(fā)條件。
本自動化測試系統(tǒng)的目的是為了實現(xiàn)測試過程自動進(jìn)行,不需人工現(xiàn)場操作和記錄。但如果在測試過程中遇到異常情況導(dǎo)致語音識別不能正常進(jìn)行,如車輛/DA掉電、音頻灌入失敗、語音套件工作異常等,則需要暫停測試,并遠(yuǎn)程提醒測試人員及時處理。或者當(dāng)實驗全部完成時,也可以通過郵件將記錄實驗結(jié)果的文件以附件形式發(fā)送給測試人員進(jìn)行查看。
針對以上場景,收斂可執(zhí)行的觸發(fā)條件如表2所示。
表2 遠(yuǎn)程提醒的觸發(fā)條件
其次,關(guān)于遠(yuǎn)程提醒的方式,本系統(tǒng)采用郵件提醒,當(dāng)滿足遠(yuǎn)程提醒觸發(fā)條件時,通過Python的smtplib模塊[12],向測試人員定向發(fā)送提醒郵件。
郵件發(fā)送函數(shù)定義如下:
def send_email(msg):
subject='*****'
msg['Subject']=Header(subject,'utf-8')#郵件主題
sender='*******@***.com'#設(shè)定發(fā)送者郵箱
password='********'#發(fā)送郵箱服務(wù)器授權(quán)碼
smtpserver='smtp.**.com'#發(fā)送郵箱服務(wù)器地址
receiver=(****)#收件人可以是一個list
server=smtplib.SMTP()#實例化SMTP對象
server.connect(smtpserver,25)#(缺?。?/p>
server.login(sender,password)#登錄SMTP服務(wù)器
server.sendmail(sender,receiver,msg.as_string())#三個參數(shù),發(fā)件人,收件人,內(nèi)容。
4.2.5 監(jiān)控界面
為了增強測試過程與測試人員的交互體驗,并提高操作便利性,本系統(tǒng)開發(fā)了測試監(jiān)控界面,從實驗設(shè)定、啟??刂?、過程和結(jié)果實時統(tǒng)計幾部分達(dá)成交互需求(圖6)。
圖6 監(jiān)控界面示意
圖6 中各項目的作用見表3。
表3 監(jiān)控界面功能模塊簡介
上文按功能模塊介紹了本系統(tǒng)的主要開發(fā)工作,目前該系統(tǒng)已開發(fā)完成,也已通過實車實驗對系統(tǒng)的各個環(huán)節(jié)進(jìn)行了驗證。
表4為某次測試實例列舉,進(jìn)行人工測試與自動化測試效果對比。測試語句:200句;單句測試次數(shù):10次;總測試量:2 000句。
表4 測試實例
根據(jù)實驗結(jié)果對比,自動化測試識別率的結(jié)果符合預(yù)期,該系統(tǒng)基本滿足語音識別率的測試要求,可大大減少測試人力、減少對測試環(huán)境的依賴。后續(xù)也會在實際應(yīng)用中不斷優(yōu)化、改善該系統(tǒng),如豐富遠(yuǎn)程提醒的場景、優(yōu)化結(jié)果記錄的時間等。
本論文在深入分析車載語音識別過程的基礎(chǔ)上,總結(jié)當(dāng)前車載語音識別率的難點,以自動化的思想為主導(dǎo),將人工測試的各個環(huán)節(jié)轉(zhuǎn)化為自動操作,并開發(fā)了監(jiān)控界面,實現(xiàn)了實驗過程的可視化。該測試系統(tǒng)大大減少測試人力,并提高了測試結(jié)果的客觀性和一致性,操作簡單,功能全面,具有非常實用的工程應(yīng)用價值。
識別率是車載語音識別能力的一個重要的衡量指標(biāo),影響因素眾多,測試過程繁瑣。本論文側(cè)重于將人工測試的各個環(huán)節(jié)自動化進(jìn)行,但是對識別率測試而言,因不同地區(qū)方言、口音不同,語音樣本的選擇也很重要,對于該部分,本論文未做深入討論,所以為了使該系統(tǒng)更加完善,更加實用,后續(xù)工作可以針對口音選擇、錄音標(biāo)準(zhǔn)方面進(jìn)行深入研究。
另外,隨著車聯(lián)網(wǎng)技術(shù)的快速發(fā)展,相關(guān)的車聯(lián)網(wǎng)功能導(dǎo)入將持續(xù)增加,自動化測試的需求也日漸迫切。本論文討論的雖然只是針對車載語音識別率這一課題,但其自動化思路可以拓展到其他的測試領(lǐng)域,如后續(xù)可以針對車家互聯(lián)測試,對本系統(tǒng)進(jìn)行完善和升級。