Die Geschichte der Entstehung des Gebärdensprachdolmetschers

Hintergrund


Zu Beginn dieses Schuljahres (17-18) sagte uns die Verwaltung unseres geliebten Lyzeums: „Am Ende des Jahres muss jeder von Ihnen ein individuelles Projekt schützen. Diejenigen, die das Projekt nicht schützen, haben einen Akademiker. Schulden und Gosy (GIA-9) werden sie nicht erlaubt. " Es stellt sich so etwas wie eine These heraus (in der 9. Klasse einfach super). Von ungefähr September bis Dezember entschieden mein Freund Kirill ( kkirra ) und ich, was für ein Projekt wir machen würden: Ich wollte etwas, das nicht sehr schwer auszuführen ist, aber gleichzeitig etwas Spektakuläres und Originelles. Am Ende entschieden wir uns: Wir beschlossen, ein Modell einer menschlichen Hand zu erstellen, und sogar so, dass ein Android-Gerät ausgeführt wurde (in diesem Jahr betraten Cyril und ich versehentlich die Samsung IT-Schule basierend auf unserem Lyzeum, also wollten wir das erworbene Wissen in das Projekt einfließen lassen). Sie übersetzte den eingegebenen Text in Gebärdensprache.

Software-Teil


Android App


Ungefähr einen Monat vor Ablauf der Frist haben wir mit der Arbeit an dem Projekt begonnen. Die erste Phase der Arbeit war die Entwicklung einer Android-Anwendung.

Um ehrlich zu sein, war und ist das Layout der Anwendung für mich am schwierigsten: Ich habe Probleme mit diesen Layouts und ihren Typen (ich bin immer noch ein Neuntklässler und sogar aus Physik und Mathematik). Es ist auch ziemlich schwierig, die Anwendung auf allen Geräten gleich schön aussehen zu lassen.

