Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 21:25

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[VB.net]Sprachsteuerung

Discussion on [VB.net]Sprachsteuerung within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
elite*gold: 32
Join Date: Oct 2010
Posts: 250
Received Thanks: 75
Thumbs up [VB.net]Sprachsteuerung

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:
Code:
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Speech
Imports System.Speech.Recognition
Imports System.Text
Imports System.Speech.Synthesis
Über Sub Main kommt das:
Code:
Public spoken_text As String
Nun, schreibt ihr in Sub Main() folgenden Code:
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
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:
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 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:
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
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:
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>
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
_Eckl is offline  
Thanks
3 Users
Old 08/25/2011, 20:34   #2
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Gutes Tutorial, musste ich natürlich gleich mal ausprobieren, und hat alles funktioniert,
nur war die Spracherkennung manchmal etwas falsch, bzw langsam.
Aber wenn man laut und deutlich genug Spricht ist es ganz annehmbar
.SkyneT. is offline  
Old 08/25/2011, 21:12   #3
 
elite*gold: 32
Join Date: Oct 2010
Posts: 250
Received Thanks: 75
Ja es wird wahrscheinlich noch irgenwann verbessert :P
Aber liegt auch an Mikro
_Eckl is offline  
Old 08/25/2011, 22:12   #4
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,811
Fürs nächste mal: vllt. nicht alles fett schreiben, bekommt man ja Augenschmerzen davon..
Kraizy​ is offline  
Old 08/26/2011, 18:59   #5
 
elite*gold: 32
Join Date: Oct 2010
Posts: 250
Received Thanks: 75
Quote:
Originally Posted by xKraizy View Post
Fürs nächste mal: vllt. nicht alles fett schreiben, bekommt man ja Augenschmerzen davon..
Hab es jetzt geändert
PS: Weiß nicht ob es gut geht weil ich habe Teile von dem Code ausm Gedächtnis geschrieben.
_Eckl is offline  
Reply


Similar Threads Similar Threads
WoW - Sprachsteuerung °.° [VOICE-COMMANDER]
05/25/2007 - World of Warcraft - 32 Replies
Das hab ich grad bei der Konkurrenz ;P gefunden. Original von: Majere This is ****ing amazing. I love it. Let me sum it up really, really simply. Control WoW with voice commands! See Voice Commander in action!



All times are GMT +1. The time now is 21:26.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.