Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Windows 10 IoT Core:Sprachgesteuerter Roboter

Geschichte

In früheren Zeiten des Computers fand die Interaktion mit dem Computer über Lochkarten, Trackball, Lightgun, Tastaturen und sogar über Touchscreen statt. Alle diese Geräte erfordern einen physischen Kontakt, um sie zu bedienen.

Mit Jahrzehnt für Jahrzehnt verbessert sich die neue Technologie gegenüber der alten. Drahtlose Eingabegeräte werden immer beliebter, da sie einen sauberen und weniger überladenen Schreibtisch bieten. Mit der aktuellen Weiterentwicklung sowohl in der Software als auch in der Hardware ist eine neue Art von Eingaben möglich, nämlich:Visuelle und Spracheingabe.

Dieser Artikel hilft Ihnen beim Erlernen der Spracherkennungstechnologie von Windows 10 IoT Core. Am Ende des Themas erstellen wir einen Roboter mit Windows 10 IoT Core und Raspberry Pi 2 mit der Spracherkennungsanwendung. Mit dieser Spracherkennungsanwendung kann der Roboter verschiedene Bewegungsaufgaben ausführen (z. B. vorwärts bewegen, drehen, anhalten usw.), basierend auf der Benutzerinteraktion durch Sprache.

Neu beim Windows 10 IoT Core? oder Anfänger? beziehen Sie sich zuerst auf diesen Link.

Dieser Artikel wurde am 30. März 2016 aktualisiert

Was ist Spracherkennung?

In einer einzigen Zeile bedeutet Spracherkennung die Übersetzung gesprochener Wörter in einen möglichen äquivalenten Text. Die Spracherkennung kann in zwei Hauptkomponenten unterteilt werden:Signalverarbeitung und Sprachdecoder. Wir müssen uns nicht mit seiner Komplexität beschäftigen, da Microsoft bereits eine Lösung dafür entwickelt hat. Wir müssen nur ihre Sprachbibliotheken verwenden.

Schritt 1

Erste Schritte mit der Spracherkennung

Beginnen wir mit der Grundidee:

  • Spracherkennungsgrammatik erstellen (SRGS-Grammatik)
  • Spracherkennungsobjekt initialisieren und Grammatik laden (Spracherkennung)
  • Registrieren Sie sich für Spracherkennungs-Events und erstellen Sie einen Handler

Spracherkennungsgrammatik erstellen

Bevor wir mit der Spracherkennung beginnen, müssen wir verstehen, wie wir die universelle Windows-App so programmieren können, dass sie unsere Sprache oder Befehle versteht. Dazu müssen wir eine Spracherkennungsgrammatik erstellen. Spracherkennungsgrammatik kann mit der SRGS-Grammatik für die universelle Windows-App erstellt werden:

  • Verwenden Sie XML, um Grammatikdokumente zu erstellen, die der Speech Recognition Grammar Specification (SRGS) Version 1.0, dem W3C-Standard für Spracherkennungsgrammatiken, entsprechen.

Hinweis:Andere Möglichkeiten sind in .Net Framework verfügbar, aber sie werden in UWP nicht unterstützt, als dieser Artikel geschrieben wurde. Welche sind:

  • Erstellen Sie Grammatiken programmgesteuert mit Mitgliedern der Klassen GrammarBuilder und Choices im Namespace System.Speech.Recognition.
  • Verwenden Sie Konstruktoren und Methoden von Klassen im System.Speech.Recognition.SrgsGrammar-Namespace, um programmgesteuert SRGS-kompatible Grammatiken zu erstellen.

Wir beginnen mit XML-Grammatik. Bevor wir mit der Erstellung einer Grammatikdatei beginnen, müssen wir uns vorstellen und definieren, wie der Nutzer mit unserer Anwendung interagiert. Im Rahmen dieses Projekts wird der Benutzer dem Roboter befehlen, sich in beide Richtungen zu bewegen, zu stoppen und zu befehlen, die Hinderniserkennung zu aktivieren/deaktivieren. Wir können eine Liste von Sprachvokabular erstellen, die wie folgt lautet:

  • Vorwärts gehen
  • Umkehren
  • Rechts abbiegen
  • Links abbiegen
  • Stopp
  • Aktivieren Sie die Hinderniserkennung
  • Hinderniserkennung deaktivieren

Für dieses Vokabular müssen wir XML-Grammatik entwerfen. Wir müssen nur einige Grundregeln von SRGS v1 befolgen.

SRGS-Grammatik

