我正在尝试在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();
答案 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,但有外部库。