MS System.Speech.Recognizer 和 SpeechRecognitionEngine 的准确性
本文关键字:SpeechRecognitionEngine 准确性 Recognizer System Speech MS | 更新日期: 2023-09-27 18:31:35
我目前正在通过从xml文件加载一个非常简单的规则来测试SpeechRecognitionEngine。 实际上,这是("解密电子邮件","删除加密")或("加密电子邮件","添加加密")之间的简单方法。
我已经训练了我的Windows 7 PC,并另外添加了加密和解密这两个词,因为我意识到它们非常相似。识别器在区分这两者时已经存在问题。
我遇到的问题是它太频繁地识别事物。 我将置信度设置为 0.93,因为在说确切的话时,我的声音在安静的房间里有时只能达到 0.93。 但是,如果我打开收音机,播音员的声音或一首歌可能意味着该识别器认为它已经听到了超过 0.93 的置信度,并带有"decrpyt the email"一词。
也许 Lady Gaga 正在背戴掌声以秘密解密电子邮件:-)
任何人都可以帮助弄清楚如何做一些事情来使这个识别器可行。
事实上,识别器也会将键盘噪音拾取为"解密电子邮件"。 我不明白这怎么可能。
除了我的编辑伙伴之外,MS Speech Microsoft.Speech 和 System.Speech 至少有两个托管命名空间 - 对于这个问题来说,重要的是要知道它是 System.Speech。
如果 System.Speech 识别器侦听的唯一内容是"加密电子邮件",则识别器将生成大量误报。 (特别是在嘈杂的环境中。 如果并行添加听写语法(特别是发音语法),听写语法将拾取噪音,您可以在事件处理程序中检查语法的名称(例如)以丢弃虚假识别。
一个(子集)示例:
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);
}
}