Domanda

Mi piace molto Microsofts ultimo riconoscimento vocale (e SpeechSynthesis) offerte.

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

http://estellasays.blogspot.com/2009/ 04 / di riconoscimento vocale-in-cnet.html

Tuttavia mi sento come se fossi un po 'limitato quando si utilizza grammatiche.

Non get me grammatiche sbagliate sono grandi per raccontare il riconoscimento vocale esattamente ciò che le parole / frasi di guardare fuori per, tuttavia ciò che se lo voglio riconoscere qualcosa che non ho dato un testa a testa circa? O voglio analizzare una frase che è la metà predeterminato nome del comando e mezzo di parole a caso?

Ad esempio ..

Scenario A -. Dico "Google [Oil Spill]" e voglio che per aprire Google con i risultati di ricerca per il termine in parentesi che potrebbe essere qualsiasi cosa,

Scenario B - dico "LOCATE [Manchester]" e voglio che per la ricerca di Manchester in Google Maps o qualsiasi altra cosa predeterminato non

lo voglio sapere che 'Google' e 'individuare' sono i comandi e ciò che viene dopo che sono parametri (e potrebbe essere qualsiasi cosa).

Domanda: Qualcuno sa come mescolare l'uso di grammatiche predeterminate (parole il riconoscimento vocale dovrebbe riconoscere) e le parole non nella sua grammatica predeterminato

frammenti di codice ..

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);
}
È stato utile?

Soluzione

Si potrebbe provare qualcosa di simile ... Specifica un elenco di comandi noti .. ma consente anche di utilizzare la dettatura aperta in seguito. Si aspetta che ci sia un comando dato prima della dettatura aperta .. ma si potrebbe invertire questa ... e aggiungere th Tuttavia, con l'aggiunta in un vuoto nel tipo di comando (" ") che vi permetterà anche di ottenere direttamente alla parte dettatura.

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);

poi sul riconoscitore basta usare il testo risultato etc

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

}

È possibile aggiungere più opzioni di scelta, e SemanticResultKeys alla struttura per rendere i modelli più complessi, se lo si desidera. Anche un carattere jolly (ad esempio gb.AppendWildcard ();).

Altri suggerimenti

Hai due scelte:

  1. È possibile utilizzare il nodo dettatura per testo libero utilizzando GrammarBuilder :: AppendDictation . Il problema è che, poiché il sistema di riconoscimento non ha alcun contesto, i riconoscimenti non sono la più alta qualità.
  2. È possibile utilizzare un nodo textbuffer e fornire una serie di elementi utilizzando GrammarBuilder: : Append (String, SubsetMatchingMode) . Questo darà il sistema di riconoscimento abbastanza contesto per ottenere riconoscimenti di buona qualità senza dover ricostruire l'intero albero di grammatica ogni volta.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top