我目前正在通过从xml文件加载一个非常简单的规则来测试SpeechRecognitionEngine。事实上,它是一个简单的(“解密电子邮件”,“删除加密”)或(“加密电子邮件”,“添加加密”)。
我已经训练了我的Windows 7 PC并且还添加了加密和解密这两个词,因为我发现它们非常相似。识别器在这两者之间存在差异。
我遇到的问题是它经常识别事物。我已经把信心设置为0.93,因为我的声音在一个安静的房间里,说的确切的话有时只会达到0.93。但是如果我打开收音机,播音员或歌曲的声音可能意味着这个识别器认为它已经以超过0.93的信心听到了“decrpyt the email”。
也许Lady Gaga正在回复掌声暗中解密电子邮件: - )
任何人都可以帮忙解决如何使这个识别器可行的问题。
事实上,识别器也在拾取键盘噪音“解密电子邮件”。我不明白这是怎么可能的。
对于我的编辑伙伴,MS Speech Microsoft.Speech和System.Speech至少有两个托管命名空间 - 对于这个问题,重要的是要知道它是System.Speech。
答案 0 :(得分:12)
如果System.Speech识别器正在侦听的仅事物是"加密电子邮件",则识别器将生成批次的误报。 (特别是在嘈杂的环境中。)如果您并行添加DictationGrammar(特别是发音语法),DictationGrammar将拾取噪音,您可以检查事件处理程序中的(例如)语法名称以丢弃伪造认可。
(子集)示例:
static void Main(string[] args)
{
Choices gb = new Choices();
gb.Add("encrypt the document");
gb.Add("decrypt the document");
Grammar commands = new Grammar(gb);
commands.Name = "commands";
DictationGrammar dg = new DictationGrammar("grammar:dictation#pronunciation");
dg.Name = "Random";
using (SpeechRecognitionEngine recoEngine = new SpeechRecognitionEngine(new CultureInfo("en-US")))
{
recoEngine.SetInputToDefaultAudioDevice();
recoEngine.LoadGrammar(commands);
recoEngine.LoadGrammar(dg);
recoEngine.RecognizeCompleted += recoEngine_RecognizeCompleted;
recoEngine.RecognizeAsync();
System.Console.ReadKey(true);
recoEngine.RecognizeAsyncStop();
}
}
static void recoEngine_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e)
{
if (e.Result.Grammar.Name != "Random")
{
System.Console.WriteLine(e.Result.Text);
}
}