Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose20:i2textpublic:start

Projektdokumentation

Themenbeschreibung

Das Projekt hat zum Ziel ein dem Nutzer per Eingabe von Augenbewegungen eine Texteingabe zu ermöglichen. Diese Technik ist mittlerweile schon etablierte Praxis in bestimmten Bereichen, wie der Medizin, um gelähmten Menschen eine Kommunikation erlauben.

Als prominentes Beispiel dient die Software, die Intel in Zusammenarbeit mit dem Start-up-Unternehmen SwiftKey für den Rechner von Stephen Hawking entwickelt hat. https://www.youtube.com/embed/OTmPw4iy0hk

Da die entwickelte Infrarottechnik für Stephen Hawking sehr umfangreich in 3 Jahren entwickelt worden ist und wir dieses Programm für alle zugänglich machen möchten, haben wir uns für eins entschieden, dass möglichst auf jedem Rechner mit integrierter Webcam funktioniert.

Mit unserem Programm „I2Text“ ist es möglich, 2 Bedienfelder im GUI, also der Bedienoberfläche, auszuwählen. Innerhalb dieser Bedienfelder ist das Alphabet aufgeteilt. Nach einer kurzen Einstiegsphase nach Start des Programms, in der kurz überprüft wird, ob tatsächlich 2 Augen erkannt werden, startet das Schreiben im Programm. I2Text erkennt nun 3 Phasen. In der ersten sind 2 Augen geöffnet, dann passiert nichts. In der 2. Phase ist ein Auge geschlossen, wodurch das linke Feld im Gui ausgewählt wird. In der 3. Phase sind beide Augen geschlossen, wodurch das rechte Feld ausgewählt wird. Nachdem ein Feld ausgewählt wurde, halbiert sich die Anzahl der Buchstaben und wir haben wieder die 3 Auswahlmöglichkeiten. Nachdem der letzte Buchstabe ausgewählt worden ist, wird dieser in der Unteren Zeile des Guis gespeichert und es kann der nächste Buchstabe ausgewählt werden.

In den Hinweisen&Links ist die Projektdokumentation eines ähnlichen Projektes „iContact“ aus dem WiSe 18/19 zu finden, an dem wir uns zu Beginn orientiert haben. Der zweite Link beinhaltet den Code, der für unser Programm als Basis verwendet wurde, im Laufe des Projektes stark reduziert und nach unseren Bedürfnissen angepasst wurde.

Umsetzung

GUI

Zu erst haben wir ein Interface erstellt. Hierbei war es einfacher direkt den code zu schreiben und Screenshots zu machen als eine Konzeptzeichnung zu erstellen. Hier sind 2 dieser Screenshots:

Hierbei wird das Alphabet mit in zwei listen aufgeteilt, welche dann auf der rechten und respektive linken Seite der Benutzeroberfläche zu sehen ist. Wird nun eine der beiden seiten ausgewählt so wird die andere gelöscht und der Inhalt der ausgewählten seite gleichmäßig neu verteilt auf die beiden seiten.

Implementierung des Tutorials und OpenCV 3.4 Library

In Folge dessen, haben wir uns der Augenerkennung angenommen. Dazu haben wir zuerst den Code aus dem „Tutorial cascade classifier“ verwendet. Bei der Implementierung des Codes ist uns aufgefallen, dass das Programm nicht mit der OpenCV-Library funktioniert, die innerhalb von Processing zu finden ist. Aus diesem Grund sind wir erst die IntelliJ-IDE umgestiegen, da mit dieser Entwicklungsumgebung das Intergieren der OpenCV Version 3.4.10 ohne große Veränderungen in den Dateipfaden möglich ist.

Mit der Funktionierenden Library in IntelliJ konnten wir den Code optimieren. Der ursprüngliche Cascade Classifier erkennt das Gesicht und die Augen. Für diese Erkennung muss benötigt das Programm viele Ressourcen, weshalb wir uns dafür entschieden haben, die Gesichtserkennung zu löschen. Da wir für unser Programm nur das Erkennen der Anzahl der Augen nötig ist, haben wir uns auf das Erkennen von maximal 2 Kreisen fokussiert.

Augenerkennung

Das vorgegebene Tutorial lief bisher nur mit der Kamera unserer Smartphones, da die Auflösung der Laptopkamera noch keine genaue Erkennung der Augen zulässt. Um eine externe Kamera zu nutzen, mussten wir erstmal herausfinden, wie wir unsere Smartphone Kameras mit dem Rechner verbinden und ansteuern können. Dazu haben wir die APP „iVCam“ verwendet. Über den Integer „cameraDevice“ können wir mit der Zahl 0 oder 1 bestimmen, ob für das Programm die Integrierte Webcam des Laptops genutzt wird oder eine externe Kamera verwendet werden soll. Nun war es uns bei der Verwendung der Smartphone Kamera möglich, 2 Augen mit dem Programm zu erkennen. Jedoch war die Erkennung der Augen sehr ungenau. Je nach Einstellung hat das Programm mehr oder weniger als 2 Augen erkannt. Somit haben wir der Funktion „eyesCascade.detectMultiScale“ die Parameter minNeighbors, double scaleFactor hinzugefügt. Damit lässt sich die Sensibilität des Programms einstellen.

Nach entfernen weitere Zeilen im Code und Veränderungen der Parameter, war die Erkennung der Augen so genau, dass wir das Programm sogar mit der Laptop Webcam benutzen konnten.

Somit hatten wir ein Laufendes Programm im InelliJ. Da wir jedoch den Anspruch hatten, das Programm mit der Entwicklungssoftware Processing zum Laufen zu bringen. Haben wir angefangen, die OpenCV 3.4 Library in Processing zu implementieren. Nach ein paar Dateien, die wir verschoben haben, haben wir diese Library zum Laufen gebracht und wir hatten ein Funktionierendes Programm, welches über Processing läuft. Die Anleitung zur Integration der Library könnt ihr dem ReadME entnehmen.

Ergebnisse & Diskussion

Mit I2Text ist es möglich, mit der im Laptop eingebauten Webcam Worte zu schreiben. Um vollständige Sätze zu schreiben, fehlen noch Sonderzeichen. Auch Umlaute haben wir nicht eingefügt, da wir den Fokus auf Ressourcensparsamkeit und das Funktionieren auf möglichst allen Rechnern gelegt haben. Das Programm auf Linux zum Laufen zu bringen, haben wir versucht, aber in der vorgegebenen Zeit nicht hinbekommen.

Auch die nice-to-have funktion des „Text-to-speech“ haben wir nicht wir nicht implementiert, genauso wie eine Löschfunktion, die über die Eyedetection gesteuert wird, ist nicht programmiert worden, da uns dafür die Zeit gefehlt hat.

Aktuell wäre es noch spannend, Wege zu finden, bei denen das Programm nicht so stark von den Lichtverhältnissen ist, Da nicht immer ein heller Raum bei der Verwendung des Programms nicht zu gewährleisten ist.

Code

projektesose20/i2textpublic/start.txt · Zuletzt geändert: 2021/01/10 21:19 von d.golovko