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

C# 语音识别引擎返回从错误语音中找到的语法,c#,speech-recognition,grammar,speech,C#,Speech Recognition,Grammar,Speech,我正在尝试将.NET SpeechRecognitionEngine与VisualStudio Express中的C#一起使用。然而,我发现它在挑选完全错误的单词/句子,并假设它们是语法中的某个东西 乙二醇 如果我将“test1”加载到语法中,并说“肮脏的野兽”,这与“test1”一词甚至不接近,EventHandler SpeechRecogened就会启动。我在编写代码时在netflix上放了一部电影,它在电影中以音乐和对话的形式启动了已识别的事件,所以这太离谱了 有没有一种方法可以防止它假

我正在尝试将.NET SpeechRecognitionEngine与VisualStudio Express中的C#一起使用。然而,我发现它在挑选完全错误的单词/句子,并假设它们是语法中的某个东西

乙二醇 如果我将“test1”加载到语法中,并说“肮脏的野兽”,这与“test1”一词甚至不接近,EventHandler SpeechRecogened就会启动。我在编写代码时在netflix上放了一部电影,它在电影中以音乐和对话的形式启动了已识别的事件,所以这太离谱了

有没有一种方法可以防止它假设所说的单词在语法中?或者有什么办法来阻止这一切

有什么建议吗

这里是一个日志输出,当语法中只加载了“test1”时,我会说“肮脏的野兽”

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
代码:

公众演讲认可引擎sre;
字符串culture=“en-US”;
foreach(SpeechRecognitionEngine.InstalledRecognizers()中的RecognizerInfo配置)
{
if(config.Culture.ToString()==区域性)
{
s=新语音识别引擎(配置);
打破
}
}
s、 setInputOdeFaultAudioDevice();
sre.MaxAlternates=0;
sre.AudioLevelUpdated+=新事件处理程序(audioLevelHandler);
sre.SpeechRecognized+=新事件处理程序(speechRecognizedHandler);
sre.speechinvestized+=新事件处理程序(speechinvestizedHandler);
sre.SpeechDetected+=新事件处理程序(speechDetectedHandler);
gb=新的GrammarBuilder(speechCommands);
g=新语法(gb);
sre.UnloadAllGrammars();
sre.LoadGrammar(g);
惊人的倾听();
您可以使用语法元素来接受其他单词,而无需强制语法元素。可以将通配符与命令一起添加到选项中


如果要在出现其他语音时识别命令,此解决方案可能不容易调整。一个专门的关键字定位解决方案,寻找一个像“ok google”这样的关键词,可能会更有意义。Microsoft speech engine没有用于此目的的API,但有外部库。

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

无法阻止.NET语音识别引擎始终返回语法匹配。你也可以在一个安静的房间里对着录音室级别的麦克风说“鲍勃”,它会认出“打开的windows media player”。哈哈

警告1:超过1000个语法单词的列表会减慢速度,并可能锁定应用程序

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


到目前为止,谷歌语音识别API(确实要求你在线)的准确度是谷歌语音识别API的10倍,你可以自己轻松测试匹配度。

我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。很好,你当时在这里纠正了它;)我只是想阻止它在说完全不同的话时给我一个公认的语法选择。例如,“测试1”被加载到语法和语音识别引擎中,如果我说“肮脏的野兽”,那么对我说“测试1”的话,语音识别的置信度将达到80%以上。非常不合逻辑。我现在正在研究使用谷歌语音识别和替代。我认为微软的语音识别一点也不重要。仅仅将文化从en US更改为en GB会降低实际使用之外的识别精度。这是不可行的。上帝保佑科尔塔纳!
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();