使用SAPI 5.3语音API进行声学培训 [英] Acoustic training using SAPI 5.3 Speech API

查看:15
本文介绍了使用SAPI 5.3语音API进行声学培训的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Vista上使用Microsoft的SAPI 5.3语音API,如何编程进行RecoProfile的声学模型训练?更具体地说,如果您有一个文本文件和一个说出该文本的用户的音频文件,您会执行什么序列的SAPI调用以使用该文本和音频训练用户的配置文件?

更新:

有关此问题的详细信息我仍未解决: 您在";处调用ISpRecognizer2.SetTrainingState(true,true),在";处调用ISpRecognizer2.SetTrainingState(FALSE,TRUE),在";处调用ISpRecognizer2.SetTrainingState(FALSE,TRUE)。";但仍不清楚这些操作相对于其他操作必须在何时发生。

例如,您必须进行各种调用以设置与您的音频匹配的文本的语法,并进行其他调用以连接音频,以及对各种对象进行其他调用以说您现在可以开始了。&但是有什么相互依赖关系--在发生什么之前必须发生什么?如果你使用音频文件而不是系统麦克风进行输入,这会不会使相对计时变得不那么宽容,因为识别器不会一直坐在那里听,直到说话人说对了?

推荐答案

实现SAPI培训相对比较困难,文档并没有真正告诉您需要了解的内容。

ISpRecognizer2::SetTrainingState将识别器切换到或切换出训练模式。

当您进入训练模式时,实际发生的情况是识别器为用户提供了更多的识别回旋余地。因此,如果你试图识别一个短语,引擎对识别的要求会低得多。

在您退出训练模式并且设置了fAdaptFromTrainingData标志之前,引擎不会真正执行任何调整。

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

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

那么您是如何做到这一点的?您需要使用三个鲜为人知的SAPI API。特别是,您需要使用ISpRecognizer::GetObjectTokenSpObjectToken::GetStorageFileName获取配置文件令牌以正确定位文件。

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

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

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

请确保保留音频以供识别;您以后会用到它。

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

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

发生识别时:

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

使用CoCreateInstance(CLSID_SpStream)创建流对象。

使用ISpRecognizer::GetObjectTokenISpObjectToken::GetStorageFileName创建训练音频文件,并将其绑定到流(使用ISpStream::BindToFile)。

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

QIISpTranscript接口的流对象,并使用ISpTranscript::AppendTranscript将识别的文本添加到流中。

更新下一次发音的语法,恢复识别器,然后重复该操作,直到训练文本用完为止。

这篇关于使用SAPI 5.3语音API进行声学培训的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