Inhaltsverzeichnis:

Ein sprachgesteuertes Muster-Semaphor in Blindenschrift - Gunook
Ein sprachgesteuertes Muster-Semaphor in Blindenschrift - Gunook

Video: Ein sprachgesteuertes Muster-Semaphor in Blindenschrift - Gunook

Video: Ein sprachgesteuertes Muster-Semaphor in Blindenschrift - Gunook
Video: Котенка просто оставили на обочине. Котенок по имени Роки 2024, November
Anonim
Ein sprachgesteuertes Muster-Semaphor in Blindenschrift
Ein sprachgesteuertes Muster-Semaphor in Blindenschrift
Ein sprachgesteuertes Muster-Semaphor in Blindenschrift
Ein sprachgesteuertes Muster-Semaphor in Blindenschrift
Ein sprachgesteuertes Muster-Semaphor in Blindenschrift
Ein sprachgesteuertes Muster-Semaphor in Blindenschrift
Ein sprachgesteuertes Muster-Semaphor in Blindenschrift
Ein sprachgesteuertes Muster-Semaphor in Blindenschrift

„Lord Vetinari stand an seinem Fenster und beobachtete den Semaphorturm auf der anderen Seite des Flusses. Alle acht großen Fensterläden, die ihm gegenüberstanden, blinkten wütend – schwarz, weiß, schwarz, weiß, schwarz, weiß … Informationen flogen in die Luft. Zwanzig Meilen hinter ihm, auf einem anderen Turm auf Sto Lat, schaute jemand durch ein Teleskop und rief Zahlen. Wie schnell kommt die Zukunft über uns, dachte er. T. Pratchett, Der fünfte Elefant

Nach dem Bau einer sprachgesteuerten Jumping Jack auf Basis des AIY Voice Kits hatte ich die Idee, einen sprachgesteuerten Semaphor zu bauen, der den neuesten Stand der IT-Technologie mit den Anfängen der Telekommunikation und Datenübertragung vereint.

Zunächst hatte ich die Idee, das französische Semaphorensystem von Chappe nachzubilden, welches das erste bekannte System für landesweite Telekommunikation mit einem Semaphorensystem war. Es stellte sich jedoch als etwas zu kompliziert heraus, um es mit Standard-Servos innerhalb eines Tages zu realisieren. Mein nächstes Ziel war etwas Ähnliches wie das von Terry Pratchett beschriebene Klack-System, z. B. in "Going Postal", als 2x4-Shutter-Semaphor-System (nicht wie die im Film gezeigte 4x4-Matrix). Leider konnte ich nicht allzu viele technische Details zu diesem System finden. So landete ich bei dem von Lord Murray entwickelten 2x3-Matrix-Semaphor-System, das eine Zeit lang von der britischen Marine verwendet wurde. Darüber hinaus passt ein Sechs-Shutter/Bit-System gut zu den sechs Servoanschlüssen, die auf dem AIY voice HAT verfügbar sind. Da ich aber zwischen den Jahren keine sechs Servos zur Hand hatte, entschloss ich mich schließlich, zuerst einen Simulator aus LEDs zu bauen.

Bezüglich des angezeigten Codes konnte man das Murray-System verwenden, aber auch hier waren die Informationen, die ich darauf hatte, ziemlich begrenzt, so dass keine Zahlen und Symbole angezeigt werden konnten. So kam ich zu dem Punkt, stattdessen das Braille-System zu verwenden, das auch eine 2x3-Matrix verwendet, um Buchstaben, Zahlen und andere Zeichen anzuzeigen. Das Braille-System ist der internationale Standard, um für Blinde lesbare Texte zu drucken. Es ist auch eine Auszeichnungssprache, die einen Zahlenindikator verwendet, um zu definieren, dass Zahlen als nächstes angezeigt werden, und Indikatoren, um zu definieren, dass einer oder mehrere der folgenden Buchstaben in Großbuchstaben geschrieben werden. Ich beschloss daher, ein leicht vereinfachtes System mit Zahlen und einigen Zeichen, die durch die Nemeth-Erweiterung des Braille-Systems definiert sind, einzurichten und zumindest für den Anfang nur Großbuchstaben zu verwenden. Dies ermöglicht es, in meiner speziellen Anwendung einzigartige Muster für jeden Buchstaben, jede Zahl oder jedes Zeichen anzuzeigen und die für echte Braille erforderliche Textanalyse wegzulassen.

