Мне действительно нравятся последние предложения Microsoft по распознаванию речи (и SpeechSynthesis).
http://msdn.microsoft.com/en-us/library/ms554855.aspx
http://estellasays.blogspot.com/2009/04/speech-recognition-in-cnet.html
Однако я чувствую, что я немного ограничен в использовании грамматик.
Не поймите меня неправильно: грамматика отлично подходит для точного определения распознавания речи, какие слова / фразы нужно искать, однако что, если я хочу, чтобы он распознал что-то, о чем я не говорил? Или я хочу разобрать фразу, которая является наполовину предопределенным именем команды и наполовину случайными словами?
Например ..
Сценарий A - я говорю «Google [разлив нефти]» и хочу, чтобы он открыл Google с результатами поиска по термину в скобках, который может быть любым.
Сценарий B - я говорю «Найдите [Манчестер]», и я хочу, чтобы он искал Манчестер в Картах Google или что-то еще, не предопределенное
Я хочу, чтобы он знал, что «Google» и «Locate» - это команды, а после них - параметры (и может быть что угодно).
Вопрос: Кто-нибудь знает, как смешать использование предопределенных грамматик (слов, которые должно распознавать распознавание речи) и слов, не входящих в предопределенную грамматику?
Фрагменты кода ..
using System.Speech.Recognition;
...
...
SpeechRecognizer rec = new SpeechRecognizer();
rec.SpeechRecognized += rec_SpeechRecognized;
var c = new Choices();
c.Add("search");
var gb = new GrammarBuilder(c);
var g = new Grammar(gb);
rec.LoadGrammar(g);
rec.Enabled = true;
...
...
void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "search")
{
string query = "How can I get a word not defined in Grammar recognised and passed into here!";
launchGoogle(query);
}
}
...
...
private void launchGoogle(string term)
{
Process.Start("IEXPLORE", "google.com?q=" + term);
}