2010-11-18 3 views
2

Я пытаюсь распознать речь с Windows 7, но всегда признает речь как команду или просто говорит: «Что это было?».Проблема SAPI и Windows 7

Как я могу получить все выступления?

КОД:

SpeechRecognizer _speechRecognizer; 

    public Window1() 
    { 
     InitializeComponent(); 

     // set up the recognizer 
     _speechRecognizer = new SpeechRecognizer(); 
     _speechRecognizer.Enabled = false; 
     _speechRecognizer.SpeechRecognized += 
     new EventHandler<SpeechRecognizedEventArgs>(_speechRecognizer_SpeechRecognized); } 

ответ

5

Может быть, вы хотите использовать .net System.Speech имен вместо SAPI? Существует очень хорошая статья, которая была опубликована несколько лет назад в http://msdn.microsoft.com/en-us/magazine/cc163663.aspx. Это, наверное, лучшая вступительная статья, которую я нашел до сих пор. Это немного устарело, но очень helfpul. (Метод AppendResultKeyValue был удален после бета-тестирования.)

Вы пытаетесь использовать общий распознаватель? Возможно, поэтому вы видите команды. У вас есть конкретная задача для распознавания? В этом случае вам будет лучше обслуживаться специальная грамматика и распознаватель inproc.

Если вам нужно обрабатывать любые слова, используйте DictationGrammar, который поставляется с System.Speech. См. http://msdn.microsoft.com/en-us/library/system.speech.recognition.dictationgrammar%28VS.85%29.aspx

Для удовольствия я взломал простейшее приложение форм Windows .NET, чтобы использовать грамматику диктовки, о которой я мог думать. Я создал форму. Бросил на него кнопку и сделал кнопку большой. Добавлена ​​ссылка на System.Speech и линии:

using System.Speech.Recognition; 

Затем я добавил следующий обработчик событий Button1:

private void button1_Click(object sender, EventArgs e) 
{   
    SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(); 
    Grammar dictationGrammar = new DictationGrammar(); 
    recognizer.LoadGrammar(dictationGrammar); 
    try 
    { 
     button1.Text = "Speak Now"; 
     recognizer.SetInputToDefaultAudioDevice(); 
     RecognitionResult result = recognizer.Recognize(); 
     button1.Text = result.Text; 
    } 
    catch (InvalidOperationException exception) 
    { 
     button1.Text = String.Format("Could not recognize input from default aduio device. Is a microphone or sound card available?\r\n{0} - {1}.", exception.Source, exception.Message); 
    } 
    finally 
    { 
     recognizer.UnloadAllGrammars(); 
    }       
} 
+0

Спасибо Майкл. Мне нужно узнать каждое слово. Все примеры в ссылке, которую вы дали, касаются создания команд на самом деле. Как я могу получить все? – Kaan

+0

Если вы используете распознаватель рабочего стола (который поставляется в Windows Vista и 7), он поставляется со встроенной грамматикой диктовки. См. Http://msdn.microsoft.com/en-us/library/system.speech.recognition.dictationgrammar%28VS.85%29.aspx –

+0

Я обновил ответ, чтобы включить пример использования DictationGrammar. –

Смежные вопросы