微軟Speech SDK 5.1開發(fā)語音識別系統(tǒng)主要步驟.doc_第1頁
微軟Speech SDK 5.1開發(fā)語音識別系統(tǒng)主要步驟.doc_第2頁
微軟Speech SDK 5.1開發(fā)語音識別系統(tǒng)主要步驟.doc_第3頁
微軟Speech SDK 5.1開發(fā)語音識別系統(tǒng)主要步驟.doc_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

利用微軟Speech SDK 5.1開發(fā)語音識別系統(tǒng)主要步驟 微軟語音識別分兩種模式:文本識別模式和命令識別模式.此兩種模式的主要區(qū)別,主要在于識別過程中使用的匹配字典不同.前者使用的是通用字典,特點是內(nèi)容多,覆蓋的詞匯量大,字典由sdk提供.適用于沒有預(yù)定目標(biāo)的隨機聽寫之類的應(yīng)用.同時因為詞匯量大直接導(dǎo)致識別的精度降低,識別速度較慢.后者的字典需要 開發(fā)者自己編寫,就是你們所說的xml文件.xml文件作為一種數(shù)據(jù)存儲的方式,有一定的格式,定義了sdk需要確定的一些標(biāo)簽,和用以匹配的詞匯.這種方式由開發(fā)者定義詞匯的數(shù)量,大大降低匹配過程中需要檢索的詞匯量,提高了識別速度.同時因為侯選項極少,所以一般不會識別錯誤.其缺點也是明顯的:詞匯量小,只有預(yù)先輸入字典的詞匯可以被識別出來,所以一般用來作為常用命令的識別,方便用戶操作,代替菜單命令等. 利用微軟Speech SDK 5.1在MFC中進(jìn)行語音識別開發(fā)時的主要步驟,以Speech API 5.1+VC6為例: 注意:要在工程設(shè)置(project settings)添加sapi.lib文件和一些頭文件。1、初始化COM端口 一般在CWinApp的子類中,調(diào)用CoInitializeEx函數(shù)進(jìn)行COM初始化,代碼如下: :CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); / 初始化COM 2、創(chuàng)建識別引擎 微軟Speech SDK 5.1 支持兩種模式的:共享(Share)和獨享(InProc)。一般情況下可以使用共享型,大的服務(wù)型程序使用InProc。如下: hr = m_cpRecognizer.CoCreateInstance(CLSID_SpSharedRecognizer);/Share hr = m_cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);/InProc 如果是Share型,可直接進(jìn)到步驟3;如果是InProc型,必須使用 ISpRecognizer:SetInput 設(shè)置語音輸入。如下: CComPtr cpAudioToken; /定義一個token hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &cpAudioToken); /建立默認(rèn)的音頻輸入對象 if (SUCCEEDED(hr) hr = m_cpRecognizer-SetInput(cpAudioToken, TRUE); 或者: CComPtr cpAudio; /定義一個音頻對象 hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio);/建立默認(rèn)的音頻輸入對象 hr = m_cpRecoEngine-SetInput(cpAudio, TRUE);/設(shè)置識別引擎輸入源 3、創(chuàng)建識別上下文接口 調(diào)用 ISpRecognizer:CreateRecoContext 創(chuàng)建識別上下文接口(ISpRecoContext),如下: hr = m_cpRecoEngine-CreateRecoContext( &m_cpRecoCtxt ); 4、設(shè)置識別消息 調(diào)用 SetNotifyWindowMessage 告訴Windows哪個是我們的識別消息,需要進(jìn)行處理。如下: hr = m_cpRecoCtxt-SetNotifyWindowMessage(m_hWnd, WM_RECOEVENT, 0, 0); SetNotifyWindowMessage 定義在 ISpNotifySource 中。 5、設(shè)置我們感興趣的事件 其中最重要的事件是”SPEI_RECOGNITION“。參照 SPEVENTENUM。代碼如下: const ULONGLONG ullInterest = SPFEI(SPEI_SOUND_START) | SPFEI(SPEI_SOUND_END) | SPFEI(SPEI_RECOGNITION) ; hr = m_cpRecoCtxt-SetInterest(ullInterest, ullInterest); 6、創(chuàng)建語法規(guī)則 語法規(guī)則是識別的靈魂,必須要設(shè)置。分為兩種,一種是聽說式(dictation),一種是命令式(command and control-C&C)。首先 利用ISpRecoContext:CreateGrammar 創(chuàng)建語法對象,然后加載不同的語法規(guī)則,如下: /dictation hr = m_cpRecoCtxt-CreateGrammar( GIDDICTATION, &m_cpDictationGrammar ); if (SUCCEEDED(hr) hr = m_cpDictationGrammar-LoadDictation(NULL, SPLO_STATIC);/加載詞典 /C&C hr = m_cpRecoCtxt-CreateGrammar( GIDCMDCTRL, &m_cpCmdGrammar); 然后利用ISpRecoGrammar:LoadCmdxxx 加載語法,例如從CmdCtrl.xml中加載: WCHAR wszXMLFile20=L; MultiByteToWideChar(CP_ACP, 0, (LPCSTR)CmdCtrl.xml , -1, wszXMLFile, 256);/ANSI轉(zhuǎn)UNINCODE hr = m_cpCmdGrammar-LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC); 注意:C&C時,語法文件使用xml格式,參見Speech SDK 5.1 中的 Designing Grammar Rules。簡單例子: 你 我 他 LANGI*=804代表簡體中文,在.中增加命令。 7、在開始識別時,激活語法進(jìn)行識別 hr = m_cpDictationGrammar-SetDictationState( SPRS_ACTIVE );/dictation hr = m_cpCmdGrammar-SetRuleState( NULL,NULL,SPRS_ACTIVE );/C&C 8、獲取識別消息,進(jìn)行處理 截獲識別消息(WM_RECOEVENT),然后處理。識別的結(jié)果放在CSpEvent的ISpRecoResult 中。如下: USES_CONVERSION; CSpEvent event; switch (event.eEventId) case SPEI_RECOGNITION: /識別出了語音輸入 m_bGotReco = TRUE; static const WCHAR wszUnrecognized = L; CSpDynamicString dstrText; /取得識別結(jié)果 if (FAILED(event.RecoResult()-GetText(SP_GETWHOLEPHRASE, SP_GETWHOLEPHRASE, TRUE ,&dstrText, NULL) dstrText = wszUnrecognized; BSTR SRo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論