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

388
10 января 2017, 23:31

Начал работать с 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<SpeechRecognizedEventArgs>(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<string, Action> 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. Возможно ли Начать слушать то что говорит пользователь после определенного слова?

Answer 1
var engine = new SpeechRecognitionEngine();
//задает интервал ожидания имеющий фоновый шум
engine.BabbleTimeout = TimeSpan.FromSeconds(3);
//задает интервал ожидания полной тишины (без шума)
engine.InitialSilenceTimeout = TimeSpan.FromSeconds(3);

Есть еще свойства EndSilenceTimeout и EndSilenceTimeoutAmbiguous поэкспериментируйте с ними.

//задает пропуск перед распознаванием,т.е можно говорить, что хочешь
//до появления первого словарного слова распознаватель будет пропускать
builder.AppendWildcard();
//задает количество появлений слова минимум=0, максимум=1
builder.Append(“Привет”, 0, 1);  

Про заполнение из словаря, извините не знаю, что подсказать. Может кто другой...

READ ALSO
GUI для GO lang(Scala, C#, Qt?) [требует правки]

GUI для GO lang(Scala, C#, Qt?) [требует правки]

Решил попробовать написать десктопное приложение, до этого с ними дела не имел

504
Привязка свойства объекта в WPF

Привязка свойства объекта в WPF

Необходимо в ListView в WPF: 1привязать свойство Dict объекта Error к колонке 2

356
Фильтр таблицы с помощью ajax запрос [требует правки]

Фильтр таблицы с помощью ajax запрос [требует правки]

Не получается у меня сделать фильтра таблицы с помощью ajax запросаУ меня выходит ошибка постоянно когда я на любом месте нажимаю на сайте,...

339