Hallo Community,
dies ist mein erstes Tutorial, es geht um Sprachsteuerung in VB.NET.
1. Allgemeines
So, dann fangen wir mal an.
Was wollen wir machen?
Wir möchten eine Sprachsteuerung machen welche von uns gesprochene Wörter oder Sätze erkennt und darauf reagiert.
Ihr braucht für die Sprachsteuerung .NET 3.0 oder höher. Ich weiß nicht ob die Sprachsteuerung auf XP läuft. Getestet habe ich sie gerade auf Windows 7 Prof. 64 Bit und XP Home Edition 32 Bit auf Windows 7 funktionierte sie sehr zuverlässig und flüssig. Auf Windows XP wurde ich jedoch mit Fehlermeldungen zugeschüttet welche ich nicht richtig nachvollziehen konnte. Gut, genug geredet jetzt zur richtigen Theroie .
2. Theroie
Also, wie funktioniert eine Sprachsteuerung eigentlich? Soweit ich weis, zeichnet eine Sprachsteuerung den gesprochenen Befehl auf und vergleicht ihn mit einer anderen Stimme. Genauer: Vorher spricht jmd einen Satz welcher in Buchstaben aufgegliedert wird. Z.B. Ich habe einen tollen Affen. > I | c | h | h | a | b | e usw. Und in diesem Satz müssen alle Buchstaben des Alphabetes vorhanden sein. Danach wird aus den Puzzelteilen das Wort wieder zusammen gelegt und verglichen mit der Aufnahme.
Ich weis ist nicht so gut erklärt wenns jmd besser Formulieren kann bitte mir sagen ich werde es editieren.
3. Praxis
Endlich bei der Praxis angekommen und das gelaber ist weg.
1. Ein Projekt erstellen
Als erstes brauchen wir ein neues Projekt, eine Konsolenanwendung.(Wahlweise auch eine Windows Forms Anwedung Code muss etwas abgeändert werden.)
Wenn ihr die Konsolenanwendung erstellt habt fügt einen Verweis hinzu, dafür klickt ihr in Visual Studio auf Projekt > 'Name eures Projektes' - Eigenschaften > Verweise > Hinzufügen > .NET und sucht System.Speech > OK > Fertig wieder zurrück zum Code.
Als erstes Importiert ihr jetzt diese 7 Zeilen:
Über Sub Main kommt das:
Nun, schreibt ihr in Sub Main() folgenden Code:
Wenn bis hierhin alles funktioniert hat ist es super. Dann sind wir fast durch.
Unter den Code Block aber auch noch in Sub Main() kommt noch das hier:
So das dient dazu das Programm zu beenden wenn Beenden gesagt wird.
So, wie ihr hoffentlich gemerkt habt haben wir per AddressOf auf einen Sub namens recognizer_SpeechRecognized verwiesen. Dieser kommt jetzt:
Ein kleiner Brocken, aber nicht gleich verständlich. Hier die Erklärung: Dieser Sub dient dazu wenn ein richtiger Sprachbefehl erkannt wurde diesen in die Console zu schreiben oder etwas damit zu machen. Bei Console.WriteLine seht ihr e.Result.Text dies ist der Befehl welcher erkannt wurde, der wird in die Console geschrieben danach kommt noch e.Result.Confidence.ToString() das ist ein kleiner Zusatz welcher uns die Erkennungsrate verrät also wie genau der Befehl erkannt wurde. Weiter unten könnt ihr dei If Abfrage sehen. Sie überprüft ob e.Result.Text also der erkannte Befehl gleich ende ist und wenn ja dann mit recognizer.Dispose() die Spracherkennung sauber beenden und per Application.Exit die Anwendung verlassen.
So, das wars eigentlich auch schon. Jetzt kommt aber noch der Aufbau von grammar.xml diese muss in diesem Fall im Verzeichnis liegen in dem auch das Programm ansässig ist. Sie sieht folgendermasen aus:
So jetzt geht es an die Erklärung die Oberen langen Zeieln sind nur eine kleine Formatierung für die XML Datei. Danach kommt xml:lang="de-De" und das ist wichtig hier wird die Spracherkennung auf Deutsch gestellt. Unter <item>Kommando</item> könnt ihr euere Kommandos hinzufügen wenn ihr euer Programm mal mit dieser Datei probiert: Werdet ihr merken es funktionieren alle Befehle auser Hello guy. Wenn ihr statt de-DE mal en-EN nehmt werdet ihr merken es geht kein Befehl auser Hello guy. Also wenn ihr enlische Befehle wollt de-DE durch en-EN ersetzen. Diese Datei kann natürlich auf eingelesen verändert und wieder geschrieben werden dazu gibt es aber gute Tutorials hier. Ich werde hier noch eine Sprachausgabe hinzufügen, welche mommentan aber nur auf Englisch funktioniert wenn sie fertig ist poste ich sie hier.
Viel Spaß damit!
Credits:
_Eckl ~ Me
Finn
dies ist mein erstes Tutorial, es geht um Sprachsteuerung in VB.NET.
1. Allgemeines
So, dann fangen wir mal an.
Was wollen wir machen?
Wir möchten eine Sprachsteuerung machen welche von uns gesprochene Wörter oder Sätze erkennt und darauf reagiert.
Ihr braucht für die Sprachsteuerung .NET 3.0 oder höher. Ich weiß nicht ob die Sprachsteuerung auf XP läuft. Getestet habe ich sie gerade auf Windows 7 Prof. 64 Bit und XP Home Edition 32 Bit auf Windows 7 funktionierte sie sehr zuverlässig und flüssig. Auf Windows XP wurde ich jedoch mit Fehlermeldungen zugeschüttet welche ich nicht richtig nachvollziehen konnte. Gut, genug geredet jetzt zur richtigen Theroie .
2. Theroie
Also, wie funktioniert eine Sprachsteuerung eigentlich? Soweit ich weis, zeichnet eine Sprachsteuerung den gesprochenen Befehl auf und vergleicht ihn mit einer anderen Stimme. Genauer: Vorher spricht jmd einen Satz welcher in Buchstaben aufgegliedert wird. Z.B. Ich habe einen tollen Affen. > I | c | h | h | a | b | e usw. Und in diesem Satz müssen alle Buchstaben des Alphabetes vorhanden sein. Danach wird aus den Puzzelteilen das Wort wieder zusammen gelegt und verglichen mit der Aufnahme.
Ich weis ist nicht so gut erklärt wenns jmd besser Formulieren kann bitte mir sagen ich werde es editieren.
3. Praxis
Endlich bei der Praxis angekommen und das gelaber ist weg.
1. Ein Projekt erstellen
Als erstes brauchen wir ein neues Projekt, eine Konsolenanwendung.(Wahlweise auch eine Windows Forms Anwedung Code muss etwas abgeändert werden.)
Wenn ihr die Konsolenanwendung erstellt habt fügt einen Verweis hinzu, dafür klickt ihr in Visual Studio auf Projekt > 'Name eures Projektes' - Eigenschaften > Verweise > Hinzufügen > .NET und sucht System.Speech > OK > Fertig wieder zurrück zum Code.
Als erstes Importiert ihr jetzt diese 7 Zeilen:
Code:
Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Speech Imports System.Speech.Recognition Imports System.Text Imports System.Speech.Synthesis
Code:
Public spoken_text As String
Code:
' In diesem Teil wird euere Grammar hinzugefügt also eure Worte und .NET wird gesagt das ihr auf die Sprachsteuerung zugreifen wollt.
Console.WriteLine("Sprachsteuerung wird gestartet...")
' Hier wird die Sprachsteuerung deklariert
Dim recognizer As New SpeechRecognitionEngine()
' Hier wird der Sprachsteuerung gesagt das es das Standart Mikrofon nehmen soll
recognizer.SetInputToDefaultAudioDevice()
AddHandler recognizer.SpeechRecognized, AddressOf recognizer_SpeechRecognized
' Ihr müsst Try Catch nicht verwenden aber es ist empfehlenswert wenn etwas nicht funktioniert das man nicht mit Fehlern beworfen wird.
Try
' So, hier werden euere Wörter gespeichert also eure Befehle. Diese stehen in grammar.xml das kommt später
Dim grammar As New Grammar(My.Application.Info.DirectoryPath + "\grammar.xml", "thema")
' Hier wird nochmal der Cache von grammars gelöscht damit nichts falsches aufgenommen wird
recognizer.UnloadAllGrammars()
' Hier erfolgt die Zuweisung der Befehle
recognizer.LoadGrammar(grammar)
' Hier wird die eigentliche Erkennung gestartet.
recognizer.RecognizeAsync(RecognizeMode.Multiple)
Catch ex As Exception
Console.WriteLine("Exception aufgetreten: " & ex.Message)
Exit Sub
Unter den Code Block aber auch noch in Sub Main() kommt noch das hier:
Code:
Console.WriteLine("Sprachsteuerung erfolgreich gestartet.")
While Not spoken_text = "Beenden"
System.Threading.Thread.Sleep(100)
End While
Console.WriteLine("Programm wird geschlossen...")
recognizer.Dispose()
So, wie ihr hoffentlich gemerkt habt haben wir per AddressOf auf einen Sub namens recognizer_SpeechRecognized verwiesen. Dieser kommt jetzt:
Code:
Private Sub recognizer_SpeechRecognized(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechRecognizedEventArgs)
spoken_text = e.Result.Text
Console.WriteLine((e.Result.Text & " (") + e.Result.Confidence.ToString() & ")")
End Sub
So, das wars eigentlich auch schon. Jetzt kommt aber noch der Aufbau von grammar.xml diese muss in diesem Fall im Verzeichnis liegen in dem auch das Programm ansässig ist. Sie sieht folgendermasen aus:
Code:
<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>Test</item>
<item>Dies ist ein Test</item>
<item>Beenden</item>
<item>Hello guy</item>
</one-of>
</rule>
</grammar>
Viel Spaß damit!
Credits:
_Eckl ~ Me
Finn






