Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于单个单词的Microsoft语音识别_C#_.net_Speech Recognition - Fatal编程技术网

C# 基于单个单词的Microsoft语音识别

C# 基于单个单词的Microsoft语音识别,c#,.net,speech-recognition,C#,.net,Speech Recognition,我正在尝试为客户实现一个语音提示系统,他们可以在PowerPoint中为幻灯片指定一个单词或短语,当他们说出该单词或短语时,幻灯片就会前进。下面是我用来创建语法的代码(我在实际工作中使用Microsoft的SpeechRecognitionEngine) 我试着提高信心的门槛,但是我还是得到了太多的误报。有改进语法的方法吗?有些事情告诉我,在语法接受列表中只添加一个单词会引发所有误报。识别器的结果可能会因许多因素而有所不同。这些包括:背景噪音、麦克风质量、音频输入设置和音量。尝试一个安静的房间,

我正在尝试为客户实现一个语音提示系统,他们可以在PowerPoint中为幻灯片指定一个单词或短语,当他们说出该单词或短语时,幻灯片就会前进。下面是我用来创建语法的代码(我在实际工作中使用Microsoft的
SpeechRecognitionEngine


我试着提高信心的门槛,但是我还是得到了太多的误报。有改进语法的方法吗?有些事情告诉我,在语法接受列表中只添加一个单词会引发所有误报。

识别器的结果可能会因许多因素而有所不同。这些包括:背景噪音、麦克风质量、音频输入设置和音量。尝试一个安静的房间,配备一个好的麦克风,看看你的效果是否更好

你关于一个单词语法导致问题的理论可能是公平的。(这让我想起一位老师在一次只有一个选项的考试中问了一道选择题,当这么多学生都答对了时,他感到惊讶。)你有没有尝试过在语法中添加垃圾词作为其他选项,这样引擎就不会默认为唯一选项?尝试以下方法:

choices.Add("zebra"); 
choices.Add("umbrella");
choices.Add("plunger");
看看你的成绩是否有所改善


我知道在Windows7中,通过听写语法,您可以使用Windows7语音识别功能来训练识别器更好地识别单个说话人。我不知道这是否对你所描述的固定语法有帮助。您可能想尝试一下培训,看看效果是否有所改善。有关更多信息,请参阅。

以下是我的想法:

正如@michaellevy所说,当你给电脑一个单词来听的时候,它不会做很多工作。它基本上只是监听音频级别达到某个值时的声音,然后假设它一定是那个词。所以我决定我必须给它另一个听起来相反的词。现在我的目标不是花几个星期的时间研究音标,找出一个完美的算法来确定那些听起来与我试图匹配的单词相去甚远的单词,所以我决定专注于第一个字母。操作顺序如下:

  • 从XML文件中提取用于进度幻灯片的触发字
  • 查找单词的第一个字母
  • 找到3个与第2步中的字母发音最不相同的字母
  • 找出4个不同长度、音节数、尾音和第二个字母的单词,每个字母都以步骤3中找到的三个字母开头
  • 将步骤4中找到的所有12个单词连同触发词一起添加到选项列表中。现在有13个单词。一个是我们找到的单词,另外12个听起来一点也不像这个单词。因此,在触发任何事件处理程序之前,计算机将确保它是正确的:)
  • 现在,为了确定相反的字母,我发布了一个问题,但在我得到任何有用的建议之前,它被关闭了):我不知道为什么,我查看了FAQ,似乎我在那里描述的术语中。我决定对我的家人和朋友进行民意调查,我们的联合智商得出了一个相反的清单。每个字母有3个字母,发音越远越好


    最后一步是为每个字母找到单词。我发现每个字母有四个单词,总共104个单词。我想要不同长度的单词、第二个字母和结尾音,这样我就可以覆盖我所有的基础,并尽可能地“分散”计算机对目标单词的注意力。我用这个来写大词,用我弱小的英语头脑来写单词,而不是白手起家写这个你可能想看看混乱[一个来自Microsoft的开源项目,允许您将事件与触发器或动作连接起来。它们已经有用于语音录制的附加模块和用于控制PowerPoint幻灯片的Office模块。我会看一看,感谢您的帮助Kevin。我不确定您为什么会投反对票…我投了赞成票!我昨晚实现了这一点,并获得了much改进了结果!事实上,现在,除非你清楚地表达,否则它不会识别这个词!我将发布我的问题解决方案,因为它最终是一个通宵的努力,但我认为我在你发布的内容上取得了一些进展,这可能会让其他有类似问题的开发人员受益。没有评论的反对票总是存在的这对我来说是一个谜。有时我认为人们对这里的发布规则和网站风格如此着迷,以至于他们宁愿遵守规则也不愿尝试帮助别人。我的回答有点模糊,我不确定我的建议,所以我认为这需要投反对票。因为你没有其他答案,我认为模糊的建议可能更重要比沉默更有用。我很高兴这对你有用。我想知道你是否只是尝试添加简单的垃圾词,而不是尝试策略性地选择听起来与目标词不同的垃圾词。识别器非常好,我想知道你的策略性词选择是否真的比随机选择的几个词效果更好d噪音词。老实说,我没有,尽管这很有意思。我认为,仅仅从逻辑上来说,选择性词语选择会更好,但我认为它是否明显更好才是真正的问题。
    choices.Add("zebra"); 
    choices.Add("umbrella");
    choices.Add("plunger");
    
    <?xml version="1.0" encoding="utf-8" ?>
    <list>
      <a opposite="m,q,n">abnegate,apple,argent,axe</a>
      <b opposite="k,l,s">berate,barn,bored,battology</b>
      <c opposite="v,r,j">chrematophobia,cremate,cease,camoflauge</c>
      <d opposite="l,q,w">dyslogy,distemper,dog,dilligent</d>
      <e opposite="j,n,k">exoteric,esoteric,enumerate,elongate</e>
      <f opposite="g,i,t">flagitious,flatulate,fart,funeral</f>
      <g opposite="f,v,z">gracile,grace,garner,guns</g>
      <h opposite="q,d,x">hebetate,health,habitat,horned</h>
      <i opposite="m,n,f">isomorphic,inside,iterate,ill</i>
      <j opposite="c,e,x">jape,juvenescent,jove,jolly</j>
      <k opposite="l,w,v">kinetosis,keratin,knack,kudos</k>
      <l opposite="b,d,g">lactate,lord,limaceous,launder</l>
      <m opposite="v,i,f">malaria,mere,morbid,murcid</m>
      <n opposite="h,r,v">name,nemesis,noon,nuncheon</n>
      <o opposite="b,n,j">orarian,opiate,opossum,oculars</o>
      <p opposite="n,m,d">pharmacist,phylogeny,pelt,puny</p>
      <q opposite="d,h,f">query,quack,quick,quisquous</q>
      <r opposite="c,f,x">random,renitency,roinous,run</r>
      <s opposite="b,y,d">sand,searing,sicarian,solemn,</s>
      <t opposite="l,m,f">tart,treating,thunder,thyroid</t>
      <u opposite="f,g,j">unasinous,unit,ulcer,unthinkable</u>
      <v opposite="c,k,m">version,visceral,vortex,vulnerable</v>
      <w opposite="d,k,n">wand,weasiness,whimsical,wolf</w>
      <x opposite="m,l,p">xanthopsia,xanthax,xylophone,xray</x>
      <y opposite="s,j,d">yellow,york,yuck,ylem</y>
      <z opposite="m,n,g">zamboni,zip,zoology,zugzwang </z>
    </list>
    
        private Dictionary<string, List<string>> opposites;
        private Dictionary<string, List<string>> words = new Dictionary<string, List<string>>();
    
        private void StartSpeechRecognition(Media_Slide slide)
        {
            if (opposites == null)
            {
                opposites = new Dictionary<string, List<string>>();
                System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
                string file = System.IO.Path.GetDirectoryName(Assembly.GetAssembly(typeof(MainWindow)).CodeBase).Remove(0, 6) + "\\buzzlist.xml";
                doc.Load(file);
                foreach (System.Xml.XmlNode node in doc.ChildNodes[1].ChildNodes)
                {
                    opposites.Add(node.Name, new List<string>(node.Attributes[0].InnerText.Split(',')));
                    words.Add(node.Name, new List<string>(node.InnerText.Split(',')));
                }
            }
    
            speechSlide = slide;
            rec = new SpeechRecognitionEngine();
            rec.SpeechRecognized += rec_SpeechRecognized;
            rec.SetInputToDefaultAudioDevice();
            try
            {
                rec.LoadGrammar(GetGrammar());
                rec.RecognizeAsync(RecognizeMode.Multiple);
            }
            catch
            {
            }
        }
    
    void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            if (e.Result.Text == speechSlide.Scenes[speechSlide.currentslide].speechCue)
            {
                rec.UnloadAllGrammars();
                ScreenSettings.NextSlide(speechSlide);
                try
                {
                    rec.LoadGrammar(GetGrammar());
                }
                catch
                {
                    rec.RecognizeAsyncCancel();
                }
            }
        }