System.Speech 语音识别不起作用

Posted

技术标签:

【中文标题】System.Speech 语音识别不起作用【英文标题】:System.Speech Voice Recognition not working 【发布时间】:2015-09-23 10:59:21 【问题描述】:

我正在使用 c# system.speech,我想识别的句子数量有限。这是代码

  SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
    String[] Sentences = File.ReadAllLines(samplePath);
    Choices sentences = new Choices();
    sentences.Add(Sentences);
    GrammarBuilder gBuilder = new GrammarBuilder(sentences);
    Grammar g = new Grammar(gBuilder);
    g.Enabled = true;
    recognizer.LoadGrammar(g);

    try
    
        recognizer.SetInputToWaveFile(filePath);
        RecognitionResult result = recognizer.Recognize();
        String ret = result.Text;
        recognizer.Dispose();
        return ret;
    
    catch (InvalidOperationException exception)  
    return "";

当我给它一些 wav 文件时,此代码会引发异常,异常原因是在例句中找不到匹配项。我可以强制它,所以它必须选择句子吗?

【问题讨论】:

提供代码,包括您向识别器提供 wav 文件的部分,因为对我来说,即使声音文件完全静音(它提供置信度%)不抛出异常,它也始终有效。跨度> 还有你如何初始化recognizer 我有所有代码,我可以更新代码,但它没有发送 % 置信度,它似乎无法识别 编辑问题并添加我所问的内容,以便我可以通过在这里进行开发来帮助您。 我也可以分享wav文件和句子 【参考方案1】:

您收到 NullReferenceException 是因为您的 .wav 文件格式不同于 System.Speech.Recognition.SpeechRecognitionEngine 在使用时默认尝试分析 .wav 文件的方式SetInputToWaveFile 方法。

要更改读取格式,您应该改用SetInputToAudiostream 方法:

using (FileStream stream = new FileStream("C:\\3.wav", FileMode.Open))

    recognizer.SetInputToAudioStream(stream, new SpeechAudioFormatInfo(5000, AudioBitsPerSample.Sixteen, AudioChannel.Stereo));
    RecognitionResult result = recognizer.Recognize();
    string ret = result.Text;

通过这种方式,它会将您的 .wav 文件读取为 立体声文件,以 16bps每秒 5000 个样本 strong> 因为您的 .wav 文件是真正经过编码的。

注意:这解决了我在你的文件上的问题

【讨论】:

感谢您的帮助,但它仍然给出相同的异常:(

以上是关于System.Speech 语音识别不起作用的主要内容,如果未能解决你的问题,请参考以下文章

wpf可以进行语音识别吗

Android语音识别不起作用

禁用内置语音识别命令?

C#中的System.Speech命名空间初探

.Net Framework 4 语音识别——使用小语法时的误报

Microsoft 语音识别属性调整