基于語音識別的IVR系統(tǒng)的設計與實現(xiàn)
4 語音識別模塊的實現(xiàn)
語音識別系統(tǒng)的開發(fā)可以采用基于模板匹配的動態(tài)時間規(guī)整(DTW)、基于統(tǒng)計參數(shù)模型的隱馬爾可夫模型(HMM),神經(jīng)網(wǎng)絡等技術,他們都是針對某些具體應用的,其模型參數(shù)的獲得需要對大規(guī)模的樣本進行學習,對于非特定人語音識別往往需要采集數(shù)百人的語音樣本,其工作量是相當大的。隨著語音研究的不斷發(fā)展,已經(jīng)出現(xiàn)了眾多的語音識別開發(fā)工具:如Microsoft Speech SDK,IBM ViaVoice等。他們都提供了語音識別和語音合成的二次開發(fā)平臺,并且微軟的Speech SDK是完全免費的,它具有識別率高,識別速度快,可移植性好,支持多種語言等優(yōu)點。因此它被廣泛應用于各個領域。
4.1 Microsoft Speech SDK 5.1簡介
SAPI SDK是微軟公司免費提供的語音應用開發(fā)工具包,這個SDK中包含了語音應用設計接口(SAPI)、微軟的連續(xù)語音識別引擎(MCSR)以及微軟的語音合成(TTS)引擎等等。目前的5.1版本一共可以支持3種語言的識別 (英語,漢語和日語)以及2種語言的合成(英語和漢語)。SAPI中還包括對于低層控制和高度適應性的直接語音管理、訓練向導、事件、語法編譯、資源、語音識別(SR)管理以及TTS管理等強大的設計接口。
語音識別的功能主要由一系列COM接口協(xié)調完成。其中主要的接口有下面這些:
IspRecognizer接口:用于創(chuàng)建語音識別引擎的實例,識別引擎有兩種:獨占引擎(InProcRecognizer)和共享引擎(SharedRecognizer)。獨占的引擎對象是在本程序的進程中創(chuàng)建,只能由本應用程序使用,而共享的引擎是在一個單獨的進程中創(chuàng)建,可以供多個應用程序共同使用。
IspRecoContext接口:主要用于接受和發(fā)送與語音識別消息相關的事件消息,裝載和卸載識別語法資源
IspRecoGrammar接口:通過這個接口,應用程序可以載入并激活語法規(guī)則,而語法規(guī)則里定義了待識別的單詞、短語和句子。通常語法規(guī)則有兩種:聽寫語法(DictationGrammer)和命令控制語法(CommandandControlGrammer)。聽寫語法用于連續(xù)語音識別,可以識別出引擎詞典中大量的詞匯;命令控制語法用于識別用戶自定義的詞匯。
IspPhrase接口:通過這個接口,應用程序可以獲得識別信息,如:如識別結果、識別的規(guī)則、語義標示和屬性信息等。
IspAudioPlug接口:通過這個接口,應用程序可以將內存中的語音數(shù)據(jù)送到語音識別引擎,進行識別。
4.2 識別模塊的具體實現(xiàn)
由于命令控制語法方式可以限制識別的詞匯量,并且這種識別技術不需要對說話人事先進行訓練,因此在實際應用中具有較高的魯棒性和較高的識別效率。本系統(tǒng)的識別詞匯包括:“車輛信息查詢”、“駕駛證信息查詢”和26個英文字母10個數(shù)字,我們首先編寫了包含這些特定詞匯的語法文件。
在使用接口函數(shù)前,首先調用CoInitialize(NULL)初始化COM對象,然后創(chuàng)建語音識別引擎、語法規(guī)則上下文和識別語法,并調用函數(shù)LoadCmdFromFile裝載文法識別規(guī)則。微軟識別引擎是通過SAPI由事件觸發(fā)來通知上層的應用程序??梢哉{用SetInterest來注冊自己感興趣的事件。系統(tǒng)默認的事件為SPEI_RECOGNITION,該事件表明當前已有識別結果返回,這時上層應用程序可以通過調用ISpRecoResult接口的GetText方法獲得識別結果。
微軟識別引擎的語音輸入有多種方式,通常都是通過聲卡直接輸入,也可以通過其他語音輸入流。本系統(tǒng)的語音數(shù)據(jù)是從語音卡取得的實時數(shù)據(jù),將其存入內存,然后通過調用ISpAudioPlug的SetData方法將其送入識別引擎。
4.3 系統(tǒng)實現(xiàn)的難點和解決方案
車牌的識別詞匯中包含10個數(shù)字和26個英文字母,這些詞匯的發(fā)音有許多是相同或相近的,比如:E和1,R和2,T和7,D和B,M和N,X和S。這些詞匯在識別時很容易產(chǎn)生誤識,有的甚至完全不能識別。如果單從算法上來考慮,是很難解決這些問題的。因此我們考慮從系統(tǒng)的流程出發(fā),當用戶認為識別有誤時,可以輸入識別錯誤的位數(shù),然后系統(tǒng)根據(jù)用戶的輸入,提供幾個備選結果,供用戶選擇,這樣極大的提高了系統(tǒng)識別率。
然而Microsoft Speech SDK 5.1在命令控制語法方式下是不提供多選的,只有在聽寫方式下才提供多選,但是聽寫方式下的詞匯量又無法限制。對此我們的想法是這樣的:當系統(tǒng)識別出結果以后,將有效語音段保存起來,并且把識別結果從命令控制方式下的詞匯量中移除,然后將保存有效語音段再次送入識別引擎,當系統(tǒng)識別出結果以后,再次重復以上步驟,直到識別出給定個數(shù)的結果。
5 操作方法
用戶用清晰、自然的語調說出需查詢信息的類別,如:車輛信息查詢、駕駛證信息查詢,系統(tǒng)識別模塊識別出結果后,轉入相應的信息查詢模塊。當用戶需要查詢車輛信息時,首先要求用清晰、較緩慢的語調說出車牌號,系統(tǒng)識別模塊識別出結果后,通過TTS將結果播放給用戶。這時用戶可以輸入車牌號碼中識別錯誤的位數(shù),系統(tǒng)根據(jù)用戶的輸入提供7個備選結果讓用戶進行選擇。用戶選擇確認無誤后,系統(tǒng)將結果遞交給后臺數(shù)據(jù)庫進行查詢,并將檢索到的信息播放給用戶。
6 試驗結果及分析
對于信息類別的識別由于其詞匯量少,音節(jié)較多,所以識別率很高,達到了100%。但是對于字母和數(shù)字的組合識別,由于其詞匯量較多,音節(jié)簡單,而且有大量相同和相近的詞匯,很容易受到噪聲的干擾,所以識別率不是很理想。然而,當我們提供七個備選結果后,即使在有一定噪音的環(huán)境下,系統(tǒng)的識別率達也能達到96%以上。由此表明該系統(tǒng)是穩(wěn)定的和實用的。
評論