是否可以在单词发音游戏中使用WIndows语音识别引擎?

时间:2010-05-18 01:36:46

标签: delphi delphi-2009 speech-recognition sapi voice-recognition

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

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

数据库 - > dedebase - >正确的。

即使你误读它也是如此。它给你正确的答案。

不使用xml语法

当你说数据库它给你“在基地/基地/数据库/等......”

请发表您的回答,建议,澄清。投票给出最佳答案。

is it possible or not?

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

3 个答案:

答案 0 :(得分:4)

我会做两件事:

  1. 使用ISpEnginePronunciation::GetPronunciations将原始文本转换为音素。
  2. 使用听写语法和发音语言模型强制SAPI为您提供一组音素 - 通过调用ISpRecoGrammar::LoadDictation(L“发音”,SPLO_STATIC)来执行此操作。
  3. 将识别出的音素与目标音素进行比较。
  4. 请注意,SAPI 5.1上不提供ISpEnginePronunciation,因此仅限于Vista和Windows 7。

答案 1 :(得分:2)

对于你想要的,最好不要使用语法。但它要求用户进行语音识别引擎的“最小”基本训练。这不是很长很相对愉快。它确实对识别准确性有所影响(相信我,我的英语口音很强。) 它甚至可以作为游戏本身的初步练习 您可能会觉得有兴趣在CodeRage 4 session

上看到此"Speech Enabling Delphi Applications (zip)"

答案 2 :(得分:2)

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

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

如果你的准确度得分取决于手机/音素/发音的文字表示,那么获得准确度得分的快捷方法就是使用Levenshtein距离,这是一种可以免费获得许多实现的算法网络上。更好的评分算法可能是重新同步的差异,比较的原子单位是单个电话。

以下是MSDN doc hunting的一些关键字:
ISpRecoResult - > GetPhrase - > SPPHRASE - >规则 - > 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