首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Speech.Recognition无法准确识别连续输入

System.Speech.Recognition无法准确识别连续输入
EN

Stack Overflow用户
提问于 2014-02-04 00:03:20
回答 1查看 2.4K关注 0票数 1

我有一个程序,很好地识别语音与System.Speech使用SpeechRecognitionEngine。然而,虽然准确,它似乎扔掉了一些音频输入,它收到。如果我说,“一,二,三”,在每个单词之间停顿,它正确地转录每一项工作。然而,如果我在每个单词之间不停顿地说出它们,它就会正确地转录第一个单词,有时是第三个单词。第二个词被忽略了。

其他人也有这个问题,但我还没有找到他们的解决方案。Microsoft Speech Recognition Speed

如果可以的话,我想将录音机音频位置设置到音频流的前面一点,但是我还没有在API中找到一个函数来允许我这样做。我正在考虑的另一种方法是有多个识别引擎,每个引擎只使用一个单词,并在处理完该词后被重用,但这是一个非常复杂和资源匮乏的解决方案。

如果能在这个问题上提供任何帮助,我们将不胜感激。

我已经将其简化为以下C#代码:

代码语言:javascript
复制
public void Init()
{
    // Create an in-process speech recognizer for the en-US locale.
    var cultureInfo = new System.Globalization.CultureInfo("en-US");
    recognizer_ = new SpeechRecognitionEngine(cultureInfo);

    // Create and load a dictation grammar.
    var numbers = new Choices();
    numbers.Add(new string[] { "one", "two", "three" });

    // Create a GrammarBuilder object and append the Choices object.
    GrammarBuilder gb = new GrammarBuilder();
    gb.Append(numbers);
    var g = new Grammar(gb);
    recognizer_.LoadGrammar(g);

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

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

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

void recognizer_SpeechDetected(object sender, SpeechDetectedEventArgs e)
{
    Console.WriteLine("\nspeech detected event audio position:\t\t" + e.AudioPosition);
    Console.WriteLine("speech detected current audio position:\t\t" + recognizer_.AudioPosition);
    Console.WriteLine("speech detected recognizer audio position:\t" + recognizer_.RecognizerAudioPosition);
}

// Handle the SpeechRecognized event.
void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    Console.WriteLine("speech recognized event audio position:\t\t" + e.Result.Audio.AudioPosition);
    Console.WriteLine("speech recognized event audio start time: " + e.Result.Audio.StartTime);
    Console.WriteLine(e.Result.Text);

    // do things
    // ...
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-04 14:55:02

而不是

代码语言:javascript
复制
gb.Append(numbers);

,它指定识别孤立的数字,尝试如下

代码语言:javascript
复制
gb.Append(new GrammarBuilder(numbers), 1, 5);

这将允许识别最多5个数字的数字顺序。根据你的需要调整重复次数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21540413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档