Слишком много грамматик в 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 слов - это небольшие) словари, как правило, имеют проблемы с ложными срабатываниями (пользователь говорит что-то вне словарного запаса, которое распознается как что-то в словаре). Это происходит и с командно-контрольными грамматиками.