Como misturar gramática (regras) e ditado (expressão livre) com o SpeechRecognizer em C #
Eu realmente gosto das mais recentes ofertas de reconhecimento de voz da Microsofts (e SpeechSynthesis).
http://msdn.microsoft.com/en-us/library/ms554855.aspx
http://estellasays.blogspot.com/2009/04/speech-recognition-in-cnet.html
No entanto, sinto que sou um pouco limitado ao usar gramáticas.
Não me interpretem mal gramáticas são ótimas para dizer ao reconhecimento de fala exatamente quais palavras / frases procurar; no entanto, e se eu quiser que ele reconheça algo que não dei a entender? Ou eu quero analisar uma frase que é meio nome de comando pré-determinado e meio palavras aleatórias?
Por exemplo..
Cenário A - Eu digo "Google [Derramamento de óleo]" e quero que ele abra o Google com resultados de pesquisa para o termo entre colchetes, que pode ser qualquer coisa.
Cenário B - Eu digo "Localize [Manchester]" e quero que ele pesquise Manchester no Google Maps ou qualquer outra coisa não predeterminada
Quero que ele saiba que 'Google' e 'Locate' são comandos e o que vem depois são parâmetros (e podem ser qualquer coisa).
Pergunta: Alguém sabe como misturar o uso de gramáticas pré-determinadas (palavras que o reconhecimento de fala deve reconhecer) e palavras que não estão em sua gramática pré-determinada?
Fragmentos de código ..
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);
}