2015-03-30 3 views
1

Я пытаюсь использовать распознавание речи в рабочем приложении C#, где, если пользователь говорит «нажмите 3» ИЛИ «нажмите 4», тогда этот числовой код должен быть написан на диаграмме (скажем, Метка). Я могу определить слово «пресса», который пользователь произнес, но не выше этого. Пожалуйста помоги. Ниже приведен мой пример кода:Распознавание речи с использованием пространства имен Microsoft.Speech или System.Speech

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(' '); 
     } 
    } 
+0

Что такое содержимое 'txt'? – DrKoch

ответ

0

Проблема в том, что в вашей грамматике содержится только слово 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); 

Для получения более подробной информации следуйте this tutorial.

+0

Спасибо за ваше предложение. Я изменил мой код, и теперь он находится в VB.Net – Awadesh

+0

Это код: Dim _recognizer As New SpeechRecognitionEngine() Dim входы = Новые Microsoft.Speech.Recognition.Choices() inputs.add ("probingdepth") inputs.add ("pocketDepth") дим GB = Новый Microsoft.Speech.Recognition.GrammarBuilder() gb.Append (входы) дим р = Новый Microsoft.Speech.Recognition.Grammar (GB) р. Name = "ProbingDepth" _recognizer.LoadGrammar (p) – Awadesh

+0

Я становлюсь ниже ошибки: разрешение перегрузки не удалось, поскольку доступный «Новый» не может быть вызван без narro wing: 'Public Sub New (grammarInfo как Microsoft.Speech.Recognition.GrammarInfo)': Параметр соответствия аргумента 'grammarInfo' сужается от 'Object' до 'Microsoft.Speech.Recognition.GrammarInfo'. 'Public Sub New (builder As Microsoft.Speech.Recognition.GrammarBuilder)': Параметр соответствия аргумента 'builder' сужается от 'Object' до 'Microsoft.Speech.Recognition.GrammarBuilder'. Не могли бы вы помочь? Заранее спасибо. – Awadesh