Um eine SRGS-Grammatik zu erstellen, müssen einige grundlegende Regeln befolgt werden:

  • Root-Element muss Grammatik sein
  • Version, Sprache und XML-Namespace der Attributgrammatik müssen vorhanden sein.
  • Grammatik muss mindestens ein Regelelement enthalten. (Regelelement enthält ein Wort oder eine Phrase, die der Benutzer sprechen kann).
  • Jedes Regelelement muss ein eindeutiges ID-Attribut haben.

Wir haben die grundlegende erforderliche Struktur für die SRGS-Grammatik gesehen. Jetzt müssen wir Vokabeln dafür erstellen. Vokabeln sind eine Reihe von Wörtern, die dem Roboter einen sinnvollen Befehl geben.

Zum Beispiel:"Move Forward" oder "Move Reverse", hier kommt Move vor Vorwärts und Rückwärts. Es muss also in der Regel vor Vorwärts und Rückwärts an erster Stelle stehen. So können wir Vorwärts und Rückwärts in eine andere Regel extrahieren. Siehe Bild unten:

Was ist Root-Regel ? Es ist der Startknoten oder Stammknoten, der geladen wird, wenn die Spracherkennung die Grammatik lädt. Es ist optional. Sie können ihn ignorieren, müssen dann aber den Stammknoten programmatisch angeben.

Was ist root-Attribut im Grammatik-Tag? Das Root-Attribut definiert die Startregel für den Spracherkenner, wenn er Grammatik lädt. Wenn es nicht als Attribut angegeben ist, müssen Sie es programmgesteuert angeben.

Dieser Artikel ist für Anfänger gedacht und daher ist es nicht möglich, komplexe SRGS-Tags und -Attribute abzudecken. Weitere Informationen zur SRGS-Grammatik finden Sie auf MSDN und W3C.

Wir haben gerade die SRGS-Grammatik für unseren Roboter erstellt. Jetzt werden wir sehen, wie Sie die Spracherkennung für die universelle Windows-App implementieren.

Spracherkennung initialisieren und Grammatik laden

Spracherkennung Klasse ist verfügbar in Windows.Media.SpeechRecognition Namensraum. Importieren Sie den Namespace in Ihre Codedatei. Vor der Initialisierung müssen wir eine XML-Grammatikdatei in unserem Projekt erstellen. Wir haben bereits im vorherigen Abschnitt Inhalt für die Grammatikdatei erstellt.

Hinweis:Wenn „CompilationResult“ fehlschlägt, liegt möglicherweise ein Problem mit der Mikrofonschnittstelle vor. Überprüfen Sie die Verbindung mit dem Mikrofon. Überprüfen Sie, ob es in der Standard-IoT Core-App erkannt wird oder nicht.

Registrieren Sie sich für Spracherkennungsereignisse und erstellen Sie einen Handler

Im letzten Schritt haben wir die Spracherkennung gestartet und sind bereit, Sprache zu hören und zu parsen. Nach erfolgreichem Parsing löst ‚ContinuousRecognitionSession‘ ein Ereignis namens ‚ResultGenerated‘ aus. Dieses Ereignis stellt ein Analyseergebnis als Ereignisargumente bereit, die verarbeitet werden können, um eine Aufgabe basierend auf gesprochener Sprache auszuführen. Wir können auch den Status des Erkenners durch das Ereignis „StateChanged“ abhören, um dem Sprecher einen Hinweis darauf zu geben, dass der Erkenner zuhört.

Hier ist ‚MyRecognizerStateChanged‘ eine Funktion, die von ‚MyRecognizer‘ ausgelöst wird, wenn sich sein Zustand von einem zum anderen ändert. Es liefert wertvolle Statusinformationen darüber, wann „MyRecognizer“ mit dem Zuhören begonnen hat und wann es aufhört zuzuhören. Nachdem es aufgehört hat, zuzuhören, analysiert „MyRecognizer“ die Sprache anhand der bereitgestellten Grammatik und löst bei Erfolg das Ereignis „ResultGenerated“ aus.

Hinweis:Sie müssen die Funktionen ‚MyRecognizer_StateChanged‘ und ‚MyRecognizer_ResultGenerated‘ nicht selbst erstellen. Stattdessen bietet Visual Studio eine Möglichkeit, sie automatisch für Sie zu erstellen. Sie können sie automatisch von Visual Studio erstellen, indem Sie  zweimal rechts neben dem +=eines Ereignisses verwenden.

Sie können Ereignishandler auch direkt nach der Initialisierung des SpeechRecognizer-Objekts registrieren.

Wir sind fast fertig!

Schritt 2

Wie fährt man mit geparster Sprache?

Im vorherigen Abschnitt haben wir benutzerdefinierte Grammatik und Spracherkennung für die universelle Windows-App konfiguriert. Wenn die Spracherkennung erfolgreich gesprochene Sprache analysiert, wird das Ereignis "ResultGenerated" ausgelöst. Dieses Ereignis enthält das geparste Ergebnis als Argument. Sehen wir uns an, wie Sie anhand der gesprochenen Sprache erkennen können, was gesprochen wird und was zu tun ist:

Hier wird das Argument 'args' von SpeechRecognizer bei erfolgreicher Sprachanalyse an den Ereignishandler übergeben. ‘args.Result.Text’ ist vom Typ String. Es enthält die gesprochene Sprache als Text. Sie können sprachspezifische Aufgaben mit bedingtem Block ausführen.

Es ist nicht möglich, den vollständigen Code zum Fahren des Roboters anzuzeigen. Ich habe eine statische Klasse namens „MotorDriver“ bereitgestellt, die verschiedene Funktionen zum Fahren von Robotern enthält. Diese Klasse verwaltet Gpio-Pins zum Antrieb des Roboters. Der vollständige Quellcode wird am Ende des Projekts bereitgestellt. Wenn Sie mit Raspberry Pi 2 und Windows 10 IoT noch nicht vertraut sind, lesen Sie diesen Link, um loszulegen.

Schritt 3

Gerätefähigkeit aktualisieren

Bevor wir die universelle Windows-App auf dem Raspberry Pi 2 bereitstellen, müssen wir die entsprechende Gerätefunktion für die Ausführung der Anwendung mit bestimmten Hardwarezugriffsrechten einstellen. Im Kontext dieser Anwendung benötigen wir das externe Gerät „Mikrofon“. So aktivieren Sie „Mikrofon“ im Paketmanifest:


Alles softwareseitig. Jetzt ist es an der Zeit, die Hardware zu verdrahten. Der Quellcode wird am Ende des Artikels bereitgestellt.

Ein Großteil der Implementierung der Spracherkennung ist abgeschlossen und es ist nicht möglich, jede einzelne Zeile des Codes hier zu erklären. Stattdessen ist der Quellcode gut kommentiert. Fragen Sie nach jeder Anfrage.

Schritt 4

App als Startanwendung bereitstellen und registrieren

Der Roboter muss beim Einschalten Sprachbefehle erkennen. Um dies zu erreichen, müssen Sie Ihre App als Start-App registrieren, damit jedes Mal, wenn Raspberry Pi 2 bootet, Ihre App direkt nach dem Booten gestartet wird. Dazu müssen Sie Ihre App zunächst auf dem Raspberry Pi 2 bereitstellen und dann als Startanwendung registrieren.

Vor der Bereitstellung ist es ratsam, den Paketfamiliennamen der Anwendung zu ändern:


Nach dem Ändern des Paketfamiliennamens stellen Sie die Anwendung auf dem Remote-Gerät (Ihrem Raspberry Pi 2) bereit.




Wenn Sie nicht wissen, wie Sie Ihre Anwendung auf dem Raspberry Pi 2 bereitstellen, lesen Sie diesen Link.

Sobald die App erfolgreich bereitgestellt wurde, müssen Sie die App als Startanwendung registrieren. Sie können Ihre App mit zwei Methoden als Start registrieren:mit PowerShell oder dem Webverwaltungsportal von Windows IoT Core. Ich gehe mit der zweiten Methode. Öffnen Sie den Webbrowser und folgen Sie:



Haben Sie Probleme bei der Registrierung als Startup-App? Siehe diesen Artikel.

Sobald Sie Ihre App erfolgreich als Start-App registriert haben, starten Sie Raspberry Pi 2 neu und prüfen Sie, ob Ihre Anwendung nach dem Booten startet oder nicht. Wenn nicht, überprüfen Sie alle Schritte von der Bereitstellung bis zur Registrierung. Nach dem erfolgreichen Start der App ist es jetzt an der Zeit, die Dinge zu verkabeln.

Schema

