SAPI и Windows 7 Проблема - PullRequest
       32

SAPI и Windows 7 Проблема

2 голосов
/ 18 ноября 2010

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

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

КОД:

SpeechRecognizer _speechRecognizer;

    public Window1()
    {
        InitializeComponent();

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

1 Ответ

5 голосов
/ 18 ноября 2010

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

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

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

Ради интереса я собрал самое простое приложение для Windows. Формы Windows, чтобы использовать грамматику диктовки, о которой я только мог подумать. Я создал форму. Уронил на нее кнопку и сделал кнопку большой. Добавлена ​​ссылка на 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();
    }                          
}
...