Frage

Ich mag Microsofts neueste Spracherkennung (und Speechsynthesis) Angebote.

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

http://estellasays.blogspot.com/2009/ 04 / Spracherkennungs-in-cnet.html

Doch ich fühle mich wie ich etwas eingeschränkt bin, wenn Grammatiken verwendet wird.

Verstehen Sie mich nicht falsch Grammatiken sind für erzählt die Spracherkennung genau das, was Worte / Sätze zu achten ist, aber was ist, wenn ich es etwas erkennen, möchte ich habe es nicht ein Heads aufgegeben etwa? Oder möchte ich einen Satz analysieren, die Hälfte ist vorbestimmten Befehlsnamen und halb zufällige Wörter?

Zum Beispiel ..

Szenario A -. Ich sage "Google [Oil Spill]" und ich möchte es Google öffnen mit den Suchergebnissen für den Begriff in Klammern, die alles sein könnte

Szenario B - ich sage "Lokalisieren [Manchester]" und ich möchte es für Manchester in Google Maps oder irgendetwas anderes nicht vorher festgelegten

suchen

Ich mag es wissen, dass ‚Google‘ und ‚Suchen‘ Befehle sind und was danach kommt es Parameter sind (und könnte alles sein).

Frage: Wer weiß, wie die Verwendung von vorher festgelegten Grammatiken mischen (Worte, um die Spracherkennung sollte erkennen) und Worte nicht in seiner vorbestimmten Grammatik

Code-Fragmente ..

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);
}
War es hilfreich?

Lösung

Sie könnten so etwas wie dieses versuchen ... Es gibt eine Liste von bekannten Befehle .. aber können Sie auch danach offen Diktat verwenden. Er erwartet, dass es ein Befehl vor dem offenen Diktat gegeben sein .. aber man konnte umkehren dieses ... und Anfügen th Indem jedoch in dem Befehlstyp in einem leeren Zugabe (“„) es wird Sie auch direkt zum Diktat Teil erhalten lassen.

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

dann auf dem Erkenner verwendet nur das Ergebnis Text etc

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

}

Sie können mehr Auswahl Optionen hinzufügen und SemanticResultKeys der Struktur komplexere Muster zu machen, wenn Sie es wünschen. Auch ein Platzhalter (z gb.AppendWildcard ();).

Andere Tipps

Sie haben zwei Möglichkeiten:

  1. Sie können das Diktat Knoten für Freitext verwenden mit GrammarBuilder :: AppendDictation . Das Problem ist, dass, da die Erkennungs keinen Kontext haben, die Anerkennungen sind nicht die höchste Qualität.
  2. Sie können einen textbuffer Knoten verwenden und eine Reihe von Produkten zur Verfügung stellen mit GrammarBuilder: : Append (String, SubsetMatchingMode) . Dadurch wird die Erkennungs genug Kontext geben gute Qualität Anerkennungen zu erhalten, ohne jedes Mal die gesamte Grammatik Baum wieder aufbauen zu müssen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top