C# 语音识别程序正在随机显示那些没有';的口语单词的预定义单词(在';GramarBuilder()和';中定义);语法上不存在
我是C#的新手,我不确定我是否在正确的论坛上写作。我正在建立一个简单的语音识别程序,它将语音命令作为输入,执行语音到文本的转换,然后搜索与该文本匹配的视频 我正在使用C# 语音识别程序正在随机显示那些没有';的口语单词的预定义单词(在';GramarBuilder()和';中定义);语法上不存在,c#,visual-studio-2017,speech-recognition,C#,Visual Studio 2017,Speech Recognition,我是C#的新手,我不确定我是否在正确的论坛上写作。我正在建立一个简单的语音识别程序,它将语音命令作为输入,执行语音到文本的转换,然后搜索与该文本匹配的视频 我正在使用grammarBuider() 准确的语音识别。但问题是:什么时候 如果语法不存在,程序启动 任意显示/写入中定义的现有单词 语法 所以 我想要的是:如果我的语法Grammarbuilder中不存在的任何单词被说出,程序不应该在屏幕上写任何或任何随机的语法单词。相反,它应该向用户显示一条消息,即“您所说的单词在程序语法中不存在,或者
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;
}
}
每个识别结果都有一个-一个短语正确识别确定性的相对度量。无论可信度是高是低,您的SpeechRecognitionEngine
都会引发SpeechRecognited
事件,从而提供最佳匹配。在识别语法中未包含的单词时,尝试检查这些分数。如果我是对的,这就是问题所在,那么您有以下选择:
- 检查
sre_SpeechRecognized
上的e.Result.Confidence,如果分数过低,则向用户显示消息
- 尝试为
SpeechRecognitionEngine
设置置信阈值,并处理SpeechRecognitionRejected
事件。声称
如果应用程序正在使用SpeechRecognitionEngine实例,则可以使用UpdateRecognitionSetting方法之一修改接受或拒绝语音输入的置信度
尝试调用SpeechRecognitionEngine.UpdateRecogniterSetting
进行设置。我不知道这个设置是如何调用的,但是声明它是'cfgconfidencerepjectionreshold'
祝你好运 你们能详细描述一下当说出语法中不存在的单词时会发生什么吗?程序开始显示任何预定义的单词。我的语法目前有这些词{“走开”、“能行”、“活跃”、“实际”、“害怕”、“忙碌”、“随意”}),但我知道,如果说了任何其他单词,它就会开始显示出害怕或能行等。这是一个很好的建议。可以编码为如下内容:如果(e.Result.Confidence>=0.75)textBoxContent.AppendText(e.Result.Text);否则如果(e.Result.Confidence>0.60&e.Result.Confidence<0.75)textBoxContent.AppendText(“不确定,重复”);else textBoxContent.AppendText(“我听不见你说话”)代码>。此外,还应订阅该活动,以便在音频级别过低时发出警告。