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