微软Speech SDK 5.1开发语音识别系统主要步骤
- 格式:docx
- 大小:16.65 KB
- 文档页数:3
Windows TTS开发介绍开篇介绍:我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能,其实这就是利用的Windows的TTS(Text To Speech)语音引擎。
它包含在Windows Speech SDK开发包中。
我们也可以使用此开发包根据自己的需要开发程序。
鸡啄米下面对TTS功能的软件开发过程进行详细介绍。
一.SAPI SDK的介绍SAPI,全称是The Microsoft Speech API。
就是微软的语音API。
由Windows Speech SDK提供。
Windows Speech SDK包含语音识别SR引擎和语音合成SS引擎两种语音引擎。
语音识别引擎用于识别语音命令,调用接口完成某个功能,实现语音控制。
语音合成引擎用于将文字转换成语音输出。
SAPI包括以下几类接口:Voice Commands API、Voice Dictation API、Voice Text API、Voice Telephone API和Audio Objects API。
我们要实现语音合成需要的是Voice Text API。
目前最常用的Windows Speech SDK版本有三种:5.1、5.3和5.4。
Windows Speech SDK 5.1版本支持xp系统和server 2003系统,需要下载安装。
XP系统默认只带了个Microsoft Sam英文男声语音库,想要中文引擎就需要安装Windows Speech SDK 5.1。
Windows Speech SDK 5.3版本支持Vista系统和Server 2008系统,已经集成到系统里。
Vista和Server 2003默认带Microsoft lili中文女声语音库和Microsoft Anna英文女声语音库。
Windows Speech SDK 5.4版本支持Windows7系统,也已经集成到系统里,不需要下载安装。
关于SAPI的简介API 概述SAPI API在一个应用程序和语音引擎之间提供一个高级别的接口。
SAPI 实现了所有必需的对各种语音引擎的实时的控制和管理等低级别的细节。
SAPI引擎的两个基本类型是文本语音转换系统(TTS)和语音识别系统。
TTS系统使用合成语音合成文本字符串和文件到声音音频流。
语音识别技术转换人类的声音语音流到可读的文本字符串或者文件。
文本语音转换API应用程序能通过IspVoice的对象组建模型(COM)接口控制文本语音转换。
一旦一个应用程序有一个已建立的IspVoice对象(见Text-to-Speech指南),这个应用程序就只需要调用ISpVoice::Speak 就可以从文本数据得到发音。
另外,ISpVoice接口也提供一些方法来改变声音和合成属性,如语速ISpVoice::SetRate,输出音量ISpVoice::SetVolume,改变当前讲话的声音ISpVoice::SetVoice 等。
特定的SAPI控制器也可以嵌入输入文本使用来实时的改变语音合成器的属性,如声音,音调,强调字,语速和音量。
这些合成标记在sapi.xsd中,使用标准的XML格式,这是一个简单但很强大定制TTS语音的方法,不依赖于特定的引擎和当前使用的声音。
ISpVoice::Speak方法能够用于同步的(当完全的完成朗读后才返回)或异步的(立即返回,朗读在后台处理)操作。
当同步朗读(SPF_ASYNC)时,实时的状态信息如朗读状态和当前文本位置可以通过ISpVoice::GetStatus得到。
当异步朗读时,可以打断当前的朗读输出以朗读一个新文本或者把新文本自动附加在当前朗读输出的文本的末尾。
除了ISpVoice接口之外SAPI也为高级TTS应用程序提供许多有用的COM接口。
事件SAPI用标准的回调机制(Window消息, 回调函数or Win32 事件)来发送事件来和应用程序通信。
对于TTS,事件大多用于同步地输出语音。
计算机语音识别模块的使用说明书
使用说明:
一.运行本程序需要安装Microsoft Speech SDK语音开发工具。
其安装方法如下:
Microsoft Speech SDK可以在微软的官方网站免费获得,需要下载两个自解压文件,一个是开发包的安装文件(speechsdk51.exe),一个是中文的语言包(speechskd51LangPack.exe)。
文件如图1.1所示。
图1.1 安装文件
运行speechsdk51.exe会弹出自解压对话框,如图1.2所示。
图1.2 解压对话框
单击“Unzip”按钮可以将文件解压到“D:\SDK”路径下,运行“D:\SDK”下的setup.exe
来进行安装,运行setup.exe会弹出Microsoft Speech SDK5.1的安装向导,如图1.3所示
图1.3 安装向导
在向导中,通过单击“Next”按钮一步一步根据提示进行安装。
安装完成后计算机就具有了语音识别能力,输入法中会增加语音输入法。
但此时只能识别英语,要想使计算机能够识别汉语,还需要安装语言包,运行speechskd51LangPack.exe将文件解压,同开发包一样使用setup.exe进行安装。
二.如果不能正常朗读,先运行调节朗读模块,进行默认的初始化
带口型的朗读,朗读英文选Microsoft Mike。
基于微软语音引擎的语音识别设计作者:刘欢来源:《电脑知识与技术》2017年第20期摘要:本设计是利用微软语音软件开发包Speech SDK,在vc++6.0的MFC平台下实现计算机语音识别的过程。
通过对微软语音开发理论的学习与探索,了解MFC平台的开发与应用,掌握Microsoft Speech SDK(SAPI)在VC++6.0下的加载运行,设计出的在Windows系统下的人机交互语音识别系统。
系统总体设计包含上位机设计和下位机设计,以上位机软件设计为主体设计部分,下位机部分作为功能扩展部分,其中下位机设计使用STC89C51单片机作为主控芯片。
整个系统设计旨在为人们日常生活提供更多的便利。
关键词:语音识别:Speech SDK;MFC语音识别技术的产生与不断发展的过程已经有六十多年的历史,在计算机与现代通信技术的不断进步,语音识别技术的进步及其扩大的应用领域也得以体现。
目前,一些基于语音识别技术的产品如语音拨号电话,智能语音搜索引擎等在国内外都相继得到了开发与使用。
最早利用计算机技术实现语音识别技术的有IBM、APPLE、GOOGLE等公司,在目前的Win-dows、Android等智能移动设备中都相继得到了开发。
语音识别技术是语音领域的重要组成部分,同时在计算机科学领域中发挥着不可或缺的作用。
在应用领域中语音识别是人机交互方式的一个重要应用,伴随着语音技术、通信技术、智能物联网技术的发展,语音识别技术将在远程智能控制、教育培训、电子商务管理等各个新型领域中发挥着更大的作用。
本设计利用微软语音开发包Microsoft Speech SDK 5.1开发设计出具有语音识别功能的软件。
该软件的使用是在Windows操作系统下运行的,识别相关语音命令来加载运行所指定的功能。
1系统上位机设计1.1语音识别的过程语音识别的编程离不开由上所述的几种语音识别引擎接口即以下四个语音引擎RecoGrammar_ISP,Recognizer_ISP,ISpPhrase以及CRInstanceCreat_ISP它们都遵循COM组件的工作原理和Windows应用程序的工作原理即消息驱动机制,在实现过程中首先需要构造出操作语音识别的类即CSpeechRecog-nition,接下来即可通过CSpeechRecognition类来实现一个语音识别程序。
用Microsoft Speech SDK5.1实现中文语音交互的方法易定
【期刊名称】《电脑开发与应用》
【年(卷),期】2005(018)004
【摘要】为了改变人们按键操纵的传统概念和习惯,实现真正意义上的人机对话,结合实例阐述了用Microsoft Speech SDK5.1实现中文语音交互的方法,可应用于各种中文语音交互公共信息服务系统.
【总页数】2页(P62-63)
【作者】易定
【作者单位】深圳职业技术学院
【正文语种】中文
【中图分类】TN912.3
【相关文献】
1.利用Microsoft Excel与1stOpt实现矿浆品位仪标定的方法 [J], 丛浩杰;刘家勇;蒋宝庆
2.基于Microsoft Speech SDK5.1的重要天气报语音识别 [J], 林凯;王佃军;霍慧峰
3.基于Microsoft Speech SDK5.1实现中英文朗读 [J], 李松;沈文轩
4.求解滚齿机挂轮的一种实用方法及Microsoft VisualC++6.0实现 [J], 孙杰;王金凯
5.基于ArcGIS与Speech SDK的中文语音交互式GIS实现方法 [J], 吴建华;余梦娟;刘强;舒志刚
因版权原因,仅展示原文概要,查看原文内容请购买。
SPEECHSDK51LANGPACK.EXESPEECHSDK51LANGPACK.EXE:语音识别软件开发包的语言包资源简介:SPEECHSDK51LANGPACK.EXE是一个针对语音识别软件开发包(SDK)的语言包资源文件。
它为开发人员提供了在使用语音识别技术进行应用程序开发时所需的多种语言资源支持。
语音识别技术在现代计算机科学领域中扮演着重要的角色。
它允许计算机系统通过解析语音输入来理解和执行用户的指令。
随着语音助手和自动语音识别系统的普及,对语音识别软件开发的需求不断增长。
因此,SPEECHSDK51LANGPACK.EXE的出现可以大大提高语音识别软件开发的多语言支持能力,使开发人员能够创建支持不同语言的语音识别应用程序。
主要功能:1. 多语言支持:SPEECHSDK51LANGPACK.EXE提供了各种语言资源,包括但不限于英语、法语、德语、西班牙语、意大利语、中文等。
这使得开发人员可以根据目标用户的语言偏好进行应用程序开发。
无论用户使用的是什么语言,都可以通过该语言包资源进行语音识别。
2. 语音翻译:该语言包资源还包含了诸如翻译功能等附加语言处理能力。
开发人员可以利用这些功能来将语音输入转换为其他语言,实现语音翻译功能。
这对于需要跨语言沟通的应用程序非常有用,例如国际旅行或在线会议。
3. 自定义语音模型:开发人员可以利用SPEECHSDK51LANGPACK.EXE中的语言包资源来创建自定义的语音识别模型。
这允许他们针对特定的行业或领域进行精确的语音识别。
通过自定义语音模型,开发人员可以提高语音识别的准确性和效果,为用户提供更好的体验。
4. 语音合成:除了语音识别功能,SPEECHSDK51LANGPACK.EXE 还提供了语音合成的能力。
这允许开发人员将文本转换为具有自然流畅语音的音频输出。
这种功能可以广泛应用于语音助手、机器人交互、导航系统等领域,为用户提供更直观、个性化的体验。
语音识别流程
语音识别技术是一种将语音信号转换为文本或命令的技术,它在现代社会中得到了广泛的应用。
语音识别技术的发展,为人们的生活和工作带来了极大的便利。
下面我们将介绍一下语音识别的流程。
首先,语音信号的采集是语音识别的第一步。
在这一步骤中,我们需要使用麦克风等设备来采集用户的语音信号。
采集到的语音信号将被传输到语音识别系统中进行处理。
接下来是语音信号的预处理。
在预处理过程中,语音信号会经过去噪、语音端点检测、音频增强等处理,以提高后续处理的准确性和鲁棒性。
然后是特征提取。
在这一步骤中,语音信号将被转换成特征参数,比如梅尔频率倒谱系数(MFCC)、线性预测编码(LPC)等。
这些特征参数将被用于后续的模式匹配和识别。
接着是模式匹配和识别。
在这一步骤中,语音识别系统将利用训练好的模型和特征参数进行匹配和识别。
常见的模型包括隐马尔
可夫模型(HMM)、深度神经网络(DNN)等。
通过模式匹配和识别,语音信号将被转换成文本或命令。
最后是后处理和结果生成。
在这一步骤中,系统会对识别结果
进行校正和修正,以提高识别的准确性。
最终的识别结果将被生成
并输出给用户使用。
总的来说,语音识别的流程包括语音信号的采集、预处理、特
征提取、模式匹配和识别、以及后处理和结果生成。
通过这些步骤,语音信号将被准确地转换成文本或命令,为用户提供便利和高效的
语音交互体验。
随着技术的不断发展,语音识别技术将会在更多的
领域得到应用,为人们的生活带来更多的便利和乐趣。
Speech API使用方法微软语音识别分两种模式:文本识别模式和命令识别模式.此两种模式的主要区别,主要在于识别过程中使用的匹配字典不同.前者使用的是通用字典,特点是内容多,覆盖的词汇量大,字典由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);//Sharehr = m_cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);// InProc如果是Share型,可直接进到步骤3;如果是InProc型,必须使用ISpRecognizer::SetInput 设置语音输入。
基于Microsoft speech sdk5.1的英语语音合成教学软件的设计与实现Microsoft Speech SDK5.1是目前最新的微软语音合成识别开发工具包。
在大多数情况下此工具包用于语音识别系统的开发,基于西北地区英语教学中听力和口语能力低于其他省市的教育现状,特利用此工具包的语音合成功能开发了英语语音合成教学软件,希望在英语教学中发挥一定的作用。
1 关于Microsoft Speech SDK5.1Microsoft Speech SDK是Microsoft公司开发的一套语音软件开发工具包,SDK5.1是最新版本,SDK5.1提供了语音识别和合成的类库以及API接口,可以用Visual C+ +、C#、Delphi、Visual Basic等进行开发。
本文主要讨论使用Delphi进行的开发工作。
2 英语语音合成教学软件的功能、设计原理和实现方法2.1 实现功能描述中英文文章朗读,中英文文章录音(使用于课件),词典,初高中各年级单词库,单词阅读连读,当前单元单词测试,单词库自制,语速调整等功能。
2.2 开发中使用的sdk控件及设计原理在使用Delphi进行Microsoft Speech SDK5.1语音编程时需要安装Micosoft Speech ObjectLibrary[Version5.1]ActiveX控件,Delphi中导入方法是Project ->Import Type Library对话框Micosoft Speech Object Library[Version5.1],控件生成在ActiveX控件页面,用于语音合成的控件为TspVoice。
使用TspVoice控件的Speak()函数来实现语音合成功能,由于TspVoice可以发出标准的英文朗读,因此可以实现英语听力、口语教学软件设计。
2.3 英语语音合成教学软件系统结构2.4 主要实现方法2.4.1 语音合成及中英文切换语音合成使用TspVoice控件的Speak函数实现,中英文切换使用下列语句:SpVoice1.Speak(''+内容+'',1);//用于阅读英文,发音为VW Kate女声。
基于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)。
微软语音识别分两种模式:文本识别模式和命令识别模式.此两种模式的主要区别,主要在于识别过程中使用的匹配字典不同.前者使用的是通用字典,特点是内容多,覆盖的词汇量大,字典由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(cpAudioT oken, 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哪个是我们的识别消息,需要进行处理。
如下:
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"代表简体中文,在<*>...</*>中增加命令。
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函数即可。
至此最简单的识别就完成了。