Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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/9/blackberry/2.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#_Speech Recognition_Speech To Text_System.speech.recognition - Fatal编程技术网

C# Microsoft语音识别引擎在语法之间切换

C# Microsoft语音识别引擎在语法之间切换,c#,speech-recognition,speech-to-text,system.speech.recognition,C#,Speech Recognition,Speech To Text,System.speech.recognition,所以我有这个语音识别代码,我一直在利用微软的语音识别引擎 不幸的是,在理解声音方面并不是很好,所以我一直在思考解决这个问题的方法。其中之一是在特定语法和通用字典语法之间切换。我似乎不知道如何在语法之间切换,尽管在人们无法识别给定演讲的情况下 如果有人能帮我弄清楚如何构造它,那就是当我的命令列表语法无法识别所拾取的语音时,能够从(比如)我的命令列表语法切换到DictationGrammar() 代码如下: //using Microsoft.Speech.Recognition; using S

所以我有这个语音识别代码,我一直在利用微软的语音识别引擎

不幸的是,在理解声音方面并不是很好,所以我一直在思考解决这个问题的方法。其中之一是在特定语法和通用字典语法之间切换。我似乎不知道如何在语法之间切换,尽管在人们无法识别给定演讲的情况下

如果有人能帮我弄清楚如何构造它,那就是当我的命令列表语法无法识别所拾取的语音时,能够从(比如)我的命令列表语法切换到DictationGrammar()

代码如下:

//using Microsoft.Speech.Recognition;

using System;
using System.Speech.Recognition;
using System.Windows.Forms;
using System.Collections.Generic;

namespace vRec
{
  public class Form1
  {
      static int counter = 0;
      static bool stop = false;
      static string command = null;
      static List<String> commandList = new List<string>() { "zooey", "open", "quit", "search", "close", "yes", "no" };
      static Choices keywords = new Choices();

     public static void Main()
    {
        command = null;
        stop = false;

      // Create an in-process speech recognizer for the en-US locale.
      using (
       SpeechRecognitionEngine recognizer =
        new SpeechRecognitionEngine(
          new System.Globalization.CultureInfo("en-US")))
      {

        keywords.Add(commandList.ToArray());
        GrammarBuilder grammarBuilder = new GrammarBuilder(keywords);
        Grammar testGrammar = new Grammar(grammarBuilder);
        recognizer.LoadGrammar(testGrammar);
        recognizer.LoadGrammar(new DictationGrammar());

        // Add a handler for the speech recognized event.
        recognizer.SpeechRecognized += 
          new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);

        // Configure input to the speech recognizer.
        recognizer.SetInputToDefaultAudioDevice();

        // Start asynchronous, continuous speech recognition.
        recognizer.RecognizeAsync(RecognizeMode.Multiple);

        Console.WriteLine("NOT TERMINATED");

         // Keep the console window open.
         if(!stop)
         Console.ReadLine();
    }
 }

    // Handle the SpeechRecognized event.
    public static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        if (counter == 2 && (e.Result.Text.ToUpper() == "YES" || e.Result.Text.ToUpper() == "US" || e.Result.Text.ToUpper() == "AS"))
        {
            counter = 0;
            Console.WriteLine("THANK YOU LORD JEBUS");
            stop = true;
            SendKeys.SendWait("{ENTER}");
            //command string to be passed in for functions in c++ code
        }
        else if (counter == 2 && (e.Result.Text.ToUpper() == "NO" || e.Result.Text.ToUpper() == "NOW" || e.Result.Text.ToUpper() == "KNOW" || e.Result.Text.ToUpper() == "OH" || e.Result.Text.ToUpper() == "NOT" || e.Result.Text.ToUpper() == "NOPE" || e.Result.Text.ToUpper() == "NAH"))
        {
            Console.WriteLine("Can you spell that?");
            counter = 1;
            command = e.Result.Text;
        }
        else if (counter == 2 && (e.Result.Text.ToUpper() != "YES" || e.Result.Text.ToUpper() != "US" || e.Result.Text.ToUpper() != "AS" || e.Result.Text.ToUpper() != "NO" || e.Result.Text.ToUpper() != "NOW" || e.Result.Text.ToUpper() != "KNOW" || e.Result.Text.ToUpper() != "OH" || e.Result.Text.ToUpper() != "NOT" || e.Result.Text.ToUpper() != "NOPE" || e.Result.Text.ToUpper() != "NAH"))
        {
            //Console.WriteLine(counter);
            Console.WriteLine("Can you repeat that?");
            counter = 1;
        }

