Sprachsteuerung

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Sprachsteuerung

    Ausgelagert aus Sprachsteuerung [Überarbeitet]. ~Thunderbolt

    Hallo,
    sorry das ich den alten Thread nochmals anspreche. Versuche die Sprachsteuerung in mein Programm einzubetten.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class CSprachsteuerung
    2. Public Aktiv As Boolean
    3. Private GrammarFile As String
    4. ' Private Woerterbuch As XDocument
    5. Private EingabeText As String
    6. Public WithEvents Mikro As SpeechRecognitionEngine
    7. Public Sub Initalisieren()
    8. If Not Me.Aktiv Then Exit Sub
    9. Me.Mikro = New SpeechRecognitionEngine
    10. Me.GrammarFile = Pfade.Diverse.Pfad & "grammar.xml"
    11. ' Me.Woerterbuch = XDocument.Load(Me.GrammarFile)
    12. Me.Mikro.SetInputToDefaultAudioDevice()
    13. Dim grammar As New Grammar(Me.GrammarFile, "thema")
    14. Me.Mikro.UnloadAllGrammars()
    15. Me.Mikro.LoadGrammar(grammar)
    16. Me.Mikro.RecognizeAsync(RecognizeMode.Multiple)
    17. Me.Eingabetext = Nothing
    18. End Sub
    19. Private Sub Mikro_SpeechRecognized(ByVal sender As Object, ByVal e As SpeechRecognizedEventArgs) Handles Mikro.SpeechRecognized
    20. If Not Me.Aktiv Then Exit Sub
    21. Me.Eingabetext = e.Result.Text
    22. Fehlermeldung.Schreiben(Me.Eingabetext)
    23. Select Case Me.Eingabetext
    24. Case "Frida"
    25. With Sprachausgabe
    26. .Sprachtext = " Ja Hallo " & Anwender.Vorname
    27. .Sprachgeschwindigkeit = -2
    28. .Vorlesen()
    29. End With
    30. Me.EingabeClearing()
    31. Exit Sub
    32. Case "Ausschalten"
    33. If Not Ausschalten.Visible Then
    34. Ausschalten.Show()
    35. Me.EingabeClearing()
    36. Exit Sub
    37. End If
    38. Case "Beenden"
    39. If TerminKalender.Visible Then TerminKalender.Close()
    40. If Musikcenter.Visible Then Musikcenter.Close()
    41. If Statistik_Tagesdaten.Visible Then Statistik_Tagesdaten.Close()
    42. If Fotocenter.Visible Then Fotocenter.Close()
    43. If Astronomie.Visible Then Astronomie.Close()
    44. If Buero.Visible Then Buero.Close()
    45. If Lottomanagment.Visible Then Lottomanagment.Close()
    46. Me.EingabeClearing()
    47. Exit Sub
    48. Case "Kalender oeffnen"
    49. If TerminKalender.Visible Then
    50. TerminKalender.WindowState = FormWindowState.Maximized
    51. Me.EingabeClearing()
    52. Exit Sub
    53. Else
    54. TerminKalender.Show()
    55. Me.EingabeClearing()
    56. Exit Sub
    57. End If
    58. Case "Foto oeffnen"
    59. If Not Fotocenter.Visible Then
    60. Fotocenter.Show()
    61. Me.EingabeClearing()
    62. Exit Sub
    63. End If
    64. 'Case "Musik oeffnen"
    65. ' 'If Musikcenter.Visible Then
    66. ' ' Musikcenter.WindowState = FormWindowState.Maximized
    67. ' ' Me.EingabeClearing()
    68. ' ' Exit Sub
    69. ' 'Else
    70. ' If Not Musikcenter.Visible Then
    71. ' Musikcenter.Show()
    72. ' Me.EingabeClearing()
    73. ' Exit Sub
    74. ' End If
    75. Case "Statistik oeffnen"
    76. If Not Statistik_Tagesdaten.Visible Then
    77. Statistik_Tagesdaten.Show()
    78. Me.EingabeClearing()
    79. Exit Sub
    80. End If
    81. Case "Astro oeffnen"
    82. If Not Astronomie.Visible Then
    83. Astronomie.Show()
    84. Me.EingabeClearing()
    85. Exit Sub
    86. End If
    87. Case "Buero oeffnen"
    88. If Not Buero.Visible Then
    89. Buero.Show()
    90. Me.EingabeClearing()
    91. Exit Sub
    92. End If
    93. Case "Lotto oeffnen"
    94. If Not Lottomanagment.Visible Then
    95. Lottomanagment.Show()
    96. Me.EingabeClearing()
    97. Exit Sub
    98. End If
    99. End Select
    100. Me.EingabeClearing()
    101. End Sub
    102. Private Sub EingabeClearing()
    103. Me.EingabeText = Nothing
    104. Me.Mikro.Dispose()
    105. Me.Mikro = New SpeechRecognitionEngine
    106. Me.Mikro.SetInputToDefaultAudioDevice()
    107. Dim grammar As New Grammar(Me.GrammarFile, "thema")
    108. Me.Mikro.UnloadAllGrammars()
    109. Me.Mikro.LoadGrammar(grammar)
    110. Me.Mikro.RecognizeAsync(RecognizeMode.Multiple)
    111. Thread.Sleep(1000)
    112. End Sub
    113. End Class


    Hier meine XML:
    <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
    w3.org/TR/speech-grammar/grammar.xsd"
    xml:lang="de-DE" version="1.0">
    <rule id="thema" scope="public">
    <one-of>
    <item>Ausschalten</item>
    <item>Beenden</item>
    <item>Kalender oeffnen</item>
    <item>Musik oeffnen</item>
    <item>Foto oeffnen</item>
    <item>Frida</item>
    <item>Statistik oeffnen</item>
    <item>Buero oeffnen</item>
    <item>Astro oeffnen</item>
    <item>Lotto oeffnen</item>
    </one-of>
    </rule>
    </grammar>




    Zu 80 Prozent macht das Programm das was es soll.
    Klopfe ich einfach mal auf den Tisch oder es hustet jemand im Raum, wird Case Beenden ausgeführt.
    Ist dies einmal geschehen geht alles durcheinander. Es wird dann ständig Musik öffnen verstanden obwohl dies nicht gesprochen wird.
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Westerwälder schrieb:

    wird Case Beenden ausgeführt.
    Was passiert, wenn Du tatsächlich "Beenden" sagst?
    Vielleicht gibst Du ihm "Knurzeldiehödel", um tatsächlich zu Beenden.
    Vielleicht solltest Du "Beenden" neu anlernen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    In der Methode Mikro_SpeechRecognized gibt es in den SpeechRecognizedEventArgs die Möglichkeit auszuwerten wie die Erkennungsrate war. Evtl. Hiermit etwas rum spielen... Man könnte ja sagen, wenn die Erkennungsrate bei unter 70 liegt, wird nix gemacht.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Guten Morgen Rod.

    Mit der Zeile Fehlermeldung.Schreiben(Me.Eingabetext) bekomme ich die Mikroeingabe in einem DGV angezeigt.
    Es ist Beenden wenn ich auf den Schreibtisch klopfe.
    Was meinst du mit neu anlernen?

    mrMo
    danke für den Tipp.
    If e.Result.Confidence < 0.77 Then Exit Sub
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Westerwälder schrieb:

    Was meinst du mit neu anlernen?
    Dein verlinkter Thread, 2. Theorie.
    Du hast doch das Wort "Beenden" in ein Mikrofon gesprochen.
    Wiederhole dies.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!