【问题标题】:Speech recognition not working语音识别不工作
【发布时间】:2014-06-29 14:16:55
【问题描述】:

我正在开发一个使用语音识别的 WPF 应用程序。当说出语法单词时,事件不会触发。其次,我不确定引擎是否启动。如何检查?以下是代码。

namespace Summerproject_trial
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
       private SpeechRecognitionEngine recEngine = 
                                    new SpeechRecognitionEngine();           

        public MainWindow()
        {
            InitializeComponent();
            Choices mychoices = new Choices();
            mychoices.Add(new string[] {"Ok", "Test", "Hello"});
            GrammarBuilder gb = new GrammarBuilder();
            gb.Append(mychoices);
            Grammar mygrammar = new Grammar(gb);
            recEngine.LoadGrammarAsync(mygrammar);          

            recEngine.SpeechRecognized += 
                               new EventHandler<SpeechRecognizedEventArgs>
                                              (recEngine_SpeechRecognized);

            recEngine.SetInputToDefaultAudioDevice();              
        }

        void recEngine_SpeechRecognized(object sender,
                                        SpeechRecognizedEventArgs e)
        {
            MessageBox.Show("You said: " + e.Result.Text);
        }    
    }
}

【问题讨论】:

  • 您是否尝试过完全按照SpeechRecognitionEngine MSDN page 上的示例进行操作?
  • 是的,完全一样。我认为代码反映了这一点。
  • “我认为代码反映了它”。看起来不像。不知道它是否重要,但 MSDN 示例使用 CultureInfo 创建 SpeechRecognitionEngine,但您不需要。然后它加载一个DictationGrammar。你没有。这就是为什么我要求完全
  • 我看过一些视频教程,其中没有使用听写语法或 CultureInfo。

标签: c# wpf speech-recognition


【解决方案1】:

你忘记开始听输入了。

在构造函数的末尾试试这个。

recEngine.RecognizeAsync(RecognizeMode.Multiple);

【讨论】:

  • 哪个构造函数..低于私有识别引擎行?
  • 这个public MainWindow()是构造函数,所以在这行之后:recEngine.SetInputToDefaultAudioDevice()
  • 我需要一些额外的库或sdk吗?
  • System.Speech.dll 应该够了,为什么,你会出错吗?
  • 虽然调试器没有显示任何错误,但事件仍然没有触发。
【解决方案2】:

需要@Anri 的回答,但您需要使用 CultureInfo 创建 SpeechRecognitionEngine。 (您可以创建没有 CultureInfo 的 SpeechRecognitionEngine,但是您需要明确设置识别器语言。)

另外:移动耳机(我假设您的意思是某种蓝牙耳机)通常不适用于 System.Speech。桌面 SR 引擎中使用的 SR 引擎需要比蓝牙获得更高质量的音频输入。

所以,完整的代码应该可以工作:

   private SpeechRecognitionEngine recEngine = 
                                new SpeechRecognitionEngine("en-US");           

    public MainWindow()
    {
        InitializeComponent();
        Choices mychoices = new Choices();
        mychoices.Add(new string[] {"Ok", "Test", "Hello"});
        GrammarBuilder gb = new GrammarBuilder();
        gb.Append(mychoices);
        Grammar mygrammar = new Grammar(gb);
        recEngine.LoadGrammarAsync(mygrammar);          

        recEngine.SpeechRecognized += 
                           new EventHandler<SpeechRecognizedEventArgs>
                                          (recEngine_SpeechRecognized);

        recEngine.SetInputToDefaultAudioDevice();
        recEngine.RecognizeAsync(RecognizeMode.Multiple);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    相关资源
    最近更新 更多