Probleme mit Speech-Recognition

  • VB.NET

Es gibt 47 Antworten in diesem Thema. Der letzte Beitrag () ist von Lagax.

    Hier mal meine dahingedetschte Lösung:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim i As Integer = 1
    3. '"<item>" + ReadLine(My.Computer.FileSystem.SpecialDirectories.Desktop + "\Projekt SpeakIT\Alle.txt", i) + "</item>")
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. CheckForIllegalCrossThreadCalls = False
    6. Dim reader As New IO.StreamReader(My.Computer.FileSystem.SpecialDirectories.Desktop + "\Projekt SpeakIT\Alle.txt")
    7. RichTextBox1.Text = reader.ReadToEnd.ToString
    8. reader.Dispose()
    9. reader.Close()
    10. reader = Nothing
    11. End Sub
    12. Private Sub MakeXML1()
    13. Dim Writer As New IO.StreamWriter(My.Computer.FileSystem.SpecialDirectories.Desktop + "\Projekt SpeakIT\grammar.txt", True)
    14. For Each S As String In RichTextBox1.Lines
    15. Writer.WriteLine("<item>" + S + "</item>")
    16. Label1.Text = "<item>" + S + "</item>"
    17. Next
    18. Writer.Flush()
    19. Writer.Dispose()
    20. Writer.Close()
    21. Writer = Nothing
    22. End Sub
    23. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    24. Dim t As New Threading.Thread(AddressOf MakeXML1)
    25. t.Start()
    26. End Sub
    27. End Class

    Musst du nur noch entsprechend anpassen.
    Einfach in deinen Editor gehen, z.B. Notepad++. Danach kopierst du das da rein:

    XML-Quellcode

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


    Abspeichern als XML und fertig! (Der Abstand zwischen Rand und <item> sind 6 Leerzeichen :D )
    Neuen Threadh Laden und dann in eine Variable damit, so würde ich versuchen.
    Oder Versuchen den Fille schrit für schrit zu lesen. Aber mit Threadh kann man laden ohne den Benutzer zu stören!

    Myrax schrieb:

    Stimmt das, wenn ich eine XML mit ca 199000 Zeilen es eine ganze Zeit lädt? (Wenn ja, wie kann ich das unterbinden?)

    Bei mir gibt es die System.Speech.dll garnet.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Ähm kleine Frage?Kann man damit jetzt auch programmieren ,dass wenn ich sage "hallo" das programm mir "guten Tag antwortet. Hab auch schon mal einwenig damit rum experimentiert.

    So dachte ich mir das funtzt aber net , kann auch daran liegen das ich ziemlich neu in dem Gebiet VB bin und noch Anfänger bin :rolleyes:

    If spoken_text = "hallo" Then

    Console.WriteLine("hallo du")

    Naja danke schonmal für Antworten :)
    Ihr dürft nicht alles nur c&p machen.

    in der commandline application läuft die anwendung bis zur endlosschleife und erreicht dort engine.dispos nicht!

    in der windows forms anwendung müsst ihr das umändern :D

    Fügt der Form eine TextBox (TextBox1) hinzu und schaut euch mal diesen code an funktioniert bei mir einwandfrei ;D

    @Zulutangodelta hier ist auch dein verlangen mit einbezogen schau dir die "recognizer_SpeechRecognized" Methode an ;)

    Spoiler anzeigen


    VB.NET-Quellcode

    1. Private recognizer As New SpeechRecognitionEngine()
    2. Private spoken_text As String
    3. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    4. recognizer.Dispose()
    5. End Sub
    6. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. ' In diesem Teil wird euere Grammar hinzugefgt also eure Worte und .NET wird gesagt das ihr auf die Sprachsteuerung zugreifen wollt.
    8. ' Hier wird die Sprachsteuerung deklariertDim recognizer As New SpeechRecognitionEngine()
    9. ' Hier wird der Sprachsteuerung gesagt das es das Standart Mikrofon nehmen soll
    10. recognizer.SetInputToDefaultAudioDevice()AddHandler recognizer.SpeechRecognized, AddressOf recognizer_SpeechRecognized
    11. ' Ihr msst Try Catch nicht verwenden aber es ist empfehlenswert wenn etwas nicht funktioniert das man nicht mit Fehlern beworfen wird.
    12. Try
    13. ' So, hier werden euere Wrter gespeichert also eure Befehle. Diese stehen in grammar.xml das kommt spterDim grammar As New Grammar(My.Application.Info.DirectoryPath + "\grammar.xml", "thema")
    14. ' Hier wird nochmal der Cache von grammars gelscht damit nichts falsches aufgenommen wird
    15. recognizer.UnloadAllGrammars()
    16. ' Hier erfolgt die Zuweisung der Befehle
    17. recognizer.LoadGrammar(grammar)
    18. ' Hier wird die eigentliche Erkennung gestartet.
    19. recognizer.RecognizeAsync(RecognizeMode.Multiple)
    20. Catch ex As Exception
    21. MsgBox(ex.Message)
    22. End Try
    23. End Sub
    24. Private Sub recognizer_SpeechRecognized(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechRecognizedEventArgs)
    25. spoken_text = e.Result.Text
    26. If spoken_text = "Hallo Computer" Then
    27. TextBox1.Text &= vbNewLine & "Hallo [Dein name], wie geht es dir?"
    28. Else
    29. TextBox1.Text &= vbNewLine & spoken_text
    30. End If
    31. End Sub






    Ich hab aber noch eine frage was bedeutet in der xml datei:

    XML-Quellcode

    1. xmlns="http://www.w3.org/2001/06/grammar"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.w3.org/2001/06/grammar
    4. http://www.w3.org/TR/speech-grammar/grammar.xsd"


    Wieso wird in dieszen zeilen auf eine internetseite verwiesen. kann man die grammar.xsd datei nicht runterladen damit man die anwendung auch ohne internet benutzen kann? sodass alles lokal gespeichert oder mit der anwendung mitgeliefert werden, kann. Persöhnlich fände ich das besser dann könnte man dem user gewährleisten dass die anwendung immer ohne fehler läuft, angenommen die internetseite www.w3.org fällt aus oder stürzt ab oder was weiß ich kann die anwengung nicht mehr auf die grammar.xsd zugreifen :!: w3.org/w3.org/w3.org/w3.org/w3.org/w3.org/w3.org/w3.org/w3.org/

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