Benutzer mit den meisten Antworten
DictationGrammar bearbeiten?

Frage
-
Hallo Forum!
Ich erstelle derzeit ein Programm, bei dem ich unter Anderem Spracherkennung (deutsche Sprache) einsetze. Wie im Betreff zu lesen benutze ich als Grammar das DictationGrammar, habe jedoch folgende Fragen dazu, zu denen ich bisher leider keine Antwort gefunden habe:
1.) Ist es möglich, sich den Inhalt des DictationGrammar anzeigen zu lassen?
2.) Kann man den Inhalt irgendwie bearbeiten, also z.B. Worte hinzufügen oder löschen?Hintergrund ist, dass beispielsweise sehr spezielles Vokabular nicht wirklich benötige und dementsprechend gerne löschen würde, aber bisher keinerleri Möglichkeit dazu gefunden habe. Alternativ könnte ich ein eigenes Grammar erstellen, bräuchte dazu jedoch idealerweise eine entsprechende Wörterbuch Datei, vielleicht hat da jemand eine Empfehlung, was man nutzen kann?
Grüße,
Schubstein
Antworten
-
Hallo Schubstein,
http://gotspeech.net/forums/thread/8634.aspx [1]
Using Speech Dictionaries to Improve Handwriting Recognition Results (such mal nach Adding Words to the User Dictionary by Using C# und Removing Words from the User Dictionary by Using C# und Installing an Application Dictionary)...Folge vom Link [1]Schau auch das AddPronunciation an.Falls ein Custom DictationGrammar noch in Frage kommt dann schau mal hier: Speech Recognition with C# – Dictation and Custom grammar…es wird die GrammarBuilder Klasse verwendet.
Grüße,
Robert
- Als Antwort vorgeschlagen Thorsten DörflerEditor Samstag, 23. Juli 2011 08:03
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 27. Juli 2011 14:25
-
Hallo Schubstein,
hier erstmal ein kleines Beispielprogramm:
using System; using System.Drawing; using System.Reflection; using System.Speech.Recognition; //System.Speech.dll using System.Text; using System.Windows.Forms; namespace Spracherkennung { public partial class Form1 : Form { SpeechRecognitionEngine engine; TextBox txtInfo; Button btnStarteErkennung; Button btnStop; public Form1() { InitializeComponent(); ControlsHinzufügen(); SprachInitialisierung(); } private void SprachInitialisierung() { engine = new SpeechRecognitionEngine(); engine.SetInputToDefaultAudioDevice(); engine.SpeechRecognized += (s, args) => { foreach (RecognizedWordUnit wort in args.Result.Words) { if (wort.Confidence > 0.8f) // ggf. anpassen txtInfo.Text += wort.Text + " "; } txtInfo.Text += Environment.NewLine; }; } private Grammar ErzeugeBeispielGrammatik() { Choices zusatzWörter = new Choices("Dzaebel", "Luca", "Joshua", "Eva"); GrammarBuilder grammarBuilder = new GrammarBuilder("Start"); grammarBuilder.Append(zusatzWörter); Grammar g = new Grammar(grammarBuilder); g.Name = "Familiennamen"; return g; } private void btnStarteErkennung_Click(object sender, EventArgs e) { engine.UnloadAllGrammars(); Grammar beispielGrammar = ErzeugeBeispielGrammatik(); engine.LoadGrammar(beispielGrammar); engine.LoadGrammar(new DictationGrammar()); AnzeigeVerfügbareGrammars(engine); engine.RecognizeAsync(RecognizeMode.Multiple); } private void AnzeigeVerfügbareGrammars(SpeechRecognitionEngine engine) { StringBuilder info = new StringBuilder(); foreach (Grammar grammar in engine.Grammars) info.AppendLine(" - \"" + grammar.GetType().Name + " " + grammar.Name + "\"\r\n" + GrammarBuilderElemente(grammar)); MessageBox.Show("Grammars der Engine:\r\n" + info.ToString()); } private string GrammarBuilderElemente(Grammar grammar) { FieldInfo builder = grammar.GetType().GetField("_grammarBuilder", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.NonPublic); if (builder == null) return ""; GrammarBuilder gb = builder.GetValue(grammar) as GrammarBuilder; if (gb == null) return ""; return " " + gb.DebugShowPhrases; } private void btnStop_Click(object sender, EventArgs e) { engine.RecognizeAsyncStop(); } private void ControlsHinzufügen() { txtInfo = new TextBox(); btnStarteErkennung = new Button(); btnStop = new Button(); txtInfo.Location = new Point(15, 53); txtInfo.Multiline = true; txtInfo.Name = "txtInfo"; txtInfo.ScrollBars = ScrollBars.Both; txtInfo.Size = new Size(396, 171); btnStarteErkennung.Location = new Point(12, 12); btnStarteErkennung.Name = "btnStarteErkennung"; btnStarteErkennung.Size = new Size(101, 23); btnStarteErkennung.TabIndex = 4; btnStarteErkennung.Text = "Starte Erkennung"; btnStarteErkennung.UseVisualStyleBackColor = true; btnStarteErkennung.Click += btnStarteErkennung_Click; btnStop.Location = new Point(119, 12); btnStop.Name = "btnStop"; btnStop.Size = new Size(38, 23); btnStop.TabIndex = 8; btnStop.Text = "Stop"; btnStop.UseVisualStyleBackColor = true; btnStop.Click += btnStop_Click; ClientSize = new Size(420, 244); Controls.Add(btnStop); Controls.Add(btnStarteErkennung); Controls.Add(txtInfo); Text = "Spracherkennung mit zusätzlicher Grammar"; } } }
---------------------------------------------Die anderen Grammars sind normal oft intern SAPI und werden oft über COM ausgelesen.
Obiges ist natürlich nur ein Beispiel - man könnte die Begriffe auch aus einer XML-Datei lesen, je nach Grammar-Kontruktor.
ciao Frank- Als Antwort vorgeschlagen Thorsten DörflerEditor Samstag, 23. Juli 2011 08:04
- Bearbeitet Frank Dzaebel Samstag, 23. Juli 2011 14:29
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 27. Juli 2011 14:24
-
So, hier noch eine kurze Rückmeldung, bevor ich das Ganze vergesse.
Ich habe ein wenig mit einer eigenen Grammar (erstellt aus dem OpenOffice Dictionary, aus dem ich verschiedene Worte herausgefiltert habe) herumexperimentiert, und die Ergebnisse der Spracherkennung angeschaut. Im Endeffekt hat sich herausgestellt, dass das Standard DictationGrammar weitaus bessere Ergebnisse liefert, weshalb ich dieses nutze und die nicht gewünschten Worte im Nachhinein herausfiltere.
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 9. August 2011 09:02
Alle Antworten
-
Hallo Schubstein,
http://gotspeech.net/forums/thread/8634.aspx [1]
Using Speech Dictionaries to Improve Handwriting Recognition Results (such mal nach Adding Words to the User Dictionary by Using C# und Removing Words from the User Dictionary by Using C# und Installing an Application Dictionary)...Folge vom Link [1]Schau auch das AddPronunciation an.Falls ein Custom DictationGrammar noch in Frage kommt dann schau mal hier: Speech Recognition with C# – Dictation and Custom grammar…es wird die GrammarBuilder Klasse verwendet.
Grüße,
Robert
- Als Antwort vorgeschlagen Thorsten DörflerEditor Samstag, 23. Juli 2011 08:03
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 27. Juli 2011 14:25
-
Hallo Schubstein,
hier erstmal ein kleines Beispielprogramm:
using System; using System.Drawing; using System.Reflection; using System.Speech.Recognition; //System.Speech.dll using System.Text; using System.Windows.Forms; namespace Spracherkennung { public partial class Form1 : Form { SpeechRecognitionEngine engine; TextBox txtInfo; Button btnStarteErkennung; Button btnStop; public Form1() { InitializeComponent(); ControlsHinzufügen(); SprachInitialisierung(); } private void SprachInitialisierung() { engine = new SpeechRecognitionEngine(); engine.SetInputToDefaultAudioDevice(); engine.SpeechRecognized += (s, args) => { foreach (RecognizedWordUnit wort in args.Result.Words) { if (wort.Confidence > 0.8f) // ggf. anpassen txtInfo.Text += wort.Text + " "; } txtInfo.Text += Environment.NewLine; }; } private Grammar ErzeugeBeispielGrammatik() { Choices zusatzWörter = new Choices("Dzaebel", "Luca", "Joshua", "Eva"); GrammarBuilder grammarBuilder = new GrammarBuilder("Start"); grammarBuilder.Append(zusatzWörter); Grammar g = new Grammar(grammarBuilder); g.Name = "Familiennamen"; return g; } private void btnStarteErkennung_Click(object sender, EventArgs e) { engine.UnloadAllGrammars(); Grammar beispielGrammar = ErzeugeBeispielGrammatik(); engine.LoadGrammar(beispielGrammar); engine.LoadGrammar(new DictationGrammar()); AnzeigeVerfügbareGrammars(engine); engine.RecognizeAsync(RecognizeMode.Multiple); } private void AnzeigeVerfügbareGrammars(SpeechRecognitionEngine engine) { StringBuilder info = new StringBuilder(); foreach (Grammar grammar in engine.Grammars) info.AppendLine(" - \"" + grammar.GetType().Name + " " + grammar.Name + "\"\r\n" + GrammarBuilderElemente(grammar)); MessageBox.Show("Grammars der Engine:\r\n" + info.ToString()); } private string GrammarBuilderElemente(Grammar grammar) { FieldInfo builder = grammar.GetType().GetField("_grammarBuilder", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.NonPublic); if (builder == null) return ""; GrammarBuilder gb = builder.GetValue(grammar) as GrammarBuilder; if (gb == null) return ""; return " " + gb.DebugShowPhrases; } private void btnStop_Click(object sender, EventArgs e) { engine.RecognizeAsyncStop(); } private void ControlsHinzufügen() { txtInfo = new TextBox(); btnStarteErkennung = new Button(); btnStop = new Button(); txtInfo.Location = new Point(15, 53); txtInfo.Multiline = true; txtInfo.Name = "txtInfo"; txtInfo.ScrollBars = ScrollBars.Both; txtInfo.Size = new Size(396, 171); btnStarteErkennung.Location = new Point(12, 12); btnStarteErkennung.Name = "btnStarteErkennung"; btnStarteErkennung.Size = new Size(101, 23); btnStarteErkennung.TabIndex = 4; btnStarteErkennung.Text = "Starte Erkennung"; btnStarteErkennung.UseVisualStyleBackColor = true; btnStarteErkennung.Click += btnStarteErkennung_Click; btnStop.Location = new Point(119, 12); btnStop.Name = "btnStop"; btnStop.Size = new Size(38, 23); btnStop.TabIndex = 8; btnStop.Text = "Stop"; btnStop.UseVisualStyleBackColor = true; btnStop.Click += btnStop_Click; ClientSize = new Size(420, 244); Controls.Add(btnStop); Controls.Add(btnStarteErkennung); Controls.Add(txtInfo); Text = "Spracherkennung mit zusätzlicher Grammar"; } } }
---------------------------------------------Die anderen Grammars sind normal oft intern SAPI und werden oft über COM ausgelesen.
Obiges ist natürlich nur ein Beispiel - man könnte die Begriffe auch aus einer XML-Datei lesen, je nach Grammar-Kontruktor.
ciao Frank- Als Antwort vorgeschlagen Thorsten DörflerEditor Samstag, 23. Juli 2011 08:04
- Bearbeitet Frank Dzaebel Samstag, 23. Juli 2011 14:29
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 27. Juli 2011 14:24
-
So, hier noch eine kurze Rückmeldung, bevor ich das Ganze vergesse.
Ich habe ein wenig mit einer eigenen Grammar (erstellt aus dem OpenOffice Dictionary, aus dem ich verschiedene Worte herausgefiltert habe) herumexperimentiert, und die Ergebnisse der Spracherkennung angeschaut. Im Endeffekt hat sich herausgestellt, dass das Standard DictationGrammar weitaus bessere Ergebnisse liefert, weshalb ich dieses nutze und die nicht gewünschten Worte im Nachhinein herausfiltere.
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 9. August 2011 09:02