Страницы

Поиск по вопросам

суббота, 15 июня 2019 г.

Microsoft.Speech.Recognition работает не стабильно

Начал работать с Microsoft.Speech. Есть код
static System.Windows.Controls.TextBox l;
public void InitializeSpeechGrammar() { l = UserMessage;
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("ru-ru"); SpeechRecognitionEngine sre = new SpeechRecognitionEngine(ci); sre.SetInputToDefaultAudioDevice();
sre.SpeechRecognized += new EventHandler(sre_SpeechRecognized);
Choices CommToRecognize = new Choices(); CommToRecognize.Add(new string[] { "один", "два", "три", "четыре", "пять" });
GrammarBuilder grammarBuilder = new GrammarBuilder(); grammarBuilder.Culture = ci; grammarBuilder.Append(CommToRecognize);
Grammar g = new Grammar(grammarBuilder); sre.LoadGrammar(g);
sre.RecognizeAsync(RecognizeMode.Multiple); }
static void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { if (e.Result.Confidence > 0.7) l.Text = e.Result.Text; }
Сам по себе код рабочий. Т.е в режиме реального времени он может отследить говорите ли вы те слова которые вы описали. Но он может вообще не сработать, не "слышать" вас. Может работать 40 секунд и выгрузиться(перестать слушать). Может и до окончания работы программы работать.
Запускаю при старте программы.
public MainWindow() { InitializeComponent(); InitializeSpeechGrammar(); }
Вторая проблема - не дает заполнить
Choices CommToRecognize = new Choices();
Из словаря
foreach (KeyValuePair keyValue in main.commands) { CommToRecognize.Add(keyValue.Key.ToString()); }
$exception {"\"Вызов конструктора для типа \"Assistant.MainWindow\", удовлетворяющего указанным ограничениям привязки, привел к выдаче исключения.\": номер строки \"10\" и позиция в строке \"9\"."} System.Windows.Markup.XamlParseException Вызвано исключение: "System.FormatException" в Microsoft.Speech.dll Вызвано исключение: "System.Reflection.TargetInvocationException" в mscorlib.dll Вызвано исключение: "System.Reflection.TargetInvocationException" в mscorlib.dll Вызвано исключение: "System.Xaml.XamlObjectWriterException" в System.Xaml.dll Вызвано исключение: "System.Xaml.XamlObjectWriterException" в System.Xaml.dll
и 3. Возможно ли Начать слушать то что говорит пользователь после определенного слова?


Ответ

var engine = new SpeechRecognitionEngine();
//задает интервал ожидания имеющий фоновый шум engine.BabbleTimeout = TimeSpan.FromSeconds(3);
//задает интервал ожидания полной тишины (без шума) engine.InitialSilenceTimeout = TimeSpan.FromSeconds(3);
Есть еще свойства EndSilenceTimeout и EndSilenceTimeoutAmbiguous поэкспериментируйте с ними.
//задает пропуск перед распознаванием,т.е можно говорить, что хочешь //до появления первого словарного слова распознаватель будет пропускать builder.AppendWildcard(); //задает количество появлений слова минимум=0, максимум=1 builder.Append(“Привет”, 0, 1);
Про заполнение из словаря, извините не знаю, что подсказать. Может кто другой...

Комментариев нет:

Отправить комментарий