Speech recognition 使用SAPI 5.3语音API进行声学训练

Speech recognition 使用SAPI 5.3语音API进行声学训练,speech-recognition,sapi,speech,Speech Recognition,Sapi,Speech,在Vista上使用微软的SAPI 5.3语音API,您如何通过编程方式对语音剖面进行声学模型训练?更具体地说,如果您有一个文本文件和一个用户说该文本的音频文件,您会进行什么顺序的SAPI调用来使用该文本和音频训练用户的配置文件 更新: 有关此问题的更多信息我尚未解决: 您可以在“开始”调用ISpRecognizer2.SetTrainingState(TRUE,TRUE),在“结束”调用ISpRecognizer2.SetTrainingState(FALSE,TRUE)。但这些操作相对于其他操

在Vista上使用微软的SAPI 5.3语音API,您如何通过编程方式对语音剖面进行声学模型训练?更具体地说,如果您有一个文本文件和一个用户说该文本的音频文件,您会进行什么顺序的SAPI调用来使用该文本和音频训练用户的配置文件

更新: 有关此问题的更多信息我尚未解决: 您可以在“开始”调用ISpRecognizer2.SetTrainingState(TRUE,TRUE),在“结束”调用ISpRecognizer2.SetTrainingState(FALSE,TRUE)。但这些操作相对于其他操作何时必须发生还不清楚


例如,您必须进行各种调用以使用与音频匹配的文本设置语法,以及进行其他调用以连接音频,以及对各种对象进行其他调用以表示“现在可以开始了”。但是,这些相互依赖性是什么?在进行其他操作之前,必须先进行哪些操作?如果您使用音频文件而不是系统麦克风进行输入,这是否会降低相对计时的宽容度,因为识别器不会一直坐在那里听,直到说话人正确地进行识别?

实施SAPI培训相对来说比较困难,而且文档并没有真正告诉你需要知道什么

将识别器切换到或退出训练模式

当您进入培训模式时,真正发生的是识别器为用户提供了更多的识别余地。因此,如果你试图识别一个短语,引擎对识别的要求就会低很多

在您离开训练模式并设置fAdaptFromTrainingData标志之前,发动机不会真正进行任何自适应

当发动机自适应时,它扫描存储在配置文件数据下的训练音频。培训代码负责将新的音频文件放在引擎可以找到的地方进行自适应

这些文件也必须标记,以便引擎知道所说的内容

那你是怎么做到的?您需要使用三个鲜为人知的SAPI API。特别是,您需要使用获取配置文件令牌,并正确定位文件

最后,还需要使用生成正确标记的音频文件

要将它们放在一起,您需要执行以下操作(伪代码):

创建inproc识别器并绑定适当的音频输入

确保保留音频以供识别;你以后会需要它的

创建包含要训练的文本的语法

将语法的状态设置为在识别发生时暂停识别器。(这也有助于从音频文件进行培训。)

识别发生时:

获取识别的文本和保留的音频

使用CoCreateInstance(CLSID_SpStream)创建流对象

使用和创建培训音频文件,并将其绑定到流(使用)

将保留的音频复制到流对象中

QI接口的流对象,并用于将识别的文本添加到流中


更新下一次讲话的语法,恢复识别器,然后重复,直到你没有训练文本。

不幸的是,没有;Microsoft不喜欢我发布受版权保护的代码。:)@EricBrown我正在C#/VB世界中浏览您的步骤,但我找不到ispTranscript,或者您是如何从ISPStream中获取它的这就是您所说的流对象吗?知道这个转录本接口在哪里吗?@darbid-这些接口只能通过本机(C++)接口使用,并且似乎没有被导出到自动化。只是尝试在这篇文章中整合相关知识:Linked是一个很好的知识来源,一旦你开始在代码中弄脏SAPI培训相关的一切:请参阅问题Linked。训练必须用C++编写。C#接口没有完成此任务所需的一切: