首页 > 解决方案 > 语音识别程序随机显示预定义的单词(在'GramarBuilder()'中定义),用于那些语法中不存在的口语单词

问题描述

我是 C# 的新手,我不确定我是否在正确的论坛上写作。我正在构建简单的语音识别程序,它将语音命令作为输入,执行语音到文本的翻译,然后搜索与该文本匹配的视频。

我正在使用grammarBuider()并定义自己的语法以实现更准确的语音识别。但问题是:当说出任何不存在于语法中的单词时,程序会随机启动任何显示/写入语法中定义的现有单词。

所以,

我想要的是:如果说出我的语法中不存在的任何单词,Grammarbuilder程序不应该在屏幕上写出语法中的任何或任何随机单词。相反,它应该向用户显示一条消息,即“您所说的单词在程序的语法中不存在,或者没有找到与您的语音搜索匹配的视频”

谁能告诉我我该如何解决这个问题?这是我的代码..

   public Form1()
    {
        InitializeComponent();
    }


    private void btnStart_Click(object sender, EventArgs e)
    {
        btnStart.Enabled = false;
            btnStop.Enabled = true;
            clist.Add(new string[] { "go away", "able", "active", "actual", "afraid", "busy", "casual" });
            Grammar gr = new Grammar(new GrammarBuilder(clist));
            try
            {
                sre.RequestRecognizerUpdate();
                sre.LoadGrammar(gr);
                sre.SpeechRecognized+= sre_SpeechRecognized;
                sre.SetInputToDefaultAudioDevice();
                sre.RecognizeAsync(RecognizeMode.Multiple);


            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");

            }

    }
        void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            textBoxContent.Text += e.Result.Text.ToString() + Environment.NewLine;     


        }

    private void btnStop_Click(object sender, EventArgs e)
    {

            sre.RecognizeAsyncStop();
            btnStart.Enabled = true;
            btnStop.Enabled = false;

    }
}

标签: c#visual-studio-2017speech-recognition

解决方案


每个识别结果都有一个置信度分数——一个短语正确识别确定性的相对度量。无论置信度高低,看起来都像是你的SpeechRecognitionEngine加注事件,提供了最佳匹配。SpeechRecognized在识别语法中未包含的单词时尝试检查这些分数。如果我是对的并且这就是问题所在,那么您有以下选择:

  • 检查 e.Result.Confidence 并sre_SpeechRecognized在分数过低时向用户显示消息
  • 尝试为事件设置置信度阈值SpeechRecognitionEngine并进行处理SpeechRecognitionRejectedMSDN声称

如果您的应用程序使用 SpeechRecognitionEngine 实例,您可以使用 UpdateRecognizerSetting 方法之一修改接受或拒绝语音输入的置信度。

尝试调用SpeechRecognitionEngine.UpdateRecognizerSetting设置它。我不知道这个设置到底是怎么调用的,但是这个过时的文档指出它是'CFGConfidenceRejectionThreshold'.

祝你好运!


推荐阅读