c# - 语音识别程序随机显示预定义的单词(在'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;
}
}
解决方案
每个识别结果都有一个置信度分数——一个短语正确识别确定性的相对度量。无论置信度高低,看起来都像是你的SpeechRecognitionEngine
加注事件,提供了最佳匹配。SpeechRecognized
在识别语法中未包含的单词时尝试检查这些分数。如果我是对的并且这就是问题所在,那么您有以下选择:
- 检查 e.Result.Confidence 并
sre_SpeechRecognized
在分数过低时向用户显示消息 - 尝试为事件设置置信度阈值
SpeechRecognitionEngine
并进行处理SpeechRecognitionRejected
。MSDN声称
如果您的应用程序使用 SpeechRecognitionEngine 实例,您可以使用 UpdateRecognizerSetting 方法之一修改接受或拒绝语音输入的置信度。
尝试调用SpeechRecognitionEngine.UpdateRecognizerSetting
设置它。我不知道这个设置到底是怎么调用的,但是这个过时的文档指出它是'CFGConfidenceRejectionThreshold'
.
祝你好运!
推荐阅读
- data-structures - Best method of store & address to set of texts
- python - pylint warnings regarding global variables and invalid names
- reactjs - Hello Have big problem with my app, Heroku deploy H10 eror
- visual-studio-code - New VSCode extension can't find vscode
- android-studio - which cmake will Android plugin use?
- dart - WillPopScope Widget 是 Stateful Widget 还是 Stateless Widget?
- c++ - C++17 的编译错误
在 MinGW 上 - jquery - 如何使用表单输入在 Foundation 模式弹出窗口上显示 BindingResult 错误
- maven - 运行 jar 时出现 ClassNotFoundException 但运行类时没有问题
- hadoop - Hive:查找前 20% 的记录