语音识别引擎返回从错误的语音中找到的语法

时间:2015-05-07 09:00:22

标签: c# speech-recognition grammar speech

我正在尝试在VisualStudio Express中使用.NET SpeechRecognitionEngine和C#。然而,我发现它正在拾取完全错误的单词/句子,并假设它们是语法中的东西。

EG 如果我将“测试1”加载到语法中并说“肮脏的野兽”,它甚至不接近“测试1”,则EventHandler SpeechRecognized会触发。我在编码时留下了一部在netflix上播放的电影,并且正在将这个被认可的事件发送到电影中的音乐和谈话中,所以它已经过时了。

有没有办法阻止它假设口语单词在语法中?或者任何阻止这种情况的方法?

任何提示?

当语法只加载“test 1”时,这是一个日志输出,说“肮脏的野兽”。

speechDetectedHandler():
speechHypothesizedHandler():  confidence = 0.002903746    e.Result.Text = Test
speechHypothesizedHandler():  confidence = 0.8096436    e.Result.Text = Test
speechRecognizedHandler():  confidence = 0.7723699    e.Result.Text = Test 1

代码:

public SpeechRecognitionEngine sre;

String culture = "en-US";
foreach (RecognizerInfo config in SpeechRecognitionEngine.InstalledRecognizers())
{
    if (config.Culture.ToString() == culture)
    {
      s = new SpeechRecognitionEngine(config);
      break;
    }
}
s.SetInputToDefaultAudioDevice();

sre.MaxAlternates = 0;

sre.AudioLevelUpdated += new EventHandler<AudioLevelUpdatedEventArgs>(audioLevelHandler);
sre.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(speechRecognizedHandler);

sre.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(speechHypothesizedHandler);
sre.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(speechDetectedHandler);


gb = new GrammarBuilder(speechCommands);
g = new Grammar(gb);

sre.UnloadAllGrammars();
sre.LoadGrammar(g);
startListening();

2 个答案:

答案 0 :(得分:1)

解决方案是创建和加载与您要使用的单词/语法/语音类似的语法,这将提高准确性。然后评估假设的触发1,触发2然后识别置信水平和结果文本。不太实际,因为每个人/用户都会有所不同。

无法阻止.NET语音识别引擎始终返回语法匹配。你也可以说&#34; bob&#34;在一个安静的房间里,它变成了一个工作室级的麦克风,它会识别出打开的Windows媒体播放器&#34;。洛尔

警告1:语法单词列表超过1,000个缓慢的事情并且可以锁定应用程序。

警告2:en-US具有良好的英语识别能力,切换到en-GB等会大大降低准确性

到目前为止,使用谷歌语音识别API(确实要求你上网),但它准确度提高了10倍,你可以自己轻松测试匹配。

答案 1 :(得分:-1)

您可以使用Wildcard语法元素接受其他单词而不强制语法中的元素。您可以将通配符与命令一起添加到选项中。

如果您想识别存在其他语音的命令,则此解决方案可能不容易调整。一种专门的关键字识别解决方案,可以寻找关键短语,例如&#34; ok google&#34;可能会更有意义。 Microsoft语音引擎没有API,但有外部库。