3

我用来创建一个使用 Windows 语音识别引擎或 SAPI 的应用程序。它就像一个发音游戏,当你正确发音时它会给你分数。但是当我开始使用 SAPI 进行实验时,它的识别能力很差,除非你在上面加载语法(XML),否则它会给出最好的识别结果。

但现在的问题是从输入文本中最接近的发音将被识别。例如:

数据库-> dedebase-> 正确。

即使你发音错误。它给你正确的答案。

不使用 xml 语法

当您说数据库时,它会给您“在基础/基础/数据库/等...”

请张贴您的答案,建议,澄清。投票选出最佳答案。

is it possible or not?

顺便说一句,我在项目中使用 delphi 编译器....

4

3 回答 3

4

我会做两件事:

  1. 使用ISpEnginePronunciation::GetPronunciations将原始文本转换为音素。
  2. 使用听写语法和发音语言模型来强制 SAPI 为您返回一组音素 - 通过调用ISpRecoGrammar::LoadDictation (L"Pronunciation", SPLO_STATIC) 来实现。
  3. 将识别的音素与目标音素进行比较。

请注意,ISpEnginePronunciation 在 SAPI 5.1 上不可用,因此仅限于 Vista 和 Windows 7。

于 2010-05-25T22:32:58.803 回答
2

For what you want, it is probably best not to use a grammar. But it requires that the users do the "minimal" basic training of the speech recognition engine. It's not very long and relatively pleasant. And it really makes a difference on the recognition accuracy (believe me, I have a strong French accent in my English).
It can even be included as a preliminary practice for the game itself.
You may find interesting to see this CodeRage 4 session on "Speech Enabling Delphi Applications (zip)"

于 2010-05-18T07:26:14.717 回答
2

如果游戏的目的是鼓励用户使用最接近给定语言(例如 EN-US)的“标准发音”的发音说话,那么让用户训练识别器以适应用户的特定(未修改)言语模式可能会适得其反。您将部分训练识别器以更宽容用户的发音失误。

无论您最终使用基于语法的识别还是基于听写的识别(Eric Brown 的帖子看起来很有希望),您可能还想查看“信心”分数。这些分数在执行识别后可用,它们给出了识别器对用户实际所说的内容与识别器认为用户所说的内容相匹配的信心程度的数值。根据识别器配置和用例,置信度分数可能有意义,也可能没有意义。

如果您的准确度得分基于电话/音素/发音的文本表示,那么获得准确度得分的一种快速简便的方法是使用 Levenshtein 距离,这是一种在网上有许多免费实现的算法. 更好的评分算法可能是重新同步差异,比较的原子单位是单个音素。

以下是 MSDN 文档搜索的一些关键字:
ISpRecoResult -> GetPhrase -> SPPHRASE -> Rule -> SPPHRASERULE -> SREngineConfidence。

http://msdn.microsoft.com/en-us/library/ee413319%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms720460%28v=VS.85 %29.aspx

于 2011-03-23T04:47:43.157 回答