微软Speech SDK1开发语音识别系统主要步骤.docx

上传人:牧羊曲112 文档编号:3514409 上传时间:2023-03-13 格式:DOCX 页数:5 大小:38.85KB
返回 下载 相关 举报
微软Speech SDK1开发语音识别系统主要步骤.docx_第1页
第1页 / 共5页
微软Speech SDK1开发语音识别系统主要步骤.docx_第2页
第2页 / 共5页
微软Speech SDK1开发语音识别系统主要步骤.docx_第3页
第3页 / 共5页
微软Speech SDK1开发语音识别系统主要步骤.docx_第4页
第4页 / 共5页
微软Speech SDK1开发语音识别系统主要步骤.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《微软Speech SDK1开发语音识别系统主要步骤.docx》由会员分享,可在线阅读,更多相关《微软Speech SDK1开发语音识别系统主要步骤.docx(5页珍藏版)》请在三一办公上搜索。

1、微软Speech SDK1开发语音识别系统主要步骤微软语音识别分两种模式:文本识别模式和命令识别模式.此两种模式的主要区别,主要在于识别过程中使用的匹配字典不同.前者使用的是通用字典,特点是内容多,覆盖的词汇量大,字典由sdk提供.适用于没有预定目标的随机听写之类的应用.同时因为词汇量大直接导致识别的精度降低,识别速度较慢.后者的字典需要 开发者自己编写,就是你们所说的xml文件.xml文件作为一种数据存储的方式,有一定的格式,定义了sdk需要确定的一些标签,和用以匹配的词汇.这种方式由开发者定义词汇的数量,大大降低匹配过程中需要检索的词汇量,提高了识别速度.同时因为侯选项极少,所以一般不会识

2、别错误.其缺点也是明显的:词汇量小,只有预先输入字典的词汇可以被识别出来,所以一般用来作为常用命令的识别,方便用户操作,代替菜单命令等. 利用微软Speech SDK 5.1在MFC中进行语音识别开发时的主要步骤,以Speech API 5.1+VC6为例: 1、初始化COM端口 一般在CWinApp的子类中,调用CoInitializeEx函数进行COM初始化,代码如下: :CoInitializeEx(NULL,COINIT_APARTMENTTHREADED); / 初始化COM 注意:调用这个函数时,要在工程设置-C/C+标签,Category中选Preprocessor,在Prepr

3、ocessor definitions:下的文本框中加上“,_WIN32_DCOM”。否则编译不能通过。 2、创建识别引擎 微软Speech SDK 5.1 支持两种模式的:共享和独享。一般情况下可以使用共享型,大的服务型程序使用InProc。如下: hr = m_cpRecognizer.CoCreateInstance(CLSID_SpSharedRecognizer);/Share hr = m_cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);/InProc 如果是Share型,可直接进到步骤3;如果是InProc型,必须使

4、用 ISpRecognizer:SetInput 设置语音输入。如下: CComPtr cpAudioToken; /定义一个token hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &cpAudioToken); /建立默认的音频输入对象 if (SUCCEEDED(hr) hr = m_cpRecognizer-SetInput(cpAudioToken, TRUE); 或者: CComPtr cpAudio; /定义一个音频对象 hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDI

5、OIN, &cpAudio);/建立默认的音频输入对象 hr = m_cpRecoEngine-SetInput(cpAudio, TRUE);/设置识别引擎输入源 3、创建识别上下文接口 调用 ISpRecognizer:CreateRecoContext 创建识别上下文接口,如下: hr = m_cpRecoEngine-CreateRecoContext( &m_cpRecoCtxt ); 4、设置识别消息 调用 SetNotifyWindowMessage 告诉Windows哪个是我们的识别消息,需要进行处理。如下: hr = m_cpRecoCtxt-SetNotifyWindowM

6、essage(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, ullInte

7、rest); 6、创建语法规则 语法规则是识别的灵魂,必须要设置。分为两种,一种是听说式,一种是命令式。首先 利用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-Cr

8、eateGrammar( GIDCMDCTRL, &m_cpCmdGrammar); 然后利用ISpRecoGrammar:LoadCmdxxx 加载语法,例如从CmdCtrl.xml中加载: WCHAR wszXMLFile20=L; MultiByteToWideChar(CP_ACP, 0, (LPCSTR)CmdCtrl.xml , -1, wszXMLFile, 256);/ANSI转UNINCODE hr = m_cpCmdGrammar-LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC); 注意:C&C时,语法文件使用xml格式,参见Speech S

9、DK 5.1 中的 Designing Grammar Rules。简单例子: 你 我 他 LANGI*=804代表简体中文,在.中增加命令。 7、在开始识别时,激活语法进行识别 hr = m_cpDictationGrammar-SetDictationState( SPRS_ACTIVE );/dictation hr = m_cpCmdGrammar-SetRuleState( NULL,NULL,SPRS_ACTIVE );/C&C 8、获取识别消息,进行处理 截获识别消息,然后处理。识别的结果放在CSpEvent的ISpRecoResult 中。如下: USES_CONVERSION

10、; CSpEvent event; switch (event.eEventId) case SPEI_RECOGNITION: /识别出了语音输入 m_bGotReco = TRUE; static const WCHAR wszUnrecognized = L; 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函数即可。 至此最简单的识别就完成了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号