嚴(yán)新華
(商洛學(xué)院 現(xiàn)代教育技術(shù)中心,陜西商洛 726000)
計算器是計算機上常用的工具軟件,在日常工作和生活中帶給人們極大的方便。Windows操作系統(tǒng)就自帶了一款計算器,除了這款計算器之外,許多開發(fā)者也開發(fā)了各種不同的計算器。這些計算器都采用鍵盤和鼠標(biāo)輸入,用鼠標(biāo)點擊輸入效率很低,而用鍵盤輸入很繁瑣,輸入數(shù)據(jù)較多時手指容易疲勞,容易輸錯,用戶體驗很差。如果能用語音控制輸入,只要說出需要計算的數(shù)值和運算就能看到相應(yīng)的結(jié)果,就能使用戶使用起來更加方便,使用戶可以輕松愉快地完成運算工作。而語音識別技術(shù)經(jīng)過多年的發(fā)展已經(jīng)逐漸進(jìn)入實用階段[1],IBM、微軟等公司都推出了自己的語音識別和合成引擎。本文就基于微軟公司的Speech SDK 5.1研究和設(shè)計了一款語音控制的計算器,經(jīng)測試輸入準(zhǔn)確率高,使用方便,能夠給用戶帶來更加良好的使用體驗。
微軟的Speech SDK 5.1是一套語音應(yīng)用程序開發(fā)包,可以識別多種語言,包括英文、中文和日文等[2]。SDK里提供了語音識別與合成的引擎組件和應(yīng)用程序?qū)咏涌?,還包括詳細(xì)的技術(shù)資料和幫助文檔[3]。它完全遵循COM標(biāo)準(zhǔn),底層的協(xié)議都采用COM組件的形式,與應(yīng)用程序?qū)油耆毩4]。和語音相關(guān)的工作由COM組件完成,包括語音識別引擎(Speech Recognition,簡稱SR)和語音合成引擎(Text To Speech,簡稱TTS),分別管理語音的識別與合成[5]。這使得應(yīng)用程序設(shè)計人員可以忽略復(fù)雜的語音技術(shù),直接調(diào)用相關(guān)的語音應(yīng)用程序接口(SAPI)來實現(xiàn)語音功能,從而專注于語音應(yīng)用程序的開發(fā)。SAPI 5.1的體系結(jié)構(gòu)如圖1所示。
圖1 SAPI 5.1的體系結(jié)構(gòu)
語音控制的計算器通過識別用戶的語音,代替鍵盤輸入相關(guān)的數(shù)字和運算符等,然后進(jìn)行計算并顯示結(jié)果,其結(jié)構(gòu)模型如圖2所示。
系統(tǒng)采用麥克風(fēng)將語音信號輸入給計算機,聲卡以一定頻率進(jìn)行數(shù)據(jù)采樣[6],然后進(jìn)行A/D轉(zhuǎn)換,將轉(zhuǎn)換后的語音數(shù)據(jù)送給語音識別引擎。語音識別引擎通過中文語音包和控制命令庫識別用戶說的數(shù)字、運算符等于等,然后用程序加以區(qū)分,最后運算并顯示結(jié)果。
圖2 語音控制計算器的結(jié)構(gòu)模型
語音控制計算器應(yīng)用Speech SDK的語音識別引擎識別用戶所說的數(shù)字和運算符等,其關(guān)鍵是提高輸入的準(zhǔn)確性和提供良好的交互性[7],其中的關(guān)鍵技術(shù)包括語法規(guī)則的選擇,語言識別的方式和識別錯誤的處理。
SpeechSDK包括聽寫語法(Dictation Grammer)和命令控制語法(Command and Control Grammer)兩種語法規(guī)則。聽寫語法用于連續(xù)語音識別,可以識別大段的話語,但準(zhǔn)確率不高。命令控制語法用于識別用戶在語法文件里自定義的一些特定詞匯和句子,準(zhǔn)確率相當(dāng)高。在語音控制計算器中,進(jìn)行的是非特定人有限詞匯的語音識別[8],這正好符合命令控制語法的特點,所以采用命令控制語法,既符合語音控制計算器的特點,又能提高語音輸入的準(zhǔn)確性。
識別用戶語音時通過識別運算符把用戶語音分段,分別識別成數(shù)值和運算符等,對數(shù)值的識別每個字識別成一個命令,這其中正確有效的XML文件是識別的關(guān)鍵。在語法規(guī)則的XML文件中編寫“加、減、乘、除”用來通過語音輸入運算符,再在XML文件中編寫“零、一、二、三、四、五、六、七、八、九”這些數(shù)字和“十、百、千、萬”這些數(shù)量單位用來識別數(shù)值,比如用戶語音“三百八十二”就可以識別為5個控制命令,并轉(zhuǎn)換為382,“二十一萬八千”就可識別為6個控制命令,并轉(zhuǎn)換為218000。為了方便用戶,也可讀成數(shù)字串的形式,省略數(shù)量單位,比如“四五二三”可以識別為4523。還要在語法規(guī)則的XML文件中編寫“等于”來實現(xiàn)結(jié)果的顯示。除此之外,把數(shù)據(jù)清零時需要一個清零的命令,為了避免在噪聲的干擾下語音識別引擎把“清零”識別成“零”,清零命令采用“清除”而不用“清零”。
為了讓用戶能直觀的看到語音輸入的數(shù)值和運算,以便及時發(fā)現(xiàn)語音識別中的錯誤,此計算器不像普通計算器那樣只顯示當(dāng)前數(shù)值,而是在系統(tǒng)識別出數(shù)字和運算符號等語音后在界面上顯示數(shù)學(xué)運算公式[9],并在識別出“等于”后顯示等號和最后的運算結(jié)果。在語法規(guī)則的XML文件中再編寫一個“回退”命令,如果用戶發(fā)現(xiàn)識別錯誤,說聲“回退”就可以清除剛才輸入的數(shù)值或運算符。
此語音控制計算器基于Speech SDK 5.1,調(diào)用語音識別引擎的COM接口,采用VC++6.0實現(xiàn),主要步驟如下:
1)編寫語法規(guī)則的XML文件,定義數(shù)字、運算符、等于、清除、回退等命令。
2)在主程序的WinMain函數(shù)中,主消息循環(huán)開始之前,初始化COM組件。
3)在主程序的InitInstance函數(shù)中,建立各個語音接口的實例,創(chuàng)建一個語音識別引擎。
4)創(chuàng)建命令識別上下文,設(shè)置語音事件通知消息,并告知語音識別引擎,只對命令識別事件感興趣。
5)從語法規(guī)則的XML文件中加載并激活語法規(guī)則,使識別引擎處于工作狀態(tài)。
6)識別引擎監(jiān)聽用戶輸入的語音,如果有語音符合定義的命令,則按照語法規(guī)則識別出來,并向主程序發(fā)出通知消息。
7)在主程序的消息處理函數(shù)WndProc里,加入一條消息處理,使主程序接收到語音識別通知消息后,調(diào)用命令識別響應(yīng)函數(shù)。
8)在命令識別響應(yīng)函數(shù)里通過IspPhrase接口獲取識別的結(jié)果,將識別的結(jié)果與預(yù)先加入規(guī)則庫的命令相比較,區(qū)分是數(shù)字還是運算符等。
9)把識別出來的數(shù)值和運算符等顯示到界面上并做好運算準(zhǔn)備,接收到“清除”命令時把數(shù)值和數(shù)學(xué)公式清零,接收到“回退”命令時清除前一個數(shù)值或者運算符,接收到“等于”命令時計算并顯示結(jié)果。
10)應(yīng)用程序退出時,卸載COM組件。
課題組抽取商洛學(xué)院某班級50個人,把此語音控制計算器分別在低噪音環(huán)境(安靜的實驗室)和中等噪音環(huán)境(公共計算機機房)進(jìn)行了測試。在不使用“回退”命令的情況下,每人每環(huán)境語音輸入運算20個,以檢驗此計算器的語音識別準(zhǔn)確率,測試結(jié)果如表1所示。
表1 不同噪音環(huán)境下語音控制計算器的運算正確率
從表1可見,在不使用“回退”命令的情況下,在中等噪音環(huán)境和低噪音環(huán)境下此計算器語音識別的準(zhǔn)確率都是比較高的,特別是在低噪音環(huán)境下,加上“回退”命令的使用可使此計算器達(dá)到實用程度。
與鍵盤和鼠標(biāo)控制比較起來,語音控制顯然輕松的多、方便的多,能夠帶來更加良好的用戶體驗。本文設(shè)計的語音控制計算器語音識別準(zhǔn)確率高、方便實用,通過增加更多的命令可以擴展科學(xué)計算功能,使它功能更加強大。
[1]倪崇嘉,劉文舉,徐 波.漢語大詞匯量連續(xù)語音識別系統(tǒng)研究進(jìn)展[J].中文信息學(xué)報,2009,23(1):112-123.
[2]李禹材,左友東,鄭秀清,等.基于Speech SDK的語音控制應(yīng)用程序的設(shè)計與實現(xiàn)[J].計算機應(yīng)用,2004,24(6):114-116.
[3]吳 萍,胡瑞敏,艾浩軍.火車票查詢系統(tǒng)中語音識別的研究及實現(xiàn)[J].計算機工程與應(yīng)用,2003,39(33):65-68.
[4]林鳴霄.基于Speech SDK的語音識別技術(shù)在三維仿真中的應(yīng)用[J].計算機技術(shù)與發(fā)展,2011,21(11):160-162.
[5]陳興文,王 剛,洪 鷹.語音響應(yīng)及其應(yīng)用系統(tǒng)的開發(fā)[J].制造業(yè)自動化,2002,24(10):77-79
[6]涂惠燕,陳一寧.基于語音識別和手機平臺的英語口語發(fā)音學(xué)習(xí)系統(tǒng)[J].計算機應(yīng)用與軟件,2011,28(9):64-66.
[7]李蘭芳,汪道輝,董海疆,等.語音識別在MP3播放器上的應(yīng)用[J].電子技術(shù)應(yīng)用,2006,32(12):5-6.
[8]黃子君,張 亮.語音識別技術(shù)及應(yīng)用綜述[J].江西教育學(xué)院學(xué)報,2010,31(3):44-46.
[9]梁 俊,楊燕翔,王 娟,等.基于DSP的語音識別計算器設(shè)計[J].電子設(shè)計工程,2010,18(5):135-138.