Das letzte Gerät erlaubt es, ein Wort oder einen Satz in das AIY-Spracherkennungssystem einzusprechen, dann werden die Sprachmusterdaten über WLAN und Internet an einen Google-Server in den USA gesendet, dort entschlüsselt und, zumindest in meinem Fall, interpretiert Daten werden nach Europa zurückgeschickt, wo ich schließlich den erkannten Satz als Textstring angezeigt bekomme. Dieser Textstring wird dann vom Python-Skript in die einzelnen Buchstaben zerlegt, und nun werden durch Vergleich mit einem Wörterbuch, das die entsprechenden Muster definiert, die Musterinformationen abgerufen und die Muster auf einer 2x3 LED-Matrix angezeigt. Bitte schauen Sie sich das dazugehörige Video an.

Ich habe die Anzeigerate auf ein Zeichen pro Sekunde eingestellt, was lang genug sein sollte, damit eine geschulte Person das Muster erkennen und übersetzen kann. Ein möglicher nächster Schritt wäre, ein Mustererkennungsgerät wie den AIY vision HAT (in Europa bisher nicht erhältlich) zu verwenden, um die Muster automatisch zu lesen und zu interpretieren, so dass sich der Kreis schließt.

Weitere Konzepte für Verbesserungen, einige mit mehr realer Relevanz, werden im Abschnitt "Ausblick" dieser Anleitung besprochen.

Schritt 1: Verwendete Materialien

Verwendete Materialien
Verwendete Materialien
Verwendete Materialien
Verwendete Materialien

Raspberry Pi 3

AIY Stimme HAT

Acht weiße LEDs, 5 mm Durchmesser. Diese laufen mit 3V, daher wird ein Widerstand benötigt.

100kOhm Widerstand. Vielleicht nicht die perfekte Lösung, war aber zur Hand.

Überbrückungskabel

Ein kurzes Stück Draht

Steckbrett, optional zum Testen des Setups.

Eine Plastikbox für Visitenkarten.

Zwei Stück 4 mm Kunststoffschaum, teilweise Müll übrig.

Irgendein Stück Plastikmembran, als Diffusor, wie oben.

Lötkolben und Lot, ein Messer.

Schritt 2: Einrichtung und Verwendung

Einrichtung und Verwendung
Einrichtung und Verwendung
Einrichtung und Verwendung
Einrichtung und Verwendung
Einrichtung und Verwendung
Einrichtung und Verwendung

Richten Sie Raspberry Pi und AIY HAT wie im AIY voice HAT Handbuch angegeben ein. Ich würde empfehlen, vor dem Zusammenbau von Pi und HAT zumindest an den Servoanschlüssen Header anzulöten, da Sie so problemlos Servos, ein Steckbrett oder LEDs anschließen können.

Die Displaybox wurde aus dem Deckel einer Plastikbox für Visitenkarten, zwei in die Box passenden Schaumstoffstücken und einem ähnlich großen Stück einer Verpackungsfolie als Diffusor gebaut. In eines der Schaumstoffteile wurden sechs Löcher gesteckt und die LEDs hineingesteckt. Die kürzeren Füße (Masseseite) der LEDs wurden durch ein Stück Kabel miteinander verbunden, dann wurde ein Widerstand hinzugefügt und ein Überbrückungskabel an letzteres angelötet. An die anderen Füße (Plusseite) der LEDs wurden Jumperkabel angelötet.

Diese wurden dann über Verlängerungskabel mit den Servoports des AIY voice HAT verbunden, die positive Seite mit den (äußeren) "P in"-Pins, der negative Stecker mit einem der (inneren) Masse-/Minus-Pins. Bitte beachten Sie das beigefügte Schema.

