Pregunta

A mi me gusta más reciente reconocimiento de Microsoft de voz (y SpeechSynthesis) ofertas.

http://msdn.microsoft.com/en-us/library/ ms554855.aspx

http://estellasays.blogspot.com/2009/ 04 / reconocimiento de voz-en-cnet.html

Sin embargo, me siento como que estoy un poco limitado cuando se utilizan gramáticas.

No me gramáticas equivocadas son grandes para decirle al reconocimiento de voz exactamente qué palabras / frases a tener en cuenta, sin embargo lo que si quiero que reconozca algo que no he dado una mano a mano alrededor? O quiero analizar una frase que es la mitad nombre del comando pre-determinado y palabras al azar y medio?

Por ejemplo ..

Escenario A -. Yo digo "Google [derrame de petróleo]" y quiero que se abra Google con los resultados de búsqueda para el término entre corchetes, que podría ser cualquier cosa

Escenario B - Yo digo "Localizar [Manchester]" y lo quiero para la búsqueda de Manchester en Google Maps o cualquier otra cosa predeterminado no

Quiero que sepa que 'Google' y 'Localizar' son comandos y lo que viene después de que son parámetros (y podría ser cualquier cosa).

Pregunta: ¿alguien sabe cómo mezclar el uso de gramáticas pre-determinado (palabras del reconocimiento de voz debe reconocer palabras) y no en su gramática predeterminado

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);
}
¿Fue útil?

Solución

Se podría intentar algo como esto ... En él se especifica una lista de comandos conocidos .. sino que también le permite utilizar el dictado abierta después. Se espera que haya una orden dada antes del dictado abierta .. pero se podía revertir esto ... y append º Sin embargo, mediante la adición de un espacio en blanco en el tipo de comando (" ") sino que también le permitirá obtener directamente a la parte de dictado.

Choices commandtype = new Choices();
commandtype.Add("search");
commandtype.Add("print");
commandtype.Add("open");
commandtype.Add("locate");

SemanticResultKey srkComtype = new SemanticResultKey("comtype",commandtype.ToGrammarBuilder());

 GrammarBuilder gb = new GrammarBuilder();
 gb.Culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");
 gb.Append(srkComtype);
 gb.AppendDictation();

 Grammar gr = new Grammar(gb);

A continuación, en el reconocedor sólo tiene que utilizar el texto de resultados, etc.

private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    System.Console.WriteLine(e.Result.Text);

}

Se puede añadir más opciones de elección, y SemanticResultKeys a la estructura para hacer patrones más complejos si lo desea. También un comodín (por ejemplo gb.AppendWildcard ();).

Otros consejos

Usted tiene dos opciones:

  1. Puede utilizar el nodo de dictado de texto libre utilizando GrammarBuilder :: AppendDictation . El problema es que, dado que el reconocedor no tiene ningún contexto, los reconocimientos no son la más alta calidad.
  2. Puede utilizar un nodo buffer de texto y proporcionar un conjunto de elementos mediante GrammarBuilder: : append (String, SubsetMatchingMode) . Esto le dará el contexto lo suficientemente reconocedor para obtener reconocimientos de buena calidad sin tener que reconstruir todo el árbol de la gramática cada vez.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top