Слишком много грамматик в Microsoft Speech SDK 11

Добрый день!

Я пишу простое приложение для распознавания речи, которое может загружать грамматику в движок.

Но я вижу, что не может загрузить много грамматик в двигатель - не более 1024 граммов.

Additional information: Too many grammars have been loaded. Number of grammars cannot exceed 1024.

И когда я загружаю 1024 грамматики - он не распознает входной поток * файл wav (и мой soeech):

 Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");

        // Create a new SpeechRecognitionEngine instance.
         _sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("ru-RU"));

         _sre.SpeechHypothesized += _sre_SpeechHypothesized;
         _sre.SpeechDetected += _sre_SpeechDetected;
         _sre.SetInputToWaveFile(@"c:\Test\Wavs\Wavs-converted\file.wav");


 public void LoadGrammarIntoEngine(IEnumerable<String> textColl)
    {
        Choices choises = new Choices();
        GrammarBuilder gb = new GrammarBuilder();
        gb.Culture = new CultureInfo("ru-RU");


        if (choises != null && textColl != null)
        {
            choises.Add(textColl.ToArray());

            if (gb != null)
                gb.Append(choises);
            else
            {
                Console.WriteLine();
            }

            if (_sre.Grammars.Count < 1024)
            {
                Grammar g = new Grammar(gb);
                if (_sre != null && g != null)
                    _sre.LoadGrammar(g);
                else
                {
                    Console.WriteLine();
                }
            }
            else
            {
               Console.WriteLine("too many grammars");
            }
        }

    }

Вы можете мне помочь? Спасибо!

PS, когда я загружаю 5-10 грамматик (100 слов каждый)- это работает хорошо.

Может быть, я могу \ должен использовать более одного механизма распознавания вместе?

1 ответ

Решение

Судя по комментариям, вы в корне неверно подходите. Вам нужно использовать что-то вроде System.Speech.Recognition.DictationGrammar - в котором используется движок Microsoft Desktop SR.

Это примет большинство английских слов. Если вам нужно ограничить его до 1000 слов, есть несколько вариантов.

Если ваш список слов содержит слова, которых нет в списке слов по умолчанию (который довольно обширный), вы можете использовать интерфейсы Lexicon, которые, к сожалению, не отображаются через System.Speech.Recognition, поэтому вам придется перейдите в SAPI, чтобы использовать их.

Это также предполагает, что вы можете отклонить распознавание из словаря. Если это не так, вы можете использовать Dictation Resource Kit, который позволит вам создать собственную модель языка; Имейте в виду, что он создан речевыми учеными для речевых учёных, поэтому документация довольно сложная.

На практике пользователи будут говорить вне словарного запаса; Лучше всего проверить их и отклонить. Небольшие (и да, 1000 слов - это небольшие) словари, как правило, имеют проблемы с ложными срабатываниями (пользователь говорит что-то вне словарного запаса, которое распознается как что-то в словаре). Это происходит и с командно-контрольными грамматиками.

Другие вопросы по тегам