Я пытаюсь использовать распознавание речи в рабочем приложении С#, где, если пользователь говорит "нажмите 3" ИЛИ "нажмите 4", тогда этот цифра должна быть записана на диаграмме (например, "Метка"). Я могу определить слово "пресса", который пользователь произнес, но не выше этого. Пожалуйста помоги. Ниже приведен пример кода:
string txtSpoken = "";
string[] words = new string[10];
public Form1()
{
InitializeComponent();
SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine();
_recognizer.LoadGrammar(new Grammar(new GrammarBuilder("press")) { Name = "pressGrammar" }); // load a grammar
_recognizer.SpeechRecognized += _recognizer_SpeechRecognized;
_recognizer.SetInputToDefaultAudioDevice(); // set the input of the speech recognizer to the default audio device
_recognizer.RecognizeAsync(RecognizeMode.Multiple); // recognize speech asynchronous
// _recognizer.Recognize();
}
void _recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
string txt = e.Result.Text;
this.Invoke(new MethodInvoker(() =>
{
listBox1.Items.Add("I heard you say: "
+ txt);
})); // WinForm specific
if (e.Result.Text == "press") // e.Result.Text contains the recognized text
{
textBox1.Text = "3";
label1.Text += " 3 ";
// MessageBox.Show("The test was successful!");
}
txtSpoken += e.Result.Text;
MessageBox.Show(txtSpoken);
if (txt.IndexOf("press") >= 0)
{
words = txt.Split(' ');
}
}
Проблема в том, что ваша грамматика содержит только слово press. Для соответствия между речью пользователя и грамматикой пользователь должен говорить точно один из элементов в вашей грамматике. Я предлагаю вам создать Choices
например:
Choices inputs = new Choices();
inputs.Add(new string[] {"press 3", "press 4"});
GrammarBuilder gb = new GrammarBuilder();
gb.Append(inputs);
Grammar g = new Grammar(gb);
_recognizer.LoadGrammar(g);
Для получения дополнительной информации следуйте этому руководству.
txt
?