Распознавание речи не работает

#c# #wpf #speech-recognition

#c# #wpf #распознавание речи

Вопрос:

Я разрабатываю приложение WPF, которое использует распознавание речи. События не запускаются, когда произносятся грамматические слова. Во-вторых, я не уверен, запускается ли движок на not. Как это проверить? Ниже приведен код.

 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);
        }    
    }
}
  

Комментарии:

1. Вы пытались сделать это точно так же, как в примере на странице SpeechRecognitionEngine MSDN ?

2. да, точно так же. Я думаю, что код отражает это.

3. «Я думаю, что код отражает это». Не похоже. Не знаю, важно ли это, но пример MSDN создает SpeechRecognitionEngine с помощью CultureInfo, вы этого не делаете. Затем он загружает DictationGrammar . Вы этого не делаете. Вот почему я просил именно об этом.

4. Я видел несколько видеоуроков, и в них нигде не использовалась грамматика диктовки или CultureInfo.

Ответ №1:

Вы забыли начать прослушивание ввода.

Попробуйте это в конце вашего конструктора.

 recEngine.RecognizeAsync(RecognizeMode.Multiple);
  

Комментарии:

1. какой конструктор .. ниже строки механизма частного распознавания?

2. Это public MainWindow() конструктор, поэтому после этой строки: recEngine.SetInputToDefaultAudioDevice()

3. нужны ли мне какие-то дополнительные библиотеки или sdk?

4. System.Speech.dll должно быть достаточно, почему, вы получаете ошибки?

5. хотя отладчик не показывает никаких ошибок, но событие все равно не запускается.

Ответ №2:

ответ @Anri необходим, но вам также необходимо создать SpeechRecognitionEngine с помощью CultureInfo. (Вы можете создать SpeechRecognitionEngine без CultureInfo, но тогда вам нужно явно задать язык распознавания.)

Также: мобильные наушники (под которыми, я полагаю, вы подразумеваете какую-то гарнитуру Bluetooth), как правило, НЕ будут работать с системой.Речь. Движок SR, используемый в движке SR для настольных компьютеров, требует аудиовхода более высокого качества, чем он может получить от Bluetooth.

Итак, завершите код, который должен работать:

    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);
    }