Ich würde dringend empfehlen, das Setup vor dem Löten auf einem Steckbrett zu testen.

Nun wurden die Membran, die LED-Platte und die Versiegelungsschicht in die Kunststoffbox gelegt.

Legen Sie das Skript Braille_LED_1.py im Ordner src ab. Gegebenenfalls müssen Sie das Skript zuerst ausführbar machen.

Nun wird über das Dev-Terminal (!) das Programm Braille_LED_1.py gestartet. Geben Sie 'src/Braille_LED_1.py' ein und drücken Sie 'Enter'.

Sie werden nun aufgefordert, den Knopf der AIY-Box zu drücken und Ihr Wort oder Ihren Satz zu sagen. Mit einiger Verzögerung wiederholt das System das Gelernte und zeigt es auf dem Bildschirm sowie Buchstabe für Buchstabe auf dem sechs LED-Display an.

Geben Sie statt eines Satzes das Schlüsselwort "Goodbye" ein, sagt das System "Goodbye" und das Programm wird geschlossen.

Schritt 3: Der Code

Der Code
Der Code

Unten finden Sie den Code, mit dem Sie mit dem AIY-Sprachgerät sprechen und den erkannten Satz Buchstabe für Buchstabe auf einer kleinen 2x3-LED-Semaphor- oder Braille-Matrix anzeigen lassen können.

Der Code ist eine Ableitung des Skripts, das ich für ein früheres Projekt mit dem AIY voice HAT verwendet habe, und ist ein Derivat des servo_demo.py-Beispiels, das im AIY voice HAT-Handbuch beschrieben ist.

Sie finden auch ein Wörterbuch mit dem Teil des Murray-Codes, den ich im Internet gefunden hatte, als Textdatei. Es enthält weder Zahlen noch einige Buchstaben, was hier ein Problem darstellen würde.

Eine Einschränkung des Programms in seinem aktuellen Zustand besteht darin, dass es das Programm zum Absturz bringen würde, wenn ein Zeichen nicht im Wörterbuch enthalten ist. Außerdem ist es keine Darstellung des kompletten Braille-Codes als Auszeichnungssprache. Wie Sie im Skript unten sehen können, ist der Nemeth-Code für Zahlen mit einigen Zeichen in Standardbraille überflüssig, aber das sollte für unsere spezielle Anwendung kein Problem darstellen.

#!/usr/bin/env python3

