Мне очень нравятся предложения по распознаванию речи в Microsoft (и SpeechSynthesis).
http://msdn.microsoft.com/en-us/library/ms554855.aspx
http://estellasays.blogspot.com/2009/04/speech-recognition-in-cnet.html
Однако, я чувствую, что при использовании грамматик я несколько ограничен.
Не поймите меня неправильно, грамматики отлично подходят для того, чтобы говорить о распознавании речи точно, какие слова/фразы нужно искать, однако что, если я хочу, чтобы он узнал что-то, о чем я не сказал? Или я хочу разобрать фразу, которая представляет собой половину предварительно определенного имени команды и половины случайных слов?
Например..
Сценарий A. Я говорю "Google [Oil Spill]", и я хочу, чтобы он открыл Google с результатами поиска для термина в скобках, который может быть любым.
Сценарий B. Я говорю "Найдите [Манчестер]", и я хочу, чтобы он искал Манчестер в Картах Google или что-то еще, что не было предопределено
Я хочу, чтобы он знал, что "Google" и "Найти" являются командами, и что происходит после того, как они являются параметрами (и могут быть любыми).
Вопрос: Кто-нибудь знает, как смешивать использование заранее определенных грамматик (слова распознавания речи должны распознаваться) и слова не в его заранее определенной грамматике?
Кодовые фрагменты..
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);
}