Hardware-Teile bestehen aus Roboter-Chassis (mit Gleichstrommotoren), Raspberry Pi 2 (mit Windows 10 IoT Core), Batterie, Distanzsensor usw. Die Stromversorgung erfolgt über die Motorbatterie (im Bild links 'Battery:9-12VDC') und geht direkt zum H-Brücken-Motortreiber. Für Raspberry Pi 2 wird ein separates Netzteil benötigt. USB PowerBank ist geeignet, um Raspberry Pi 2 mit ausreichend Strom zu versorgen. Wenn keine USB PowerBank oder gefilterte 5VDC-Versorgung vorhanden ist, ist eine separate Spannungsreglerschaltung (mit 7805) erforderlich, um Raspberry Pi und Ultraschall-Distanzsensor mit Strom zu versorgen.

Wenn Sie keine USB PowerBank oder 5VDC gefilterte Versorgung haben, können Sie die Motorbatterie (im obigen Bild auf der linken Seite gezeigt – orange Farbe, Batterie:9-12VDC) verwenden, um Raspberry Pi 2 einzuschalten. Das Schema für die Konfiguration finden Sie unter am Ende des Artikels (genannt 'Schema :Motor Battery').

Warum Widerstände mit Ultraschall-Distanzsensor?

Ultraschall-Abstandssensor arbeitet mit 5 V, während Raspberry Pi 2 mit 3,3 V arbeitet. Wir können den Echo-Pin des Sensors nicht direkt mit dem Pin des Raspberry Pi verbinden, da er einen 5-V-Ausgang hat. Es wird Raspberry Pi brennen. Daher müssen wir die Ausgangsspannung des Sensors auf 3,3 V senken, bevor wir sie an Raspberry Pi senden. Die Spannung des Sensors kann durch die Verwendung einer Spannungsteilerschaltung abgesenkt werden. Somit kann Vout wie folgt berechnet werden:

R1 =1000 OhmR2 =2000 OhmVin =5V (Echo-Pin des Sensors)Vout =5 * (2000 / (1000 + 2000)) =3,3 V (zum Raspberry Pi 2)

WARNUNG:Verbinden Sie den Echo-Pin des Ultraschall-Distanzsensors nicht direkt mit dem GPIO-Pin des Raspberry Pi. Der Raspberry Pi kann durchbrennen. Verwenden Sie stattdessen einen Logikpegelwandler oder einen geeigneten Spannungsteiler.

Endmontage




Bekannte Probleme

Spracherkennung funktioniert nicht (Build 10586)

Spracherkennung und -synthese funktionieren auf keinem IoT-Gerät (RPi2, MinnowBoard MAX und Dragonboard 410c), wenn Sie Windows IoT Build 10586 installiert haben.

Lösung: Derzeit ist keine gültige Lösung verfügbar. Ich hoffe, dass das Windows IoT-Team diesen Fehler im nächsten Build beheben wird. Wenn Sie jedoch die Spracherkennung manipulieren möchten, kehren Sie zur alten Version 10240 zurück und sie wird wie von Zauberhand funktionieren.

Mikrofonproblem

Spracherkennung erfordert definitiv ein hochwertiges Mikrofon. Sie können ein Mikrofon mit geringer Qualität immer noch verwenden, wenn es in der Nähe ist, aber wenn das Mikrofon etwa 1-2 Meter weit entfernt ist, wird es nicht genau erkannt.

Lösung: (Option 1): Kaufen Sie ein hochwertiges Mikrofon. Manchmal kann es vorkommen, dass es selbst nach einem hochwertigen Mikrofon nicht richtig erkannt wird. In einem solchen Fall ist eine laute Stimme erforderlich. (Option 2):Drahtloses Mikrofon wäre großartig. Sie können den Roboter auch aus großer Entfernung steuern, ohne sich um externe Geräusche sorgen zu müssen. Sie können eines davon kaufen oder Ihr eigenes erstellen, indem Sie dieses Video verweisen.

Verarbeitungsverzögerung des Erkenners

Es ist offensichtlich, dass die Spracherkennung einige Zeit braucht, um Sprache zu verarbeiten. Es ist kein Problem oder Problem, aber es kann Probleme im Echtzeitsystem verursachen.

Angenommen, wir haben ein Hochgeschwindigkeits-Roboter-Sammelauto, das unserem Sprachbefehl folgt. Nehmen wir an, Auto folgt unserem Sprachbefehl nach 600-2000ms (wegen Verarbeitungsverzögerung). Wenn wir also befehlen, anzuhalten, analysiert das Auto das Signal nach einiger Zeit, was zu einem katastrophalen Ereignis führen kann.

Lösung:  Im Moment (als dieser Artikel geschrieben wurde) gibt es keine geeignete Lösung. Hoffe, es wird in Zukunft gelöst.

