ISpeechRecognizer自动化接口表示一个语音识别引擎。一个识别器就是一个SR引擎。引擎通常通过两个主要的特征来进行分类:第一个是引起的语言。语言是由制造商提供的,并且可能不会改变。一个计算机在同一时间可能有很多类型的引擎被安装。然而,引擎的使用是有限的,并且依赖于识别的类型。第二个主要特征是识别的类型。这就是,一个引擎的实例是否作为独占或共享模式产生。

一个默认的SR通过控制面板的语音属性进行选择,这种方式给用户提供了便利,并且默认的引擎在没有别的类型被指定的情况下会被使用。在许多情况下,用户的要求被一个单一引擎所满足。然而,应用程序将不局限于默认的引擎。当需要时,可以使用其他的引擎。相对的,一个活动的引擎是一个实例化的例子,并且被至少一个识别上下文所使用。

一个引擎可以有不止一个实例可以被使用。每一个应用程序可能有一个识别器的自己所属的实例,并且可以在很多情境中。每一个识别上下文可以有自己的引擎的实例。应用程序使用独占识别器必须有他们所有的实例。如果更高的精细度被识别所需要,它将会被要求使用不同识别上下文,而不是使用多重识别器。

下面的代码片段声明了一个共享型识别上下文和一个隐式共享识别器

Public WithEvents RC As SpSharedRecoContext

Set RC = New SpSharedRecoContext

然而,有些情况需要在声明在识别上下文声明之前声明识别器,为了实现这个的目的,需要按照标准模式声明识别器

Dim SharedRecognizer As SpSharedRecognizer

Set SharedRecognizer =CreateObject("SAPI.SpSharedRecognizer")

识别类型:

一个识别引擎可能是以下两种类型的其中之一:独占型和共享型。第一、独占型,就是在一个应用程序中的同一个过程。一个独占型识别器限制只有一个应用程序来进行访问。例如:同一个系统麦克风可能被一个独占型识别器占用,禁止别的应用程序来使用。当其他的应用程序可以运行它们自己的独占识别器的实例的时候,没有资源是相同的。例如,当从一个Wav文件进行识别时,一个独占型引擎可以被使用。实际上,一个共享型引擎将不会使用Wav文件作为输入。

第二种类型识别器是共享型识别器。它在运行时作为一个应用程序的分离进程。因此,其他应用程序可以在同一时间使用引擎的资源。例如,同一个系统麦克风可以被所有的开放应用程序使用。反之,从引擎得来的识别结果可以被任何应用程序所使用。实际上,共享型引擎工作地范围非常广泛,竟然可以在一个识别结果不适合应用程序的时候通知它们。

对于共享引擎,当一个识别上下文产生时就会产生一个识别器实例。在这种情况下,识别器的类型将会和识别上下文的类型一致。这就是,一个共享识别上下文将会产生和活动引擎类型一样的共享识别器。然而,所有使用共享引擎的应用程序必须产生这种引擎类型的实例。一个应用程序可以不使用一个共享引擎,并且第二个应用程序使用另一种引擎类型。

独占引擎产生的方式是相似的,当一个独占型的识别上下文产生时,一个独占引擎实例被产生。每一个应用程序可能只有一个独占引擎实例在这个时候处于活动状态。然而,尽管一个应用程序可能每次只有一个独占引擎实例,甚至在同一时间有不同的应用程序开放,可能每一个都有不同的活动引擎。比如,一个应用程序可能从一个独占的英语引擎中得到识别,另一个应用程序可能从一个独占的汉语引擎中得到识别。

不管怎样,识别器和识别上下文必须是同一类型的。如果一个识别器作为一个共享资源产生,与识别器相关联的识别上下文也必须是共享的。对于独占型的识别器和识别上下文也是如此。

ISpeechRecognizer自动化接口包括以下元素:

AllowAudioInputFormatChangesOnNextSet属性:表示识别器是否可以在随后的音频流中改变音频输入格式。当这个属性被设置为True时,识别器的输入流格式被重新设置,目的是符合SR引擎首先的格式。当这个属性是False时,不需要去设置音频流的格式。这个属性的默认值是True。

AudioInputStream属性:得到或设置识别器音频输入流。使用AudioInputStream可以使一个应用程序使用一个文件流或者其他的流对象作为输入,而不是使用音频设备。

AudioInputStream只被独占识别器使用,企图在一个共享环境中使用它将会得到一个SPERR_NOT_SUPPORTED_FOR_SHARED_RECOGNIZER错误

IsShared属性:表示一个识别引擎是共享型还是独占型的。

Profile属性:指定SR引擎的当前识别属性。

一个识别属性描述一个单独用户和一个在系统上的训练对话。一个用户可以通过控制面板中的的语音属性可以手工地产生、删除、设置当前的属性。

当引擎在活动状态时,不能设置一个属性。如果在引擎活动状态下进行设置,将会得到意外的结果,这个结果依赖于SR引擎何时、如何访问属性信息。

一个最新安装的属性不是永久不变的,但是其的有效性只存在识别器的生命周期之内。

Recognizer属性:指定关于活动识别器的特性。

识别器和与其相关的属性被储存在语音配置数据库中作为一系列的令牌。每一个令牌代表一个属性,识别器可以回收有能力去访问识别器属性的对象(SpObjectToken),附加的或者更多的关于这些令牌的细节信息,这些表征在和SpObjectToken相关的方法中是可用的。

State属性:返回识别引擎的当前状态。

Status属性:返回一个描述识别器状态的对象。

这个方法提供关于SR引擎的静态特征(例如支持的语音等)的信息,它同样提供动态特征(例如引擎已经识别到的当前流位置,并且如果这个流是活动的,就送给引擎)的信息。

方法:

CreateRcoContext方法:从识别器中产生一个识别上下文对象。

DisplayUI方法:启动显示指定的UI。

SR和TTS引擎能够显示和运行各种各样的UI,这些有助于语音环境的不同方面。

用户训练;

麦克风训练向导;

添加或删除单词;

设置引擎控制;

这些UI里面的很多可以通过控制面板里面的语音属性进行设置。另外,引擎有能力去要求运行特殊的UI去改善状况。例如,如果识别的效果如果很差,SR引擎可以要求更多的用户训练。引擎不被要求必须支持UI,并且不是所有的引擎都会有相同的UI。一个应用程序可以通过调用ISpeechRecognizer.ISUISupported,目的是在调用一个特殊的UI之前去判断引擎是否支持它。调用不支持的引擎将会引起一个运行时错误。如果UI是可用的,使用ISpecchRecognizer.DisplayUI去调用这个显示。

EmulateRecognition方法:从一个文字式的资源而不是从一个语音式的资源来进行仿真识别。

使用EmuleRecognition,应用程序可以接收从语音或文字资源的输入。所有的事件都将被完全的反馈给应用程序,就像普通的识别一样。结果性的短语就会有语音结果一样的属性设置。一个识别事件将会在只有文字通过一个活动规则进行分析时才会产生(如果听写规则是活动的,任何文本都将会被分析)。

由于这个识别企图没有使用音频数据,例如Interference、Hypothesis、AudioLevel都不能发生。

注意:

使用这种方法(模拟语音)去检测使用语音识别的应用程序,同时在参数TextElements和ElementsDisplayAttributes适应语言,不能使用空格去隔开单词。

GetAudioInputs方法:返回一个可用的音频输入设备的选择。

音频输入设备(例如声卡)作为一系列的令牌储存在语音配置数据库中。每一个令牌对应于一个音频输入设备。GetAudioInputs回收所有的可用音频令牌,返回的列表是一个ISpeechObjectTokens对象。

令牌搜索通过使用RequiredAttributes和OptionAttributes搜索属性可能会进一步精化,只有完全符合指定的RequiredAttributes搜索属性的令牌被返回。符合RequiredAttributes键值,OptionalAttributes列表设备的这些令牌按照符合OptionalAttributes的顺序进行。如果没有搜索属性被提供,所有的令牌都将被返回。如果没有音频设备符合标准,GetAudioInputs将返回一个空的选择。也就是,一个ISpeechObjectTokens集合中有一个ISpeechObjectTokens::Count的属性为0。

GetFormat方法:返回当前输入的音频的格式。

声音格式可能在不同时间或者在进程的不同点会有不同。例如,当输入到达声音设备(声卡等)的时候,声音格式可能与它到达SR引擎的声音格式不同。GetFormat指定哪一步应该被测试,并且为这个位置返回音频格式。

GetProfiles方法:返回可用的用户语音属性的选择。

属性被储存在语音配置数据库中作为一系列的令牌,每一个令牌对应于一个属性。GetProfiles回收所有的可用属性令牌,返回的列表是一个ISpeechObjectTokens对象。

令牌搜索通过使用RequiredAttributes和OptionAttributes搜索属性可能会进一步精化,只有完全符合指定的RequiredAttributes搜索属性的令牌被返回。符合RequiredAttributes键值,OptionalAttributes列表设备的这些令牌按照符合OptionalAttributes的顺序进行。如果没有搜索属性被提供,所有的令牌都将被返回。如果没有音频设备符合标准,GetAudioInputs将返回一个空的选择。也就是,一个ISpeechObjectTokens集合中有一个ISpeechObjectTokens::Count的属性为0。

GetPropertyNumber方法:返回一个通过命名键指定的数字型值。SR引擎保持有为了设置SR进程的规格参数表。这些控制器、属性,按照控制器名称和对应的值并列排列。

GetRecognizers方法:返回一个在语音配置数据库中的语音识别器对象的选择。

Recognizers作为一系列的令牌被储存在语音配置数据库中。每一个令牌对应于一个识别器(也被称为SR引擎)GetRecognizers回收所有的可用识别器令牌,并且返回一个ISpeechObjectTokens对象。

令牌搜索通过使用RequiredAttributes和OptionAttributes搜索属性可能会进一步精化,只有完全符合指定的RequiredAttributes搜索属性的令牌被返回。符合RequiredAttributes键值,OptionalAttributes列表设备的这些令牌按照符合OptionalAttributes的顺序进行。如果没有搜索属性被提供,所有的令牌都将被返回。如果没有音频设备符合标准,GetAudioInputs将返回一个空的选择。也就是,一个ISpeechObjectTokens集合中有一个ISpeechObjectTokens::Count的属性为0。

IsUISupported方法:确定指定的UI是否被支持。

SR和TTS引擎能够显示和运行各种各样的UI,这些有助于语音环境的不同方面。例如用户训练、麦克风训练向导、添加或删除单词、设置引擎控制等。这些UI里面的很多可以通过控制面板里面的语音属性进行设置。另外,引擎有能力去要求运行特殊的UI去改善状况。例如,如果识别的效果如果很差,SR引擎可以要求更多的用户训练。

引擎不被要求必须支持UI,并且不是所有的引擎都会有相同的UI。一个应用程序可以通过调用ISpeechRecognizer.ISUISupported,目的是在调用一个特殊的UI之前去判断引擎是否支持它。调用不支持的引擎将会引起一个运行时错误。如果UI是可用的,使用ISpecchRecognizer.DisplayUI去调用这个显示。

SetPropertyNumber方法:设置与指定的名称相应的数字属性。

SetPropertyString方法:设置与指定的名称相应的文本属性。

转载于:https://www.cnblogs.com/succ/archive/2010/03/12/1684389.html

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