教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

微软Speech SDK 5.1开发语音识别系统主要步骤

来源:网络收集 时间:2026-08-26
导读: 利用微软Speech SDK 5.1开发语音识别系统主要步骤 微软语音识别分两种模式:文本识别模式和命令识别模式.此两种模式的主要区别,主要在于识别过程中使用的匹配字典不同.前者使用的是通用字典,特点是内容多,覆盖的词汇量大,字典由sdk提供.适用于没有预定目标的

利用微软Speech SDK 5.1开发语音识别系统主要步骤

微软语音识别分两种模式:文本识别模式和命令识别模式.此两种模式的主要区别,主要在于识别过程中使用的匹配字典不同.前者使用的是通用字典,特点是内容多,覆盖的词汇量大,字典由sdk提供.适用于没有预定目标的随机听写之类的应用.同时因为词汇量大直接导致识别的精度降低,识别速度较慢.后者的字典需要 开发者自己编写,就是你们所说的xml文件.xml文件作为一种数据存储的方式,有一定的格式,定义了sdk需要确定的一些标签,和用以匹配的词汇.这种方式由开发者定义词汇的数量,大大降低匹配过程中需要检索的词汇量,提高了识别速度.同时因为侯选项极少,所以一般不会识别错误.其缺点也是明显的:词汇量小,只有预先输入字典的词汇可以被识别出来,所以一般用来作为常用命令的识别,方便用户操作,代替菜单命令等.

利用微软Speech SDK 5.1在MFC中进行语音识别开发时的主要步骤,以Speech API

5.1+VC6为例:

1、初始化COM端口

一般在CWinApp的子类中,调用CoInitializeEx函数进行COM初始化,代码如下: ::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); // 初始化COM

注意:调用这个函数时,要在工程设置(project settings)->C/C++标签,Category中选Preprocessor,在Preprocessor definitions:下的文本框中加上“,_WIN32_DCOM”。否则编译不能通过。

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; //定义一个token

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 创建识别上下文接口(ISpRecoContext),如下: hr = m_cpRecoEngine->CreateRecoContext( &m_cpRecoCtxt );

4、设置识别消息

调用 SetNotifyWindowMessage 告诉Windows哪个是我们的识别消息,需要进行处理。如下:

利用微软Speech SDK 5.1开发语音识别系统主要步骤

hr = m_cpRecoCtxt->SetNotifyWindowMessage(m_hWnd, WM_RECOEVENT, 0, 0); SetNotifyWindowMessage 定义在 ISpNotifySource 中。

5、设置我们感兴趣的事件

其中最重要的事件是”SPEI_RECOGNITION“。参照 SPEVENTENUM。代码如下:

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 加载语法,例如从CmdCtrl.xml中加载: WCHAR wszXMLFile[20]=L"";

MultiByteToWideChar(CP_ACP, 0, (LPCSTR)"CmdCtrl.xml" , -1, wszXMLFile, 256);//ANSI转UNINCODE

hr = m_cpCmdGrammar->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);

注意:C&C时,语法文件使用xml格式,参见Speech SDK 5.1 中的 Designing Grammar Rules。简单例子:

<GRAMMAR LANGID="804">

<DEFINE>

<ID NAME="CMD" VAL="10"/>

</DEFINE>

<RULE NAME="COMMAND" ID="CMD" TOPLEVEL="ACTIVE">

<L>

<p>你</P>

<p>我</p>

<p>他</p>

</L>

</RULE>

</GRAMMAR>

LANGI*="804"代表简体中文,在<*>...</*>中增加命令。

利用微软Speech SDK 5.1开发语音识别系统主要步骤

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函数即可。

至此最简单的识别就完成了。

…… 此处隐藏:1778字,全部文档内容请下载后查看。喜欢就下载吧 ……
微软Speech SDK 5.1开发语音识别系统主要步骤.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/1443549.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)