Sprachsteuerung

  • VB.NET
  • .NET (FX) 4.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Jason.

    Sprachsteuerung

    Hallo.

    Ich habe mir mal überlegt ein Programm zu erstellen das mit der Stimme gesteuert werden kann.
    Ich habe gesucht, und auch was gefunden.

    Hier ist der Code:

    VB.NET-Quellcode

    1. Imports System.Speech.Recognition
    2. Imports System.IO
    3. Public Class Form1
    4. Private _GrammarFile As String = Path.GetFullPath("grammar.xml")
    5. Dim WithEvents recognizer As SpeechRecognitionEngine
    6. Private Sub recognizer_SpeechRecognized(ByVal sender As Object, ByVal e As SpeechRecognizedEventArgs) Handles recognizer.SpeechRecognized
    7. Dim spoken_text = e.Result.Text
    8. If spoken_text = "Beenden" Then
    9. Me.Close()
    10. Return
    11. End If
    12. RichTextBox1.AppendText(spoken_text & " (" & e.Result.Confidence.ToString() & ")" & ControlChars.Cr)
    13. End Sub
    14. Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As FormClosedEventArgs) Handles Me.FormClosed
    15. If recognizer IsNot Nothing Then recognizer.Dispose()
    16. End Sub
    17. Private Sub DisplayManual()
    18. Using sw As New StringWriter
    19. Dim xDoc = XDocument.Load(_GrammarFile)
    20. For Each xel In xDoc.Elements()(0).Elements()(0).Elements()(0).Elements()
    21. sw.WriteLine(xel.Value)
    22. Next
    23. Richtextbox1.Text = sw.ToString
    24. End Using
    25. End Sub
    26. Private Sub ckRecognationEnabled_CheckedChanged_1(sender As Object, e As EventArgs) Handles ckRecognationEnabled.CheckedChanged
    27. Try
    28. If ckRecognationEnabled.Checked Then
    29. recognizer = New SpeechRecognitionEngine()
    30. recognizer.SetInputToDefaultAudioDevice()
    31. Dim grammar As New Grammar(_GrammarFile, "thema")
    32. recognizer.UnloadAllGrammars()
    33. recognizer.LoadGrammar(grammar)
    34. recognizer.RecognizeAsync(RecognizeMode.Multiple)
    35. DisplayManual()
    36. Else
    37. RichTextBox1.Clear()
    38. recognizer.Dispose()
    39. recognizer = Nothing
    40. End If
    41. Catch ex As Exception
    42. MessageBox.Show("Fehler: " & ex.Message)
    43. End Try
    44. End Sub
    45. End Class


    Den Code habe ich auf der Seite gefunden: Sprachsteuerung [Überarbeitet]

    Als ich auf die CheckBox klickte, um die Sprachsteuerungsfunktion zu starten, kam folgender Fehler:
    Eine nicht behandelte Ausnahme des Typs "System.FormatException" ist in System.Speech.dll aufgetreten.

    Zusätzliche Informationen: C:\Users\Programmierung\documents\visual studio 2012\Projects\Sprachsteuerung\Sprachsteuerung\bin\Debug\grammar.xml(2,54): error : Das XML-Grammatikformat ist ungültig. Die Grammatik kann nicht in das XML-Dokumentobjektmodel geladen werden.

    VB.NET-Quellcode



    Der Fehler tritt in der Zeile auf:

    VB.NET-Quellcode

    1. Dim grammar As New Grammar(_GrammarFile, "thema")


    Die Datei ist vorhanden.
    Der Inhalt des XML Dokumentes:

    VB.NET-Quellcode

    1. <grammar xmlns="http://www.w3.org/2001/06/grammar"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.w3.org/2001/06/grammar
    3. http://www.w3.org/TR/speech-grammar/grammar.xsd"xml:lang="de-DE" version="1.0">
    4. <rule id="thema" scope="public"><one-of>
    5. <item>Test</item><item>Dies ist ein Test</item>
    6. <item>Beenden</item>
    7. <item>was</item></one-of>
    8. </rule>
    9. </grammar>


    Den Code verstehe ich nicht so ganz, könnt ihr mir helfen den Code zu korrigieren?

    Ich benutze dazu WindowsForms.
    Also dein XML-File ist ungültig. In der Fehlermeldung steht "...grammar.xml(2,54)", und das ist das der Cursorplatz in Zeile 2 am Ende des ersten Strings.
    Was falsch ist, kann ich dir auch nicht sagen.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Nein, das meint, dass du Code formatierst.

    Nicht gut formatiert:

    XML-Quellcode

    1. <root>
    2. <item>
    3. <name>abc</name>
    4. <value>def</value>
    5. </item>
    6. </root>


    Besser formatiert:

    XML-Quellcode

    1. <root>
    2. <item>
    3. <name>abc</name>
    4. <value>def</value>
    5. </item>
    6. </root>
    Mit freundlichen Grüßen,
    Thunderbolt
    Ich habe den XML-Code mit einem extra Programm formatiert:

    XML-Quellcode

    1. <grammar xmlns="http://www.w3.org/2001/06/grammar"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.w3.org/2001/06/grammar
    3. http://www.w3.org/TR/speech-grammar/grammar.xsd"xml:lang="de-DE" version="1.0">
    4. <rule id="thema" scope="public">
    5. <one-of>
    6. <item>Test</item>
    7. <item>Dies ist ein Test</item>
    8. <item>Beenden</item>
    9. <item>was</item>
    10. </one-of>
    11. </rule>
    12. </grammar>


    Der Fehler kommt immernoch.
    Kann es sein, das es besser ist einige Zeilen zu entfernen? :?:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Jason“ ()

    @Jason

    ThePlexian schrieb:

    Also dein XML-File ist ungültig. In der Fehlermeldung steht "...grammar.xml(2,54)", und das ist das der Cursorplatz in Zeile 2 am Ende des ersten Strings.
    Was falsch ist, kann ich dir auch nicht sagen.

    Thunderbolt schrieb:

    Da fehlen Leerzeichen und da ist ein Zeilenumbruch, der da nicht hingehört.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Um Thunderbolts Fehlererklärung zu konkretisieren, im XML Markup müssen je zwei Attribute durch ein Leerzeichen abgetrennt sein.

    Das heißt am konkreten Beispiel:

    XML-Quellcode

    1. xsi:schemaLocation="http://www.w3.org/2001/06/grammar http://www.w3.org/TR/speech-grammar/grammar.xsd"xml:lang="de-DE"
    muss

    XML-Quellcode

    1. xsi:schemaLocation="http://www.w3.org/2001/06/grammar http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="de-DE"

    lauten. Das dann entsprechend auf alle weiteren Attribute anwenden.
    Ich habe die zweite Zeile ersetzt:

    XML-Quellcode

    1. ​<grammar xmlns="http://www.w3.org/2001/06/grammar"
    2. xsi:schemaLocation="http://www.w3.org/2001/06/grammar http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="de-DE"
    3. http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="de-DE" version="1.0">
    4. <rule id="thema" scope="public">
    5. <one-of>
    6. <item>Test</item>
    7. <item>Dies ist ein Test</item>
    8. <item>Beenden</item>
    9. <item>was</item>
    10. </one-of>
    11. </rule>
    12. </grammar>


    Wie muss ich die anderen Zeilen korrigieren?

    Muss ich diese Zeile entfernen: ?

    XML-Quellcode

    1. ​http://www.w3.org/TR/speech-grammar/grammar.xsd" xml:lang="de-DE" version="1.0">