Ausspracheunterschied

Menschen verschiedener Regionen verwenden unterschiedliche Aussprache für ein einzelnes Wort. Der Spracherkenner kann die Sprache nicht analysieren, wenn die Aussprache des gesprochenen Wortes von der programmierten abweicht.

Lösung:  Sie können Sprache und Region in der SRGS-XML-Grammatikdatei angeben, um die Aussprache für die bestimmte Region zu analysieren.

Nehmen wir an, wir wollen Englisch (UK) parsen, wir müssen das Attribut des Grammatik-Tags xml:lang="en-GB" setzen. Hier ist der ISO-Ländercode für Großbritannien GB. Daher weist „en-GB“ den Spracherkenner an, die Sprache basierend auf der englischen (UK) Aussprache zu analysieren. Ein weiteres Beispiel für kanadisches Französisch ist „fr-CA“.

Umgebungslärm

Unerwünschte Geräusche und Vibrationen, die von einer oder mehreren externen Einheiten verursacht werden, beeinträchtigen die Verarbeitungsgenauigkeit. Manchmal versteht die Spracherkennung die Sprache nicht, selbst wenn sie richtig gesprochen wurde.

Lösung: Es ist möglicherweise nicht möglich, dieses Rauschen aufzulösen oder zu eliminieren. Beim derzeitigen Stand der Technik können wir nur hoffen, diese Technik in einem lärmfreien Bereich einzusetzen. Eine andere mögliche Lösung besteht darin, ein intelligentes Mikrofon zu verwenden, das in der Lage ist, Geräusche zu reduzieren (sogenanntes Geräuschunterdrückungsmikrofon).

USB-Mikrofon / USB-Soundkarte wird nicht erkannt

Mit der Veröffentlichung von Build 10531 unterstützt Windows IoT Core allgemeine Audiogeräte. Die meisten USB-Mikrofone oder USB-Soundkarten erfordern einen generischen USB-Treiber. Wenn Ihr Gerät einen generischen Treiber verwendet, funktioniert es.

Arbeite erfolgreich mit meinem RPi2 (Amazin.in)

Lösung: Versuchen Sie es mit einem anderen USB-Mikrofon oder einer anderen USB-Soundkarte.

In meinem Fall habe ich eine USB-Soundkarte gekauft. Es hat perfekt funktioniert. Ich habe das Mikrofon an die Mic-Buchse der Soundkarte angeschlossen. Sie können die USB-Soundkarte bei Amazon.com oder anderen Online-Shopping-Websites kaufen. Indian kann eine USB-Soundkarte bei Amazon.in kaufen.

Zukünftige Verbesserungen

Neuen Ideen sind keine Grenzen gesetzt. Dieser Artikel untersucht die grundlegende Implementierung der Spracherkennung. Darüber hinaus können Sie das Projekt erweitern, indem Sie eine visuelle Anzeige des geparsten Ergebnisses bereitstellen. Schalten Sie beispielsweise die grüne LED für eine Sekunde ein, nachdem der gesprochene Befehl erfolgreich analysiert wurde, andernfalls schalten Sie die rote LED für eine Sekunde ein. Um versehentliche Befehle zu vermeiden, können Sie den Roboter außerdem so programmieren, dass er anweist, wann er zuhören und wann er schlafen soll.

Hast du es bemerkt?

Diejenigen, die das animierte Titelbild des Projekts sorgfältig gesehen haben, werden wissen, dass ich etwas nicht behandelt habe, was ich dort gezeigt habe. Beobachten Sie es sorgfältig und versuchen Sie, diese versteckte Funktion in Ihrem Roboter zu implementieren.

Viel Glück 🙂

Quelle:  Sprachgesteuerter Roboter

Herstellungsprozess

  1. Windows 10 IoT Core – Lesen von Herzfrequenzpulsen
  2. Windows IoT:Tür zur Gesichtserkennung
  3. Bewegungsgesteuerte AWS IoT-Schaltfläche
  4. Windows 10 IoT Core auf Raspberry Pi 2 – Adafruit-Sensordaten
  5. Windows 10 IoT Core und SHT15
  6. Windows 10 IoT Core für Raspberry Pi 3 Model B+
  7. Raspberry Pi Roboter über Bluetooth gesteuert
  8. Gestengesteuerter Roboter mit Raspberry Pi
  9. RASPBERRY PI WIFI-ROBOTER, KONTROLLIERT VON ANDROID SMART PHONE
  10. GoPiGo v2 mit Windows IoT