# Dieses Skript ist eine Adaption des servo_demo.py-Skripts für den AIY voice HAT, # optimiert für die AIY-basierte Baille-Symbolanzeige import aiy.audio import aiy.cloudspeech import aiy.voicehat from gpiozero import LED #from gpiozero import Button from time import sleep # Wörterbuch: ein künstlich modifiziertes Braille-Alphabet, # Zahlen und einige Symbole aus der Nemeth-Erweiterung von Braille Braille_6A = { " ": "123456", # Leerzeichen "A": "1", "B": "12 ", "C": "14", "D": "145", "E": "15", "F": "124", "G": "1245", "H": "125", „I“: „24“, „J“: „245“, „K“: „13“, „L“: „123“, „M“: „134“, „N“: „1345“, „O ": "135", "P": "1234", "Q": "12345", "R": "1235", "S": "234", "T": "2345", "U": „136“, „V“: „1236“, „X“: „1346“, „Y“: „13456“, „Z“: „1356“, „W“: „2456“, „#“: „3456 ", # Number Prefix, dh die nächsten Zeichen sind Zahlen ", ": "2", ".": "256", # Punkt, Satzende (GB) "?": "236", "!": "235", "'": "3", "-": "24", ";": "23", "Cap": "6", # Der nächste Buchstabe ist in Großbuchstaben; Nummer-Stop ? "": "", # Nemeth-Braille-Code ist eine mathematische Erweiterung für 6-Punkt-Braille # siehe: https://en.wikipedia.org/wiki/Nemeth_Braille "1": "2", # Nemeth-Code '1', Braille 'Komma' "2": "23", "3": "25", "4": "256", "5": "26", "6": "235", # Nemeth '6', Blindenschrift '!' "7": "2356", "8": "236", # Nemeth '8', Braille '?' "9": "35", "0": "356", "+": "346", "-": "36", "/": "34", "(": "12356", ") ": "23456", "*": "1346" # '*' ist ein Symbol mit zwei Mustern in Nemeth, hier ersetzt durch ein 'x', um Abstürze zu vermeiden } """ der Einfachheit halber die Standard-Braille-Zahlenmuster angegeben unten wurden durch die entsprechenden Nemeth-Codes "1": "1", "2": "12", "3": "14", "4": "145", "5": "15", " 6": "124", "8": "1245", "9": "24", "0": "245", """ #Text = "rbhTZkl 9t64+34#!" # Beispieltext, für Debugging-Zwecke def main():cognizer = aiy.cloudspeech.get_recognizer()cognizer.expect_phrase('goodbye') # Schlüsselwort, beendet das Programm button = aiy.voicehat.get_button() # AIY Button status led = aiy.voicehat.get_led() # AIY Button-LED Status aiy.audio.get_recorder().start() led_1 = LED(26) # 1. Anschluss, servo0, GPIO 26 # obere linke LED_2 = LED(6) # 2. Anschluss, servo1, GPIO 06 # mittlere linke LED_3 = LED(13) # 3. Anschluss, Servo2, GPIO 13 # untere linke LED_4 = LED(5) # 4. Anschluss, Servo3, GPIO 05 # obere rechte LED_5 = LED(12) # 5. Anschluss, servo4, GPIO 12 # mitte rechts led_6 = LED(24) # 4. Anschluss, servo3, GPIO 13 # unten rechts #distanz= Taste(5) # Distanzsensor an servo3/GPIO 05 angeschlossen, hier nicht verwendet aiy.audio.say ("Hallo!",) aiy.audio.say("Zum Starten bitte den Knopf drücken",) aiy.audio.say("Wenn du mich verabschiedest, beende ich das Programm",) while True: # startet loop led.set_state(aiy.voicehat. LED. BLINK) print("Um die Spracherkennung zu aktivieren n, drücke die blaue Taste und sprich dann") print() button.wait_for_press() print('Höre…') aiy.audio.say("Ich höre",) led.set_state(aiy.voicehat. LED. BLINK_3) text =cognizer.recognize() # Textstring des erkannten Satzes led.set_state(aiy.voicehat. LED. OFF) if text is None: aiy.audio.say('Entschuldigung, ich habe dich nicht gehört.',) elif 'Auf Wiedersehen' im Text: aiy.audio.say("Auf Wiedersehen",) aiy.audio.say('Arrivederci',) aiy.audio.say('Auf Wiedersehen',) sleep (3) print('bye! ') break # stoppt die Schleife und beendet das Programm else: print('Du hast "', text, '"') # Lässt dich die Systeminterpretation überprüfen, einschließlich der Großschreibung aiy.audio.say('Ich schätze, du hast gesagt',) aiy.audio.say(text,) # akustische Überprüfung Text_up = text.upper() # überträgt alles in Großbuchstaben print (Text_up) Text_Len = len(Text_up) print (Text_Len) für i im Bereich (Text_Len): Lett = Text_up # wählt einen einzelnen Buchstaben, beginnend mit dem ersten, dh [0] print ("Letter=", Lett) Lett_B = Braille_6A[Lett] # wählt den entsprechenden Code aus dem Wörterbuch. Ein fehlendes Zeichen bricht den Code! print (Lett_B) if ("1" in Lett_B): print ("LED 1") led_1.on() # aktiviert LED an servo0" if "2" in Lett_B: print ("LED 2") led_2.on() if "3" in Lett_B: print ("LED 3") led_3.on() if "4" in Lett_B: print ("LED 4") led_4.on() if "5" in Lett_B: print ("LED 5 ") led_5.on() wenn "6" in Lett_B: print ("LED 6") led_6.on() sleep (1) # Anzeigemuster für einen zweiten print() led_1.off() # alle LEDs auf Servos deaktivieren0 -5n led_2.off() led_3.off() led_4.off() led_5.off() led_6.off() sleep(0.3) # eine kurze dunkle Pause, um das Ende des Briefes anzuzeigen wenn _name_ == '_main_ ': hauptsächlich()