        if (counter == 1) 
        {
            command = e.Result.Text;

            if (e.Result.Text.ToUpper() == "ALL BEEN" || e.Result.Text.ToUpper() == "OPIUM" || e.Result.Text.ToUpper() == "OLD AND" || e.Result.Text.ToUpper() == "HOLE IN" || e.Result.Text.ToUpper() == "HOPING" || e.Result.Text.ToUpper() == "OLD BEEN" || e.Result.Text.ToUpper() == "OPEN")
                command = "open";

            if (e.Result.Text.ToUpper() == "WAIT" || e.Result.Text.ToUpper() == "QUITE" || e.Result.Text.ToUpper() == "QUIP" || e.Result.Text.ToUpper() == "QUICK" || e.Result.Text.ToUpper() == "CLIP" || e.Result.Text.ToUpper() == "QUIT")
                command = "quit";

            if (e.Result.Text.ToUpper() == "SUCH" || e.Result.Text.ToUpper() == "SORT" || e.Result.Text.ToUpper() == "SEARCH")
                command = "search";

            if (e.Result.Text.ToUpper() == "RULES" || e.Result.Text.ToUpper() == "FELLOWS" || e.Result.Text.ToUpper() == "CLOSE")
                command = "close";

            commandList.Add(command);
            Console.WriteLine(counter);
            Console.WriteLine("Recognized text: " + command);
            Console.WriteLine("Is this correct?");

            for (int i = 0; i < commandList.Count; i++)
            {
                Console.WriteLine("/" + commandList[i]);
            }

            counter++;

        }

        if (e.Result.Text.ToUpper() == "ZOOEY" || e.Result.Text.ToUpper() == "ZOE" || e.Result.Text.ToUpper() == "EASILY" || e.Result.Text.ToUpper() == "SALLY" || e.Result.Text.ToUpper() == "ZONE" || e.Result.Text.ToUpper() == "ZONE WE" || e.Result.Text.ToUpper() == "SOLELY" || e.Result.Text.ToUpper() == "ZOELLICK" && counter == 0)
        {
            counter++;
            Console.WriteLine("How can I help you?");
        }