Eine weitere schwierige Aufgabe neben dem Markup war das Verschrauben von Bluetooth mit der Anwendung (wir haben beschlossen, die Verbindung zwischen dem Android-Gerät und dem Modell über Bluetooth zu implementieren): Dies wurde uns in Samsung-Schulkursen nicht beigebracht, aber im Internet gibt es nicht viele Informationen dazu ( Ich meine Informationen über die Implementierung der Verbindung zwischen dem Android-Gerät und dem Arduino, die vom Modell gesteuert wurde.

Nun ein wenig zum Code selbst (Link zu GitHub ganz am Ende des Artikels). Das Programm besteht aus vier Aktivitäten: dem Startbildschirm und einer Aktivität für jeden Steuermodus.

  • Der erste Steuermodus ist der Texteingabemodus, in dem der Benutzer Text manuell eingibt
  • Die zweite - mit Hilfe der Stimme erkennt die Anwendung die Sprache des Benutzers.
  • Der dritte ist der manuelle Modus. Der Benutzer kann die Position der Finger manuell ändern, um Gesten darzustellen, die nicht vom Programm bereitgestellt werden.

Um ehrlich zu sein, schäme ich mich sehr für meinen Code: Er sieht unvollendet aus. Tatsache ist, dass ich die Bluetooth-Verbindung in einer separaten Klasse kapseln, die Verbindungsmethode erstellen, Daten senden, die Verbindung trennen usw. konnte. Stattdessen habe ich bei jeder Aktivität alle oben genannten Punkte erneut registriert, da die Kapselung zu einigen führte (nicht sehr große) Probleme. Um sie zu lösen, war es jedoch notwendig, einige Zeit damit zu verbringen, die Arbeit von Bluetooth zu studieren, und ich hatte es eilig, den Code zu schreiben, damit Zeit für die Entwicklung und Implementierung der Hardware blieb.

Arduino-Programmierung


Bei der Implementierung des Softwareteils musste der Arduino-Mikrocontroller programmiert werden, der Daten von einem Smartphone empfing und den Manipulator steuerte. Es wurde eine Bibliothek geschrieben, die Daten zum Verbinden von Servos mit Arduino (mit denen Kontakte zum Verbinden von Servos verbunden sind) und Methoden zum Übersetzen von Text in die Gebärdensprache enthielt. Der Hauptteil der Bibliothek ist eine Matrix, die Informationen über die Position jedes Fingers, die entsprechenden Buchstaben des russischen Alphabets und verschiedene Methoden zur Vereinfachung des Codes enthält. Die Matrix ist unten angegeben.

const int navigate [Hand::n][Hand::m]= { {224, 180, 180, 180, 180, 180},// {225, 90, 0, 180, 180, 180},// {226, 0, 0, 0, 0, 0},// {227, 0, 90, 180, 180, 180},// {228, 180, 0, 0,180, 180},// {229, 90, 180, 180, 90, 90},// {230, 90, 180, 180, 90, 90},// {231, 180, 0, 180, 180, 180},// {232, 180, 180, 180, 0, 0},// {233, 180, 180, 180, 0, 0},// {234, 180, 0, 0,180, 180},// {235, 180, 90, 90, 180, 180},// {236, 180, 90, 90, 90, 180},// {237, 180, 0, 0, 180, 0},// {238, 90, 180, 0, 0, 0},// {239, 180, 90, 90, 180, 180},// {240, 180, 0, 180, 0, 0},// {241, 90, 90, 90, 90, 90},// {242, 180, 90, 90, 90, 180},// {243, 0, 180, 180, 180, 0},// {244, 0, 90, 90, 90, 90},// {245, 0, 0, 180, 180, 180},// {246, 180, 0, 0, 180, 180},// {247, 0, 90, 180, 180, 180},// {248, 180, 0, 0, 0, 180},// {249, 180, 0, 0, 0, 180},// {250, 0, 0, 180, 180, 180},// {251, 0, 90, 180, 180, 90},// {252, 0, 0, 180, 180, 180},// {253, 90, 90, 180, 180, 180},// {254, 0, 90, 90, 90, 0},// {255, 90, 90, 90, 180, 180}};// 

"Hand" ist eine Bibliotheksheaderdatei (mit der Erweiterung ".h"), die Prototypen von Funktionen und Konstanten enthält.

Nun ein paar Worte zu Übersetzungsmethoden. Das Zeichenübersetzungsverfahren empfängt die Buchstabencodierung als Eingabe, sucht nach der gewünschten Zeile (das erste Element jeder Zeile der Matrix ist der Symbolcode) und stellt die Servos entsprechend den in der Zeile angegebenen Rotationsgraden ein (Symbolcodes werden in die Tabelle eingefügt, damit die Codierung bei Bedarf geändert werden kann Tabelle, ohne den gesamten Code zu ändern), dann wartet es einige Sekunden, damit die Gesten gelesen werden können und sie nicht nacheinander folgen. Die Satzübersetzungsmethode teilt den Satz in Zeichen auf und verwendet die Zeichenübersetzungsmethode.

Die Methode der Übersetzung der Zeichen:

 void Hand :: SymbolTranslate(unsigned char a){ //    int str=-1; int i; for(i=0; i<n; i++){ if(navigate[i][0]==(int)(a)){ str=i; break; } } if(str==-1){ return; } else{ First.write(navigate[str][1]); //     Second.write(navigate[str][2]); Third.write(navigate[str][3]); Fourth.write(navigate[str][4]); Fifth.write(navigate[str][5]); delay(200); Serial.println(str); Serial.println("Succsessfull"); } } 

Übersetzungsmethode für Vorschläge:

 void Hand :: SentenceTranslate(char* s){ //    unsigned char a; for(int i=0; i< strlen(s); i++){ a=s[i]; SymbolTranslate(a); delay(2000); } } 

Die Methoden protokollieren auch Nachrichten mit dem akzeptierten Text und dem Ergebnis der Übersetzung („Succsessfull“ wird gedruckt), was uns beim Debuggen eines inaktiven Arduino-Codes sehr geholfen hat.

Hardware


Die Umsetzung dieser Projektphase wurde von der oben genannten kkirra durchgeführt . Vor Beginn der Arbeiten schien es eine sehr einfache Aufgabe zu sein, Zeichnungen des Manipulators zu entwickeln und zusammenzubauen, aber dies ist überhaupt nicht der Fall.

Ursprünglich wollten wir die Details des Manipulators auf einem 3D-Drucker drucken. Wir haben die Blaupausen von einer offenen französischen Projektbank übernommen (wir haben auch unsere eigenen gezeichnet, aber später entschieden, dass es besser ist, sie von Open Source zu übernehmen), aber nachdem wir die Blaupausen zum Drucken gesendet haben, haben wir das zum Drucken gelernt Unsere Teile werden mehrere Wochen dauern, die wir zu diesem Zeitpunkt noch nicht hatten. Dann beschlossen wir, einen Manipulator aus improvisierten Materialien zusammenzubauen: einen Unterarm aus Metallplatten, Finger aus Sperrholz. Finger aufgrund von Servos unter der Kontrolle des Arduino-Mikrocontrollers gebeugt. Eine Beispielzeichnung ist unten dargestellt.

Bild

  • Rote Farbe - die Rotationsachse der Finger, wenn Sie die Finger von Menschen betrachten - das sind Gelenke
  • Grün - kleine Gummibänder, die die Finger in ihre ursprüngliche Position zurückbringen (d. H. Sehne)

Fazit


Zusammenfassend. Wir haben einen Gebärdensprachdolmetscher zusammengestellt und programmiert (wir nennen ihn kurz "Stumpf" für sein Aussehen). Unser Projekt ermöglicht es Menschen, die die Gebärdensprache nicht kennen, mit hörgeschädigten Menschen über das russische Gebärdenalphabet zu kommunizieren. Durch die Implementierung der Software können Sie den Code schnell ändern und, ohne etwas zu beschädigen, weitere Gebärdensprachen hinzufügen (z. B. Englisch).
In Zukunft planen wir, das zuvor ausgewählte Modell auf einem 3D-Drucker zu drucken und zusammenzubauen (wir werden dies tun, wenn wir eine Pause von Prüfungen und anderem Unsinn machen).

Im Allgemeinen stellte sich heraus, dass es ziemlich gut war, wenn auch nicht sehr schön in Bezug auf Firmware und Aussehen, aber die Hauptsache ist ein funktionierender Entwurf. Wir haben bei der Arbeit an diesem Projekt viel gelernt (zum Beispiel die Tatsache, dass wir zu Beginn des Jahres und nicht ein paar Wochen vor der Lieferung mit der Arbeit an einem Projekt beginnen müssen, das für das ganze Jahr konzipiert ist), und dafür sind wir den Lehrern, die uns geholfen haben, und insbesondere Damir, sehr dankbar Muratovich, unser wissenschaftlicher Wissenschaftler, der uns bei der Lösung der meisten mit dem Projekt verbundenen Probleme half.

Vielen Dank für das Lesen bis zum Ende!

Wenn es für Sie interessant wurde, sind alle Projektmaterialien (einschließlich des Textes der Arbeit, Präsentationen usw.) hier öffentlich zugänglich.

Nochmals vielen Dank für Ihre Aufmerksamkeit!

Source: https://habr.com/ru/post/de415681/


All Articles