Autor Beitrag
withewolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 15.06.08 19:09 
Hi habe heute mal mit hilfe eines Tutorials versucht eine Spracherkennung durchzuführen. Bis da hin leuft auch alles noch ganz gut denn das Problem ist das dieses Tutorial für die Console (Conslenaplication) gemacht wurde aber ich breuchte es für eine Windowsanwendung. Hab es versucht umzuschreiben:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech;
using System.Speech.Recognition;

namespace Sprachsteuerung_Versuch_1_Text_in_Textfeld
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Starten_Click(object sender, EventArgs e)
        {
            // Hier werden recognition-engine und grammar vorbereitet. SpeechRecognitionEngine bedeutet, dass nur unser Programm auf die Spracherkennung zugreift.
            SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
            recognizer.SetInputToDefaultAudioDevice();
            // hier setzen wir einen Event-Handler für das "Recognized"-Event. Es gibt noch eine Menge anderer Events.
            // Die aufgerufene Funktion recognizer_SpeechRecognized wird aufgerufen.
            recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);

            // der try-catch block ist eigentlich optional, aber ich hatte am Anfang so viele Exceptions, dass ich ihn drin gelassen habe.
            try
            {
                Grammar grammar = new Grammar("grammar.xml""thema");
                recognizer.UnloadAllGrammars();
                recognizer.LoadGrammar(grammar);
                // mit folgender Zeile wird die eigentliche Erkennung gestartet.
                recognizer.RecognizeAsync(RecognizeMode.Multiple);
            }
            catch (Exception f)
            {
                MessageBox.Show("Fehler aufgetereten:" + f.Message);
                return;
            }
            // wenn wir es bis hier geschafft haben, ist alles ok. Das zeigen wir dem Benutzer an...
            lbl_text.Text = "Betriebsbereit und Erkennung funktioniert";
            // ... und gehen in eine Schleife, die auf Tastendruck beendet wird (und mit ihr auch das Programm).
            // Jetzt noch schnell aufräumen.
            recognizer.Dispose();
            return;
        }
        // Diese Funktion wird aufgerufen, sobald etwas erkannt wurde.
        // In e.Result.Text steht der erkannte Text.
        public void recognizer_SpeechRecognized(object sender, System.Speech.Recognition.SpeechRecognizedEventArgs l)
        {
            txt_ausgabeText.Text = l.Result.Text;
            txt_ausgabeEmpfang.Text = l.Result.Confidence.ToString();
        }
        }
    }


aber aus irgendwelchen Gründen funktioniert das nicht was könte da fehlen. Denn das Programm solte nichts anderes machen als Wort wird gesagt verglichen und in einer Textbox ausgegeben. Versuche heut schon den Ganzen Tag aber ohne Erfolg.

Hir ein Link zum Tutorial:
amenthes.de/index.ph...zur-spracherkennung/

Ich hoffe das ihr mir helfen könnt bin langsam am verzweifeln.
Bin dankbar für jede Hilfe.

Mfg withewolf.

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 15.06.08 19:25 
Hallo!

Da Du die Schleife, wo auf einen Tastendruck gewartet wird, nicht mit drin hast (logisch bei einer WinForms-Anwendung), wird der recognizer sofort wieder entsorgt. Ich würde das so machen (ungetestet):

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech;
using System.Speech.Recognition;

namespace Sprachsteuerung_Versuch_1_Text_in_Textfeld
{
    public partial class Form1 : Form
    {
        private readonly SpeechRecognitionEngine recognizer;
        public Form1()
        {
            InitializeComponent();

            // Hier werden recognition-engine und grammar vorbereitet. SpeechRecognitionEngine bedeutet, dass nur unser Programm auf die Spracherkennung zugreift.
            recognizer = new SpeechRecognitionEngine();
            recognizer.SetInputToDefaultAudioDevice();
            // hier setzen wir einen Event-Handler für das "Recognized"-Event. Es gibt noch eine Menge anderer Events.
            // Die aufgerufene Funktion recognizer_SpeechRecognized wird aufgerufen.
            recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
        }



        private void Starten_Click(object sender, EventArgs e)
        {
            // der try-catch block ist eigentlich optional, aber ich hatte am Anfang so viele Exceptions, dass ich ihn drin gelassen habe.
            try
            {
                Grammar grammar = new Grammar("grammar.xml""thema");
                recognizer.UnloadAllGrammars();
                recognizer.LoadGrammar(grammar);
                // mit folgender Zeile wird die eigentliche Erkennung gestartet.
                recognizer.RecognizeAsync(RecognizeMode.Multiple);
            }
            catch (Exception f)
            {
                MessageBox.Show("Fehler aufgetereten:" + f.Message);
                return;
            }
            // wenn wir es bis hier geschafft haben, ist alles ok. Das zeigen wir dem Benutzer an...
            lbl_text.Text = "Betriebsbereit und Erkennung funktioniert";
            // ... und gehen in eine Schleife, die auf Tastendruck beendet wird (und mit ihr auch das Programm).
        }
        // Diese Funktion wird aufgerufen, sobald etwas erkannt wurde.
        // In e.Result.Text steht der erkannte Text.
        public void recognizer_SpeechRecognized(object sender, System.Speech.Recognition.SpeechRecognizedEventArgs l)
        {
            txt_ausgabeText.Text = l.Result.Text;
            txt_ausgabeEmpfang.Text = l.Result.Confidence.ToString();
        }


        public void Form1_Closed(Object sender, EventArgs e)
        {
            recoginizer.Dispose();
        }
        }
    }

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
withewolf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 15.06.08 19:43 
Hi super thx für die Antword jetzt besteht nur noch ein Problem das wenn ich unter grammer.xml ein weiteres Item hinzufüge das nicht erkannt wird. Ist da irgendwo eine Begrenzung drinnen oder sowas?

Mfg withewolf.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 15.06.08 19:49 
Wie sieht die Datei aus, wenn Du das Element hinzugefügt hast? :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
withewolf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 15.06.08 19:51 
Hir ist der Code das Problem ist das er mir keine anderen Wörter auser diese 3 erkennt egal wo ich sie hinschreibe ^^:

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<grammar xmlns="http://www.w3.org/2001/06/grammar"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/06/grammar
                             http://www.w3.org/TR/speech-grammar/grammar.xsd"

         xml:lang="de-DE" version="1.0">
  <rule id="thema" scope="public">
    <one-of>
      <item>Design</item>
      <item>Wirtschaft</item>
      <item>Informatik</item>
      <item>Hallo</item> //Hinzugefügt
    </one-of>
  </rule>
</grammar>


Mfg withewolf.

Moderiert von user profile iconChristian S.: XML-Tags hinzugefügt