        Console.WriteLine("Recognized text: " + e.Result.Text);
    }

    public static string getCommand()
    {
        return command;
    }

  }
}
//使用Microsoft.Speech.Recognition;
使用制度;
使用系统语音识别;
使用System.Windows.Forms;
使用System.Collections.Generic;
名称空间vRec
{
公开课表格1
{
静态整数计数器=0;
静态布尔停止=假;
静态字符串命令=null;
静态列表命令列表=新列表(){“zooey”、“open”、“quit”、“search”、“close”、“yes”、“no”};
静态选择关键字=新选择();
公共静态void Main()
{
command=null;
停止=错误;
//为en US语言环境创建一个进程内语音识别器。
使用(
语音识别引擎识别器=
新语音识别引擎(
新系统。全球化。文化信息(美国)
{
关键词.Add(commandList.ToArray());
GrammarBuilder GrammarBuilder=新的GrammarBuilder(关键字);
语法测试语法=新语法(grammarBuilder);
LoadGrammar(testGrammar);
LoadGrammar(新的DictionGrammar());
//为语音识别事件添加处理程序。
recognizer.SpeechRecognized+=
新的EventHandler(识别器\语音识别器);
//配置语音识别器的输入。
recognizer.setInputOdeFaultAudioDevice();
//启动异步、连续语音识别。
识别器.RecognizeAsync(RecognizeMode.Multiple);
控制台写入线(“未终止”);
//保持控制台窗口打开。
如果(!停止)
Console.ReadLine();
}
}
//处理SpeechReceigned事件。
公共静态无效识别器\u SpeechRecognized(对象发送者,SpeechRecognizedEventArgs e)
{
如果(计数器==2&&(e.Result.Text.ToUpper()==“YES”|| e.Result.Text.ToUpper()==“US”|| e.Result.Text.ToUpper()==“AS”))
{
计数器=0;
Console.WriteLine(“谢谢杰布斯勋爵”);
停止=真;
SendKeys.SendWait(“{ENTER}”);
在C/C++代码中传递函数的命令字符串
}
否则,如果(计数器==2&&(e.Result.Text.ToUpper()=“否”| e.Result.Text.ToUpper()=“现在”| e.Result.Text.ToUpper()=“知道”| e.Result.Text.ToUpper()=“哦”| e.Result.Text.ToUpper()=“不”| e.Result.Text.ToUpper()=“不知道”=“否”| e.Result.Text.ToUpper()=“不知道”)
{
控制台。WriteLine(“你会拼写吗?”);
计数器=1;
command=e.Result.Text;
}
如果(计数器)2和2以及(e.结果.结果.文本.ToUpper)若若若(计数器)2和2以及(e.结果.文本.结果.文本.ToUpper()若若若若(计数器)2和2和2和(e.结果.文本.文本.ToUpper)若若若(计数器)2和2和(2)若)若若若若若若(美国)美国“美国”美国“美国”方”的第124124;;e.结果.e.结果.结果.结果.结果.文本.文本..文本..图图图图图案案案.文本.文本............图珀.........图珀.文本......图珀.......图珀...............图珀()()()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!“没有”| | e.Result.Text.ToUpper()!=“不”))
{
//控制台。写线(计数器);
你能重复一遍吗;
计数器=1;
}
如果(计数器==1)
{
command=e.Result.Text;
如果(e.Result.Text.ToUpper()=“所有人”|| e.Result.Text.ToUpper()=“鸦片”| e.Result.Text.ToUpper()=“旧的和”| e.Result.Text.ToUpper()=“洞在”| e.Result.Text.ToUpper()=“希望”| e.Result.Text.ToUpper()=“旧的”=“打开”)
command=“打开”;
如果(e.Result.Text.ToUpper()=“WAIT”| e.Result.Text.ToUpper()=“QUIP”| e.Result.Text.ToUpper()=“QUIP”| e.Result.Text.ToUpper()=“QUIP”| e.Result.Text.ToUpper()=“QUICK”| e.Result.Text.ToUpper()=“CLIP”| e.Result.Text.ToUpper()=“退出”)
command=“退出”;
如果(e.Result.Text.ToUpper()=“这样”||| e.Result.Text.ToUpper()=“排序”|| e.Result.Text.ToUpper()=“搜索”)
command=“搜索”;
如果(e.Result.Text.ToUpper()=“规则”| e.Result.Text.ToUpper()=“同伴”| e.Result.Text.ToUpper()=“关闭”)
命令=“关闭”;
commandList.Add(命令);
控制台。写线(计数器);
Console.WriteLine(“识别文本:+命令”);
控制台。WriteLine(“这是正确的吗?”);
for(int i=0;i

任何帮助都将不胜感激^

我能想到的一个方法是:

设置一个置信阈值,任意选择0.6,然后在
recognizer\u speechrecognition内,如果拾取的语音低于该阈值,则切换语法
e.Result.Confidence`, so your code could look like: 
    if (e.Result.Confidence <0.6)  {
      recognizer.RequestRecognizerUpdate();
      recognizer.UnloadAllGrammars();
      recognizer.LoadGrammarAsync(//switch your grammmars);

    }