Начал работать с 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
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
$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);
Про заполнение из словаря, извините не знаю, что подсказать. Может кто другой...
Комментариев нет:
Отправить комментарий