Schritt 4: Ausblick und Anmerkungen

Was könnte also als nächstes kommen?

Neben diesem IT-Meta-Witz mit dem AIY-Video-Kit oder einem anderen in der Einleitung erwähnten automatisierten Bilderkennungssystem gibt es möglicherweise andere Optionen, um das in dieser Anleitung beschriebene Konzept zu erweitern. Einige von ihnen könnten sogar von realem Nutzen sein. Diese könnten sein:

- verbesserte Programmierung, so dass der Text mit allen Markierungen und Komprimierungen in Standard-Braille-Code übertragen wird. Das sollte für einen erfahrenen Python-Programmierer kein großer Aufwand sein. Was ich nicht bin, daher wäre jede Hilfe willkommen.

- Erweitern Sie das System zu einer 2x4-Matrix. Sollte auch möglich sein und würde helfen, die entsprechenden 8-Punkt-Braille-Codes zu verwenden, wie sie von elektronischen Braillezeilen verwendet werden. Darüber hinaus wäre es etwas näher am Dearheart-Klack-System.

- Konstruieren Sie eine echte 2x3 oder 2x4 Braillezeile. Sollte mit einem Array von Servos oder einem Array von 5V-Mini-Magnetspulen möglich sein. Die größte Herausforderung besteht darin, dass der Standardabstand zwischen taktilen Punkten bei elektronischen Anzeigen 2,45 mm oder 1/10 Zoll beträgt, sodass möglicherweise einige Zahnräder und Mechanik erforderlich sind. Die andere Herausforderung könnte darin bestehen, die Schublänge genau zu regulieren.

Eine so einfache und kostengünstige Lösung könnte für ein breiteres Publikum interessant sein, da kommerzielle Braillezeilen recht teuer sind. Es könnte für Braille-Lernende von Vorteil sein, ein solches sprachgesteuertes System zu verwenden. So können sie verbal einen (englischen) Satz ihrer Wahl eingeben und bekommen den Text, die Buchstaben und die Zeichen auf ihrer Fingerspitze(n) angezeigt.

- Konstruieren Sie ein mechanisches Verschlusssystem, das dem Murray- oder dem Dearheart-System ähnelt. Mit Servos sollte das nicht zu kompliziert sein und könnte in einem anderen anweisbaren beschrieben werden. Oder könnte ein schönes Schulprojekt sein. Jemand interessiert?

–――――

Einige Anmerkungen und interessante Links:

- Es gibt eine anweisbare Beschreibung einer "DIY-Semaphor-Laterne", einer 2x4-LED-Matrix, basierend auf einer Propeller-Demoplatine. Das Layout gefällt mir, aber die Programmierung erscheint mir etwas kompliziert. Bitte schauen Sie selbst.

- Ich habe jetzt ein Python-Programm zum Generieren von vollständig kontrahierter (Grade 2) Braille-Schrift gefunden. Leider ist es auf Python 2 und die amerikanisch-englische Version von 2002 beschränkt:

- Ein vollständigeres Programm scheint liblouis zu sein, https://github.com/liblouis/liblouis, aber ich habe keine Ahnung, wie ich dies in diese Lösung integrieren kann.

- eine interessante Python-Lösung scheint aus Griechenland zu kommen, https://github.com/ant0nisk/pybrl kann mehrere Sprachen integrieren und Grad 2 Braille generieren.

- Ich bin weder Programmierer noch Elektroniker, noch hatte ich vor ein paar Tagen viel Braille-Kenntnisse.

Wenn Sie also Fehler oder Auslassungen sehen oder Ideen für das Projekt haben, lassen Sie es mich bitte wissen.

- Wenn Sie dieses instructable mögen, stimmen Sie bitte dafür!

Empfohlen: