Feedback

Spracherkennung

Sprache: C#

Ein kurzes Bsp zur Spracherkennung, wenn ich mehr zeit habe, werde ich vlt ein umfangreiches Beispiel einstellen, wie man Grammatiken im Code schreibt, komplexere Konstrukte bildest,… Aber als kleiner Einblick, dürfte dieses Beispiel recht nützlich sein
private SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();

//--------Beim laden aufrufen----------
recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
Grammar grammar = new Grammar("grammar.xml", "Befehle");
recognizer.UnloadAllGrammars();
recognizer.LoadGrammar(grammar);
//--------------------------------------

private void btnListen_Click(object sender, EventArgs e) {
   recognizer.SetInputToDefaultAudioDevice();
   recognizer.RecognizeAsync(RecognizeMode.Multiple);
}

private void btnStop_Click(object sender, EventArgs e) {
   recognizer.RecognizeAsyncCancel();
}

[DllImport("user32.dll")]
public static extern void LockWorkStation();

private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) {
   if (e.Result.Text == "Schließen") {
      recognizer.Dispose();
      this.Close();
   } else if (e.Result.Text == "Sperren") {
      LockWorkStation();
   }
}



-----------------XML-Datei-------------------
<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="Befehle" scope="public">
    <one-of>
      <item>Schließen</item>
      <item>Sperren</item>
    </one-of>
  </rule>
</grammar>
private SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();

//--------Beim laden aufrufen----------
recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
Grammar grammar = new Grammar("grammar.xml", "Befehle");
recognizer.UnloadAllGrammars();
recognizer.LoadGrammar(grammar);
//--------------------------------------

private void btnListen_Click(object sender, EventArgs e) {
   recognizer.SetInputToDefaultAudioDevice();
   recognizer.RecognizeAsync(RecognizeMode.Multiple);
}

private void btnStop_Click(object sender, EventArgs e) {
   recognizer.RecognizeAsyncCancel();
}

[DllImport("user32.dll")]
public static extern void LockWorkStation();

private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) {
   if (e.Result.Text == "Schließen") {
      recognizer.Dispose();
      this.Close();
   } else if (e.Result.Text == "Sperren") {
      LockWorkStation();
   }
}



-----------------XML-Datei-------------------
<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="Befehle" scope="public">
    <one-of>
      <item>Schließen</item>
      <item>Sperren</item>
    </one-of>
  </rule>
</grammar>

10 Kommentare

  1. xml:lang=“de-DE“ macht bei mir Probleme:

    The language for the grammar does not match the language of the speech recognizer.

    Wenn ich es in en-GB abändere geht es, dann muss ich die deutschen Befehler aber mit einem englischen Slang aussprechen damit es funktioniert! 😛

    Vielen Dank, echt interessant deine Beitragsreihe! 🙂

  2. ist irgendwie eigenartig, bei mir funktioniert es ohne probleme
    probier es einmal dem recognizer beim initialisieren eine culture mitzugeben
    SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(CultureInfo.CreateSpecificCulture(„de-DE“));

  3. Dann wird folgende Exception geworfen:

    No recognizer of the required ID found.
    Parameter name: culture

    Ich habe dir/euch vorenthalten, das ich eine englische Version vom VS2010 habe in Kombination mit .NET 4, wahrscheinlich wurde die Installation dann sprachentechnisch auch aufs englische hin ausgerichtet?
    Hat jemand da Erfahrung?

  4. Hi Felix Knorr,

    kannst du, oder irgendjemand mir bitte erklären, wie ich die spracherkennung in einer webanwendung (asp.net, visual web developer 2008 , c#) integrieren kann.
    es sehr wichtig für mich und ich bin für jedes hilfe dankbar.

    erstmal danke und ich hoffe auf antwort.

    schönes wochenende :o)

  5. das funktioniert im prinzip ganz gleich wie bei windows anwendungen.
    dabei ist mir gerade selber aufgefallen das ich in diesem tutorial etwas vergessen habe, das man auf den namespace System.Speech zugreifen kann, muss man ihn zuerst den Verweisen hinzufügen,
    falls es nicht funktioniert kannst du mir eine pn schicken und ich kann da dann einen kleinen bspcode in asp.net schicken

  6. Hi , Felix Knorr ….. die spracherkennung funktioniert nicht wie bei windows anwendung.. den verweis habe hinzugefügt, trotzdem funktioniert es nicht…. ich wollte dir eine pn schicken, aber hier geht das nicht, teilt du mir bitte mit , wo ich dich schreiben kann… bitte ich brauche deine hilfe. DANKE !![b][/b]

    das funktioniert im prinzip ganz gleich wie bei windows anwendungen.
    dabei ist mir gerade selber aufgefallen das ich in diesem tutorial etwas vergessen habe, das man auf den namespace System.Speech zugreifen kann, muss man ihn zuerst den Verweisen hinzufügen,
    falls es nicht funktioniert kannst du mir eine pn schicken und ich kann da dann einen kleinen bspcode in asp.net schicken

  7. Hallo Felix Knorr, bitte melde dich . Ich habe ein paar Fragen bezüglich die Spracherkenung.

    Danke[b][/b]

  8. Hallo Felix Knorr, bitte melde dich . Ich habe ein paar Fragen bezüglich die Spracherkenung.

    Danke[b][/b]

  9. Halllo ,Felix Knorr !! schön , dass du wieder da bist 🙂 wie gesagt die spracherkenung funktioniert nicht in asp.net wie bei windows anwendung kannst du mir da helfen.

    Danke[b][/b]