Microsoft Speech SDK孤立词语音识别

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Microsoft Speech SDK实现用户孤立词识别的过程如下:
1、初始化COM端口:在CWinApp的子类中,调用CoInitializeEx函数进行COM 初始化:::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
2、创建识别引擎:微软Speech SDK 5.1 支持两种模式的:共享(Share)和独享(InProc)。

一般情况下可以使用共享型,大的服务型程序使用InProc。

如下:hr = m_cpRecognizer.CoCreateInstance(CLSID_SpSharedRecognizer);//Share hr = m_cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);//InProc 如果是Share型,直接到步骤3;如果是InProc型,必须使用ISpRecognizer::SetInput 设置输入:CComPtr<ISpObjectToken> cpAudioToken;
hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN,
&cpAudioToken);
if (SUCCEEDED(hr)) { hr = m_cpRecognizer->SetInput(cpAudioToken, TRUE);}
或者:CComPtr<ISpAudio> cpAudio;
hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio);
hr = m_cpRecoEngine->SetInput(cpAudio, TRUE);
3、创建识别上下文接口:调用ISpRecognizer::CreateRecoContext 创建识别上下文接口:hr = m_cpRecoEngine->CreateRecoContext( &m_cpRecoCtxt );
4、设置识别消息:调用SetNotifyWindowMessage 告诉Windows哪个是我们的识别消息,需要进行处理:
hr = m_cpRecoCtxt->SetNotifyWindowMessage(m_hWnd, WM_RECOEVENT, 0, 0);
5、设置事件:最重要的事件是“SPEI_RECOGNITION”:
const ULONGLONG ullInterest = SPFEI(SPEI_SOUND_START) |
SPFEI(SPEI_SOUND_END) | SPFEI(SPEI_RECOGNITION) ;
hr = m_cpRecoCtxt->SetInterest(ullInterest, ullInterest);
6、创建语法规则:语法规则分为两种,一种是听说式(dictation),一种是命令式(command and control---C&C)。

首先利用ISpRecoContext::CreateGrammar 创建语法对象,然后加载不同的语法规则:
//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 加载语法:
WCHAR wszXMLFile[20]=L"";
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)"CmdCtrl.xml" , -1, wszXMLFile, 256);
hr = m_cpCmdGrammar->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);
7、激活语法进行识别:
hr = m_cpDictationGrammar->SetDictationState( SPRS_ACTIVE );//dictation hr = m_cpCmdGrammar->SetRuleState( NULL,NULL,SPRS_ACTIVE );//C&C 8、获取识别消息,进行处理:
截获识别消息(WM_RECOEVENT),然后处理。

识别的结果放在CSpEvent 的ISpRecoResult 中:
USES_CONVERSION;
CSpEvent event;
switch (event.eEventId)
{ case SPEI_RECOGNITION:
{
m_bGotReco = TRUE;
static const WCHAR wszUnrecognized[] = L"<Unrecognized>";
CSpDynamicString dstrText;
if (FAILED(event.RecoResult()->GetText(SP_GETWHOLEPHRASE,
SP_GETWHOLEPHRASE, TRUE ,&dstrText, NULL)))
{ dstrText = wszUnrecognized; }
BSTR SRout;
dstrText.CopyToBSTR(&SRout);
CString Recstring;
Recstring.Empty();
Recstring = SRout;
......
}
break;
}
9、释放创建的引擎、识别上下文对象、语法等,调用相应的Release函数。

通过所设计的用户语音识别模块,已实现简单查询命令和路名、站名的识别功能,为增强系统智能度和友好人机界面提供支持。

相关文档
最新文档