Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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# 使用Micorosft语音识别引擎进行音频比较_C#_Asp.net_Speech Recognition_Microsoft Speech Platform - Fatal编程技术网

C# 使用Micorosft语音识别引擎进行音频比较

C# 使用Micorosft语音识别引擎进行音频比较,c#,asp.net,speech-recognition,microsoft-speech-platform,C#,Asp.net,Speech Recognition,Microsoft Speech Platform,我有一个应用程序,用户可以说话和一个单词,他将得到他所说单词的准确率百分比。i、 e发动机对这个词的识别有多清楚 这一切都很好,但我有一个两难的问题,那就是哪些单词需要添加到字典中,我将作为字典提供给识别引擎 如果我给case pen以“p”开头的单词,那么像pendant、pent等所有单词都会被添加到字典中。在这种情况下,我不会得到被识别为“pen”的单词 相反,我总是用其他词,如“吊坠”等 但是,如果我只在字典中添加有限的单词,比如“pe”、“pen”,那么对于同一个录制的文件,我得到的识

我有一个应用程序,用户可以说话和一个单词,他将得到他所说单词的准确率百分比。i、 e发动机对这个词的识别有多清楚

这一切都很好,但我有一个两难的问题,那就是哪些单词需要添加到字典中,我将作为字典提供给识别引擎

如果我给case pen以“p”开头的单词,那么像pendant、pent等所有单词都会被添加到字典中。在这种情况下,我不会得到被识别为“pen”的单词

相反,我总是用其他词,如“吊坠”等

但是,如果我只在字典中添加有限的单词,比如“pe”、“pen”,那么对于同一个录制的文件,我得到的识别单词仅为“pen”

意思是它显然取决于我们给字典的单词

我已经向我的客户传达了同样的信息。但是他们想要的是,他们也可以对给定的输入词说错误的词,所以在那个时候他们不需要获得准确性,也不需要获得可识别的文本

我已经为这个问题做了我本可以做的。但我的客户需要的是宇宙之外的东西

代码:

public OdllSpeechProcessor(string culture, string speechContent , string filePath)
        {
            try
            {
                int counter = 0;
                string line;
                cultureInfo         = new CultureInfo(culture);
                recognitionEngine   = new SpeechRecognitionEngine(cultureInfo);
                words               = new Choices();
                gb                  = new GrammarBuilder();
                gb.Culture          = cultureInfo;
                rndAccuracy         = new Random();

                System.IO.StreamReader file = new System.IO.StreamReader(filePath);
                while ((line = file.ReadLine()) != null)
                {
                    if (line != "")
                    {
                        for (int i = 0; i < srcContent.Length; i++)
                        {
                            if (line.StartsWith(subsetWords, true, cultureInfo))
                            {
                                if (count >= line.Length)
                                {
                                    words.Add(line);
                                    counter++;
                                }
                            }
                        }
                    }
                }


                file.Close(); 

                // Adding words to the grammar builder.              
                gb.Append(words);

                // Create the actual Grammar instance, with the words from the source audio.
                g = new Grammar(gb);

                // Load the created grammar onto the speech recognition engine.
                recognitionEngine.LoadGrammarAsync(g);
公共OdllSpeechProcessor(字符串区域性、字符串speechContent、字符串文件路径) { 尝试 { int计数器=0; 弦线; cultureInfo=新的cultureInfo(文化); 识别引擎=新的语音识别引擎(cultureInfo); 单词=新的选择(); gb=新的GrammarBuilder(); gb.Culture=cultureInfo; rndAccuracy=新随机数(); System.IO.StreamReader file=新的System.IO.StreamReader(文件路径); 而((line=file.ReadLine())!=null) { 如果(行!=“”) { for(int i=0;i=行长度) { 添加(行); 计数器++; } } } } } file.Close(); //向语法生成器添加单词。 gb.附(字); //使用源音频中的单词创建实际语法实例。 g=新语法(gb); //将创建的语法加载到语音识别引擎。 识别引擎。加载语法同步(g); 这里有专家对此有解决方案吗?如果有任何帮助,我们将不胜感激


感谢您使用的是命令语法(即一组选项)。使用命令语法,引擎会尽最大努力找到匹配项,这很容易导致误报(如您所见)。您可能需要研究听写语法,特别是发音语法,正如我在对的回答中所述。请注意,我所述的解决方案使用了一些C#中不可用的接口(或至少通过
System.Speech.Recognition
公开).

查看一些代码会很有帮助。此外,我怀疑您正在使用引擎置信度来估计参考词与识别的匹配程度;情况并非总是如此(很容易得到正确的低置信度匹配和不正确的高置信度匹配)@Eric:是的,我在使用引擎信心。你是在使用听写语法还是命令语法?听起来你在使用命令语法,这在这里不是正确的选择。使用命令语法,引擎会尽力找到匹配项,这很容易导致误判。@Eric:我已经编辑了我的问题并添加了编辑代码。