InvalidOperationException для грамматики распознавания речи - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь написать программу, которая генерирует грамматику распознавания речи из файла и сохраняет фразы в словаре, где ключами являются фразы. Следующий код:

sre.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices(commands.Keys.ToArray()))));

Выдает исключение:

System.InvalidOperationException: The language for the grammar does not match the language of the speech recognizer.
   vid System.Speech.Recognition.RecognizerBase.ThrowIfSapiErrorCode(SAPIErrorCodes errorCode)
   vid System.Speech.Recognition.RecognizerBase.LoadSapiGrammarFromCfg(SapiGrammar sapiGrammar, Grammar grammar, Uri baseUri, Boolean enabled, Single weight, Int32 priority)
   vid System.Speech.Recognition.RecognizerBase.LoadSapiGrammar(Grammar grammar, SapiGrammar sapiGrammar, Boolean enabled, Single weight, Int32 priority)
   vid System.Speech.Recognition.RecognizerBase.LoadGrammarAsyncCallback(Object grammarObject)

И я понятия не имею, почему это происходит, потому что все сгенерированные фразы написаны на английском языке sh, а программа специально требует, чтобы SpeechRecognitionEngine использовал RecognizerInfo с культурой en-US (или Culture.TwoLetterISOLanguageName из "en").

У меня MS-1033-80-DESK (en-US) Microsoft Speech Recognizer 8.0 for Windows (English - US) установлено.

1 Ответ

0 голосов
/ 26 мая 2020

Мне просто нужно было указать Культуру моей грамматики. Вот рабочий код:

sre.LoadGrammarAsync(new Grammar(
    new GrammarBuilder(new Choices(commands.Keys.ToArray())) {
        Culture = new System.Globalization.CultureInfo(Settings.CompatibleCultureInfo)
    }
));
...