Grobbestimmung der Blickrichtung für eine Augenmaus als
Transcription
Grobbestimmung der Blickrichtung für eine Augenmaus als
Grobbestimmung der Blickrichtung für eine Augenmaus als Benutzerinterface Schriftliche Prüfungsarbeit für die Bachelor-Prüfung des Studiengangs Angewandte Informatik an der Ruhr-Universität Bochum vorgelegt von Martin Schnurrenberger 1. Prüfer Dr. Rolf P. Würtz 2. Prüfer Dr. Christian Igel 17. Juli 2008 Zusammenfassung Dieses Handbuch beschreibt ein im Rahmen dieser Bachelor-Arbeit entstandenes Open-Source Projekt, welches aus zwei Kameras und bildverarbeitender Software besteht und zum Ziel hat, einem PC Benutzter die MauszeigerSteuerung allein durch den Blick zu ermöglichen. Die ausführlich beschriebene, kompakte C++ Header-Datei ermöglicht in Verbindung mit OpenCV eine einfache Wiederverwendung aller oder einzelner Funktionen in ähnlichen Anwendungen. 2 Inhaltsverzeichnis 1 Vorwort 7 2 Einführung 9 3 Installation 11 3.1 3.2 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Marke Eigenbau . . . . . . . . . . . . . . . . . . . . . 11 3.1.2 Fix-und-fertig . . . . . . . . . . . . . . . . . . . . . . 15 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.2 Konguration . . . . . . . . . . . . . . . . . . . . . . . 15 4 Tutorials 4.1 4.2 17 Stereo-Kamera-Kalibrierung . . . . . . . . . . . . . . . . . . . CCTools 5.2 17 4.1.1 Schritt-für-Schritt-Anleitung für . . . . . . . . 18 4.1.2 Schritt-für-Schritt-Anleitung für Lösung mit OpenCV . 24 Augenmaus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.2.1 Augenmaus ausschalten . . . . . . . . . . . . . . . . . 26 4.2.2 Augenmaus einschalten . . . . . . . . . . . . . . . . . . 26 5 Benutzeroberäche 5.1 11 29 Das Taskbar-Icon . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.1.1 Menü am Taskbar-Icon . . . . . . . . . . . . . . . . . . 30 5.1.2 Mitteilungen des Taskbar-Icons . . . . . . . . . . . . . 30 Das Hauptfenster . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.2.1 Favoriten . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.2.2 Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.2.3 Status . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.2.4 Benutzer . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.2.5 Bildschirme . . . . . . . . . . . . . . . . . . . . . . . . 32 5.2.6 Kameras . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3 INHALTSVERZEICHNIS 5.2.7 4 Die Benutzeroberächen-Hilfe . . . . . . . . . . . . . . 6 Das Modell 35 6.1 Die einfache Theorie 6.2 Die nicht so einfache Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Maus-System Produkt-Struktur 7.1 Stereo-Kamera-Kalibrierung 7.1.1 7.2 7.3 7.4 32 35 36 39 . . . . . . . . . . . . . . . . . . . 39 Kalibrierung mit Hilfe von OpenCV . . . . . . . . . . . 39 Augen-Maus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 7.2.1 Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . 40 7.2.2 Gesichtsmodell erstellen 48 7.2.3 Berechnung der Blickgeraden 7.2.4 Blickpunktberechnung 7.2.5 Mauszeiger-Positionierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 . . . . . . . . . . . . . . . . . . 52 . . . . . . . . . . . . . . . . 52 Bildschirm-Lokalisierung . . . . . . . . . . . . . . . . . . . . . 53 7.3.1 Lokalisierungsvorrichtung Basteln . . . . . . . . . . . . 53 7.3.2 Stereo-Bilder der Konstruktion erstellen 7.3.3 Berechnen der Bildschirmdaten . . . . . . . . 54 . . . . . . . . . . . . . 55 Benutzer-Registrierung . . . . . . . . . . . . . . . . . . . . . . 56 7.4.1 Einfache Benutzer-Registrierung . . . . . . . . . . . . . 57 7.5 Visualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.6 Konguration der Software . . . . . . . . . . . . . . . . . . . . 57 7.7 Hilfe-System . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 7.8 Software-Update 58 . . . . . . . . . . . . . . . . . . . . . . . . . 8 Referenzteil 61 9 Untersuchungen zur Eektivität ausgewählter Funktionen 63 setPupilCenterPoint_LLM() . 9.1 Eektivität von 9.2 Eektivität der Augenmaus . . . . . . . . . 63 . . . . . . . . . . . . . . . . . . . 65 10 FAQ 10.1 Allgemeine Fragen 67 . . . . . . . . . . . . . . . . . . . . . . . . 11 Internetquellen 11.1 Augenmaus-System . . . . . . . . . . . . . . . . . . . . . . . . 67 69 69 11.2 Kamera-Kalibrierung . . . . . . . . . . . . . . . . . . . . . . . 69 11.3 OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 11.4 Nützliches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 12 Schlusswort 71 5 INHALTSVERZEICHNIS 13 Glossar 73 14 Erklärung zur Bachelor-Prüfung 75 INHALTSVERZEICHNIS 6 Kapitel 1 Vorwort Stellen Sie sich eine Welt vor, in der es keine Computer-Maus mehr gibt. Stellen Sie sich vor, dass sie überüssig geworden ist, weil ein System entwickelt wurde, welches Ihnen die Steuerung des Mauszeigers viel einfacher, viel intuitiver, viel schneller und viel schonender für die Gelenke und Sehnen macht. Stellen Sie sich vor, der Mauszeiger steht immer an der Position, die Sie gerade auf dem Bildschirm anschauen. Sie schauen in das Menü, drücken dabei eine bestimmte Taste auf der Tastatur und schon erscheint das Menü. Sie blicken auf die Option des Menüs, die Sie interessiert, drücken erneut eine Taste und schon ist dieser Menüpunkt ausgewählt. Das geht schnell! Man muss die Hand nicht mehr zur Maus führen, muss den Mauszeiger nicht mehr suchen und auch nicht mehr diese Bewegungen ausführen, die zu einem Mausarm führen können. Zudem wird der Mauszeiger an sich überüssig, da er immer dort steht, wo man gerade hinschaut. Diese Idee fasziniert mich jedes Mal auf das Neue, und somit bin ich dem Institut für Neuroinformatik an der Ruhr-Universität Bochum dankbar, dass ich meine Bachelor-Arbeit zu diesem Thema erstellen durfte. Ich danke Herrn Dr. Rolf P. Würtz für die persönliche Unterstützung und Betreuung meiner Arbeit. Auch den Mitarbeitern des Instituts möchte ich für ihre entgegengebrachte Freundlichkeit, Oenheit für alle themenbezogenen Fragen und praktische Unterstützung danken, insbesondere Herrn Manuel Günther, Herrn Marco Müller, Herrn Thomas Walther und Frau Dr. Susanne Winter. 7 KAPITEL 1. VORWORT 8 Zusammen mit Frau Lara Kresse und Frau Laura Moser haben wir uns schon einmal im Rahmen eines Studienprojekts zum Thema mit Blick Maussteuerung Gedanken machen dürfen. Wir legten damals groÿen Wert darauf, dass dieses zu erstellende Maus-System den Benutzer in Bezug auf die schädlichen Handbewegungen, bei der Bedienung einer Computer-Maus, entlasten und ihn nicht in einer anderen Form belasten sollte, zum Beispiel durch eine zusätzliche Strahlenbelastung. Es wurde demnach ein Ansatz gewählt, der mit zwei Kameras und normaler Beleuchtung auskommen sollte. Meine Aufgabe und somit das Ziel dieser Bachelor-Arbeit war es, einen Open-Source-Projektrahmen zu erschaen, in welchem an dem Vorhaben funktionstüchtige Mauszeiger-Steuerung durch den Blick voll zukünftig jeder, der Interesse hat, arbeiten können sollte. Gleichzeitig galt es so viele Funktionen wie möglich selbst zu implementieren. Es war keine leichte aber eine sehr interessante Aufgabe, die ich hier bearbeiten durfte. Von einer voll funktionstüchtigen Mauszeiger-Steuerung sind wir leider noch ziemlich weit entfernt, aber es wurde zumindest ein Grundstein gelegt und der geschaene Projektrahmen erlaubt die genaue Identikation von noch bestehenden Schwachstellen und ermöglicht somit den einfacheren Einstieg für zukünftige Entwickler. Ihr Martin Schnurrenberger Kapitel 2 Einführung Das hier betrachtete Maus-System benötigt zwei Kameras, die fest an einem Bildschirm montiert sind. Das Maus-System ist benutzerunabhängig, welches bedeutet, dass ein Benutzerwechsel nur eine geringe Anpassungen erfordert, damit das Maus-System auch mit dem neuen Benutzer weiterhin funktioniert. Der erstmalige Aufbau, die Konguration und Installation des Maus-Systems ist sehr speziell und muss von einer geschulten Person vorgenommen werden. Sobald das Maus-System jedoch installiert wurde, ist es für jeden fortgeschrittenen Computer-Anwender benutzbar und kongurierbar. Benutzer, die nur wenig im Umgang mit Computern geschult sind, können das Maus-System verwenden, solange ihnen ein fortgeschrittener ComputerAnwender zur Verfügung steht, der ihnen bei auftretenden Problemen helfen kann. Ist dies nicht der Fall, so wird von einer Benutzung des Maus-Systems durch Computer-Laien abgeraten. Das Maus-System ist nur in geschlossenen Räumen bei künstlichem beziehungsweise durch Fenster einfallendem Tageslicht anzuwenden. Es ist zudem nur auf Personal-Computern einzusetzen, an denen ein einzelner Benutzer Standardsoftware wie zum Beispiel Datei-Manager, OceProgramme, Internet-Browser, und so weiter anwendet. Dies ist das Handbuch zum Maus-System. Dieses Handbuch versucht einer Vielzahl Anforderungen gerecht zu werden. Diese Anforderungen rühren vor allem von den verschieden Zielgruppen her, denen das Handbuch Rechnung tragen muss. 9 KAPITEL 2. EINFÜHRUNG 10 Die Leserschaft lässt sich grob in folgende Gruppen unterteilen: Es gibt zum einen den Leser, der wissen möchte wie oder wie gut das System funktioniert, zum anderen gibt es den Leser, der zufrieden ist, wenn es überhaupt funktioniert. Es gibt denjenigen, der dieses Handbuch lesen muss, ein anderer liest es aus freiem Interesse, entweder um das System nachzubauen oder einfach des Informationsgehaltes wegen. Dieses Handbuch versucht all seinen Lesern gerecht zu werden, indem es zum Beispiel verschiedene Ansätze zur Navigation bietet. Hat es der Leser eilig, so kann er mittels Inhaltsverzeichnis oder Stichwortverzeichnis schnell das nden, was ihn interessiert. Der wissbegierige Leser mit Zeit kann das gesamte Handbuch von vorne bis hinten ähnlich eines Romans lesen. Wer an der Dokumentation der implementierten Funktionen interessiert ist kann zum Referenzteil springen und wenn er oder sie etwas ndet, was noch nicht oder nicht gut genug implementiert ist kann er sich im Anhang zu den OpenSource-Quellen informieren und mitwirken. Wer auf der Anwenderseite praktische Schritt-für-Schritt-Anweisungen sucht ndet diese im Teil für Tutorials. Während ausgearbeitete Bereiche dieser Arbeit sehr ausführlich beschrieben werden, gibt es zum Teil Kapitel, die rein konzeptioneller Natur sind hier wird versucht den theoretischen Ansatz so detailliert wieder zu geben, dass ein zukünftiger Entwickler versteht, was gemeint ist. Ich hoe Sie haben genau so viel Freude beim Anwenden dieses Handbuches wie ich beim Erstellen hatte. Kapitel 3 Installation Die Installation des Maus-Systems, und im Besonderen der Hardware, sollten nur Personen in Angri nehmen, die zumindest ein wenig technisch versiert sind. Der Zusammenbau erfordert handwerkliches Geschick, die Hardwarekonguration ist bei der selbst erstellten Hardware leider noch mühselig und relativ benutzerunfreundlich. Ein kleiner Fehler und das gesamte MausSystem wird nicht richtig funktionieren. Es wird jedoch versucht die Abläufe so benutzerfreundlich wie möglich zu beschreiben. 3.1 Hardware Da das Maus-System erschwinglich sein soll, bleibt einem Benutzer momentan nichts anderes übrig, als sich das benötigte Hardware-System aus Komponenten selbst zusammen zu bauen. Im Folgenden wird beschrieben wie dies geschehen kann, wobei besonderen Wert auf die Möglichkeit des genauen Nachbaus gelegt wurde. Sollte es zukünftig Fertiglösungen zu kaufen geben, werden diese in einem Unterkapitel verglichen, damit der Benutzer ein möglichst gutes Ergebnis erzielen kann. 3.1.1 Marke Eigenbau Frei nach dem Motto: Was nicht passt, wird passend gemacht!, wird im Folgenden ausführlich beschrieben, wie man sich die benötigte Hardware aus Einzelteilen und mit ein wenig handwerklichem Geschick selbst zusammenbauen kann. 11 KAPITEL 3. INSTALLATION Abbildung 3.1: 12 Hardewareaufbau. Diese Abbildung zeigt, wie die Hardware am Ende aussehen kann. Die Art des Zusammenbaus ist eigentlich Geschmackssache. Wichtig jedoch ist, dass die beiden Kameras zueinander und in Bezug auf den Bildschirm unbeweglich montiert werden. Die hier beschriebene Art des Zusammenbaus erfüllt dies nicht nur, sondern besticht zudem durch eine einfache und komponentenschonende Montage. Benötigte Komponenten Für den Zusammenbau der Hardware werden folgende Komponenten benötigt: 1 x TFT Flachbildschirm mit einer Bilddiagonalen von mindestens 17 Zoll. Wichtig hierbei ist die trotz montiertem Standfuÿ freiliegende ESA-Normlochung auf der Rückseite, die normalerweise der Wandbefestigung dient, und die dazugehörigen Schrauben. Auÿerdem sollte zwischen der unteren Kante des Bildschirms und der Tischäche mindestens 5 cm Platz sein. Ein Bildschirm der das erfüllt ist zum Beispiel Hanns-G HC174D. 1 x Winkelschiene aus Aluminium mit den Maÿen 100 x 4 x 2 cm 2 x Metallwinkel, gelocht, recht lang: ca. 15-20 x 4 cm Schräubchen und Muttern 2 x Web-Kamera, von unten festschraubbar, zum Beispiel Vivanco WebKamera: 1,3M CAM 2.0 TRACKING; Art.-Nr: 21331 Werkzeug: Metallbohrmaschine, Metallsäge, gegebenenfalls eine Metallfeile und ein Schraubstock 13 KAPITEL 3. Abbildung 3.2: INSTALLATION Hardewareaufbau. Diese Abbildung zeigt den schemati- schen Zusammenbau der verwendeten Teilstücke: Bildschirm (A), Winkelschiene aus Aluminium (B), Gelochte Metallwinkel (C) und Web-Kameras (D). Preislich liegt man hierbei maximal bei 180 Euro (2008). 90 Euro für den Bildschirm, 40 Euro pro Kamera und maximal 10 Euro für die restlichen Komponenten. Zusammenbau und Anbringung der Haltevorrichtung Zunächst sollte ein 25 cm langes Stück von der Winkelschiene aus Aluminium abgesägt werden. Dieses fungiert später als Untersatz für die Kameras und ist somit eine sichtbare Komponente. KAPITEL 3. INSTALLATION 14 Nun werden die beiden Metallwinkel am längeren Ende mit jeweils zwei Schräubchen so befestigt, dass die Metallteile untereinander unbeweglich sind, so dass die Winkelschiene mit dem kürzeren Ende nach unten zeigt, die Metallwinkel mit den kürzeren Enden nach oben zeigen und die Metallwinkel zum einen weit genug auseinander sind, dass der Standfuÿ des Bildschirms dazwischen passt und zum anderen, dass sie nah genug zusammen sind, um später an der ESA-Normlochung montiert zu werden, also circa 9,5 cm. Es kann sein, dass die Metallwinkel einen kleineren Winkel als 90° brauchen, damit die Kameras den besten Winkel zum Benutzer haben, zum Beispiel 80°. In diesem Fall sind die Metallwinkel mittels Schraubstock zu biegen. Der Rest der Winkelschiene aus Aluminium wird in zwei gleich lange Stücke zersägt. Diese werden an die noch freien Enden des Metallwinkels mittels Schräubchen unbeweglich angebracht. Durch diese Verlängerung müsste einer Montage an der ESA-Normlochung des Bildschirms nichts mehr im Wege stehen. Zuvor sollten jedoch die Kameras montiert werden. Sie sind von ihren beweglichen Teilen zu separieren, indem die entsprechenden Schräubchen gelöst werden. Die beiden Kameras sollten, mit ungefähr einem Zentimeter Abstand zueinander, mittig auf der Winkelschiene aus Aluminium, in Richtung des Computerbenutzers, so parallel wie möglich festgeschraubt werden. Wenn alles verschraubt ist sollte ein in sich starres Gebilde entstanden sein, welches den Blick auf den Bildschirm nicht, oder nur kaum verdeckt und zwei auf den Kopf des Computeranwenders zeigende Kameras aufweist. Treiber-Installation Nachdem die Hardware aufgestellt und mit dem Computer verbunden wurde können die benötigten Treiber installiert werden. Für den Bildschirmtreiber besteht wahrscheinlich kein Bedarf, aber die Kameratreiber werden sehr wahrscheinlich benötigt. Der beiliegende Datenträger, eventuell eine CD, sollte in das Laufwerk des Computers eingelegt werden, so dass den Anweisungen der beiliegenden Installationsanweisung Folge geleistet werden kann. 15 KAPITEL 3. 3.1.2 INSTALLATION Fix-und-fertig Die benötigte Hardware, also ein System aus Bildschirm und Kameras, x und fertig zusammengebaut wäre eine echte Erleichterung für den Benutzer. Eine erschwingliche, fertig montierte, kalibrierte Komplettlösung, womöglich mit enthaltenen signalverarbeitenden Microchips, die dem Computer die Berechnungen abnehmen! Das ist leider noch ferne Zukunftsmusik, aber wer weiÿ?! 3.2 Software Die Software, der weit aus kompliziertere Teil des Maus-Systems, ist im Gegensatz zur Hardware wiedereinmal viel schneller installiert. Die Software ist eine Zusammenstellung mehrerer kleinerer Komponenten, und besteht unter anderem aus einem nutzerdatenverwalter Hardware-Kongurator, einem Tracker, einem BeAugenmaus. und der eigentlichen Die Software wird weitestgehend modular erstellt, so dass der Tracker, also die Kernfunktionalität der Blickrichtungsberechnung, auch in anderer Software Anwendung nden kann. Die Software wurde weitestgehend in C++ für das Microsoft XP Betriebssystem entwickelt. Im folgenden wird nun beschrieben, wie man die Software installiert und konguriert. 3.2.1 Installation Es wird davon ausgegangen, dass Sie die Maus-System-Software als Installer oder als gepackte Datei, entweder von einem externen Datenträger oder von einer Internetseite auf Ihren Computer kopiert haben. Wenn nötig entpacken Sie den Installer durch einen Doppelklick. Führen Sie den Installer nun aus und befolgen Sie die Anweisungen im Installations-Wizzard. Nach der Installation können Sie das Programm genmaus im Startmenü ausführen. 3.2.2 Konguration Au- Die Konguration wird beim ersten Start des Augenmaus-Programms ausgeführt. Diese können Sie später jederzeit nochmal ändern. Von Interesse KAPITEL 3. INSTALLATION 16 sind vielleicht die Einstellungen zum Startverhalten der Software, oder ähnliches. Da dieser Teil noch rein konzeptionell ist, wird an dieser Stelle nicht weiter darauf eingegangen. Kapitel 4 Tutorials In diesem Kapitel werden wichtige oder schwierigere Vorgänge wie die Stereo-Kamera-Kalibrierung, ohne die gar nichts funktionieren würde, in Schritt-für-Schritt-Anleitungen erklärt. Es wird davon ausgegangen, dass Sie die Hardware, wie im Kapitel Installa- tion beschrieben, aufgebaut haben, die Software zum Maus-System installiert ist und die Kameras noch nicht kalibriert wurden. HINWEIS: Eine erneute Kamera-Kalibrierung nach der Erstellung von Benutzern, kann zur Folge haben, dass die vorhanden Benutzerdaten unbrauchbar werden und diese somit neu erstellt werden müssen. 4.1 Stereo-Kamera-Kalibrierung Ohne eine Stereo-Kamera-Kalibrierung ist die Lageberechnung von Punkten im Raum, wie sie hier benötigt wird, nicht möglich und sie weg zu lassen hätte den Ausfall des gesamten Maus-System zur Folge. Es wird von in Abbildung 4.1 dargestellten Kameramodell ausgegangen. Nun werden zwei Anleitungen zur Kalibrierung gegeben. Die erste ist zwar etwas kompliziert, liefert jedoch zuverlässige Ergebnisse. Die zweite ist dagegen einfacher durch zu führen, aber die Richtigkeit der Ergebnisse wurde noch nicht überprüft. Für beide Methoden wird ein Schachbrettmuster benötigt. Dieses kann entweder selbst erstellt werden oder liegt bei der OpenCV 1.0 Distribution 17 KAPITEL 4. TUTORIALS Abbildung 4.1: 18 Verwendetes Kameramodell. Diese Abbildung zeigt das verwendete Kameramodell, mit C als Brennpunkt der Kamera, u und v als Vektoren in der Bildebene in X- und Y-Richtung, m als Bildpunkt des Realen Objektpunktes M und R als Rotationsmatrix der Kamera und t als Translationsvektor der Kamera. Einzig das Weltkoordinatensystem (I,J,K) wurde nicht wie abgebildet gewählt. Quelle: Siehe Internetquellen beziehungsweise eine Kopie davon bei der Augenmaus-Software bei, deren Bezugsquelle Sie im Abschnitt Internetquellen erfahren können. Auf die Kalibrierungsmethode und den Ablauf in der Software wird im Kapitel 4.1.1 Maus-System Produkt-Struktur näher eingegangen. Schritt-für-Schritt-Anleitung für Camera Calibra- tion Tools Die für diese Anleitung notwendige Software Camera Calibration Tools ist im Internet momentan in der Version 0.5.2 frei verfügbar und kann unter 19 KAPITEL 4. Abbildung 4.2: TUTORIALS Fremdsoftware. Diese Abbildung zeigt einen Teil der Web- seite, der hier vorgestellten Kalibrierungs-Software. folgender Adresse heruntergeladen werden: http://www.doc.ic.ac.uk/%7Edvs/calib/main.html Nachdem sich die eben genannte Software auf dem Computer bendet, können die für die Kalibrierung notwendigen Stereo-Bilder gemacht werden. Hierbei wird ein schachbrettartiges unbewegliches Muster aus verschiedenen Positionen durch die zu kalibrierenden Kameras so fotograert, dass das Muster in beiden Kamerabildern ganz zu sehen ist. Es sollten zwischen sieben und zehn Stereo-Bilder gemacht werden. Davon ausgehend, dass die Kameras fest am Bildschirm montiert sind, gibt es nun zwei Möglichkeiten wie das Aufnehmen der Stereo-Bilder erfolgen kann. Entweder wird das Muster vor jeder Aufnahme xiert und daraufhin werden zwei Bilder nacheinander, jeweils eines von jeder Kamera, aufgenommen, oder es wird eine Software verwendet, die gleichzeitig ein Bild von beiden Kameras holt. Letztere steht als C++ Quelltext zusammen mit dem Augenmaus-System im Internet zur Verfügung, wobei die Adresse im Abschnitt Internetquellen zu nden ist. Es sollten nun sieben bis zehn gelungene Stereoaufnahmen vorliegen, die das schachbrettartige Muster aus verschiedenen Positionen zeigen. Das Pro- KAPITEL 4. TUTORIALS Abbildung 4.3: 20 Camera Calibration Tools GUI. Diese Abbildung zeigt die Benutzeroberäche der Kalibrierungs-Software. Die Buchstaben geben die im Text erläuterte Reihenfolge an.. gramm Camera Calibration Tools, das heiÿt die Camera Calibraion Tools.exe, kann nun ausgeführt werden, nachdem das Programm durch Ausführen der heruntergeladenen cct.exe entpackt wurde. Das Programm präsentiert sich als nicht sehr redseliges Design-Produkt und ist trotz Tooltipps wenig intuitiv. Da man Kamera-Kalibrierungen in der Regel nicht so häug durchführt wäre hier ein Wizzard angebrachter. Nun denn. Im unteren Bereich des Programmfensters, unter der Überschrift Calibration Data View, gibt es fünf verschiedene Icons, von denen eines eine Kamera mit einem Plus-Symbol ist (Abbildung 4.3, Markierung A). Dieses Symbol sollte nun angeklickt werden. Es wurde eine Kamera mit der Bezeichnung Camera 1 hinzugefügt (Markierung N). Das Symbol A sollte ein zweites Mal geklickt werden, damit eine zweite Kamera hinzugefügt wird. 21 KAPITEL 4. TUTORIALS Nun gilt es die vorher erstellten Stereo-Bilder in den jeweiligen Kamerabereich zu laden. Dies geschieht anhand des kleinen Icons, welches einen Ordner mit einem Plus darstellt (Markierung B). Es steht zusammen mit zwei anderen kleinen Icons im Bereich der jeweiligen Kamera. Wird es für die erste Kamera geklickt, so önet sich ein Dateifenster. Der Ordner, in dem sich die Stereo-Bilder benden muss geönet werden. Dies ist nun ganz wichtig! Die Bilder, die zur ersten Kamera gehören, sollen nun ausgewählt werden, indem zu erst das letzte Bild durch einen Klick ausgewählt wird, dann die Umschalttaste gehalten und während des Haltens auf das erste Bild geklickt wird. Diese Reihenfolge ist wichtig, da sie gleich, bei der zweiten Kamera, auf die selbe Art ausgeführt werden muss. Sind alle Bilder markiert kann nun die Önen -Schaltäche gedrückt werden. Auch Kamera zwei, soll nun auf diese Art ihre Bilder zugewiesen bekommen. Letztes Bild anklicken, Umschalttaste halten, erstes Bild anklicken, Önen klicken. Im Programm sind die Bilder nun der jeweiligen Kamera zugeordnet, indem sie als Piktogramme abgebildet werden (Markierung D). Es kann sein, dass die Bilder erst sichtbar werden wenn man mit der Maus in den Bereich einer Kamera klickt! Hier nochmal die Kontrolle: Die Bilder müssten bei den beiden Kameras die gleiche Abfolge haben, also jeweils ungefähr gleich aussehen. Durch einen Doppelklick auf das erste Bild bei Kamera eins (Markierung E) önet sich ein mittelgroÿes Fenster (Markierung F), welches lediglich dieses Bild enthält und auf der linken Seite ein Menü in gewohnt spartanischer Art aufweist. Zunächst muss eingestellt werden, was für Eigenschaften das fotograerte Schachbrettmuster besitzt. Um dies zu tun sollte man im Menü auf das Icon mit dem Hammer und der Zange klicken (Markierung G). Es önet sich ein recht kleines Fenster mit sechs Eingabefeldern (Markierung H). Jetzt wird es spannend: Wenn das Schachbrettmuster ein tatsächliches Schachbrett ist, also acht mal acht Felder aufweist, dann muss unter Squares Number of bei X und bei Y, jeweils eine sieben eingetragen werden (Markie- rung I). Ist das Muster aber zum Beispiel sechs mal vier Felder groÿ, und es wurde entschieden, dass die längere Seite die X-Achse sein soll, so muss unter Number of Squares in das X-Feld die Zahl fünf und in das Y-Feld die Zahl drei eingegeben werden. Am besten nimmt man ein quadratisches Muster, dann kommt man mit der X- und Y-Richtung nicht durcheinander, das heiÿt, auch wenn das Muster sechs mal vier groÿ ist, kann man angeben, man hätte nur ein vier mal vier groÿes Muster und müsste dann wiederum jeweils eine KAPITEL 4. TUTORIALS drei statt einer vier eingeben. Nun werden die Felder unter 22 Square Size ausgefüllt (Markierung J). In der Hilfedatei des Programms wird angegeben, dass dort die Schachbrettfeldbreite in Millimeter anzugeben sei. Meine Felder sind drei Zentimeter groÿ, also trage ich dort jeweils eine 30 ein. Die letzten beiden Felder, unter Window Size können unverändert den Wert drei behalten, hierbei geht es um die Gröÿe des Suchfensters in Pixel zur optimierten Eckpunkt-Findung. Die Einstellung ist so schon richtig. Nachdem die Werte nun gesetzt sind, kann man die Eingaben mit OK über- nehmen und kommt nun zum eigentlichen, lustigeren Teil. Das erste Bild, in dem kleinen Fenster Namens Calibration Object Editor (Markierung F), weist im Menü zuoberst ein Icon auf, welches wie ein Schachbrettmuster mit einem Kreis aussieht (Markierung K). Das sollte angeklickt werden, damit die Ecken des inneren Schachbrettmusters von Hand markiert werden können (Markierung L). Das innere Schachbrettmuster ist eben jenes, welches an allen vier Rändern ein Feld weniger besitzt, als das fotograerte Muster. Somit sind es beim normalen Schachbrett, welches acht mal acht Felder besitzt, die inneren sieben mal sieben, die nun markiert werden sollen, indem wie folgt vorgegangen wird. Zuerst sollte die linke untere innere Ecke mit der Maus markiert werden, dann im Uhrzeigersinn, die linke obere innere Ecke, rechte obere innere Ecke und rechte untere innere Ecke. Wenn alles richtig gemacht wurde, ist das innere Rechteck blau umrandet dargestellt, alle Felder im inneren Rechteck haben rote Kreise an den Ecken, schön gerade in einer Reihe (Markierung L). Sollten die roten Kreise wild durcheinander sein, so reicht ein Klick auf das zweitoberste Icon um die Auswahl wieder aufzuheben, wonach man die Einstellung überprüfen oder den Einstellungen entsprechend klicken sollte. Geht alles gut, so ist zudem die untere Seite des Rechtecks mit einem X beschriftet, die linke untere Ecke mit einer Null, für den Nullpunkt, und die linke Seite des Rechtecks mit einem Y (Markierung L). Der rechte der beiden Pfeile im unteren Menü des mittelgroÿen Fensters sollte nun angeklickt werden, damit das nächste Bild ebenso markiert werden kann (Markierung M). Man wiederhole dies, bis alle Bilder der Kamera markiert wurden. Wie bereits erwähnt, ist es am besten, wenn man ein quadratisches Muster verwendet und immer in der gleichen Ecke zu markieren beginnt. Wenn alle Bilder der ersten Kamera markiert sind kann man das Fenster, durch klicken des roten Kreuzchens, oben rechts im Fenster, schlieÿen. 23 KAPITEL 4. TUTORIALS Ein Doppelklick auf das erste Bild der zweiten Kamera önet das letzte Fenster erneut und die Prozedur erfolgt von Neuem: Werkzeug-Icon anklicken, die richtigen Werte eingeben, siehe oben, für alle Bilder innere Ecken markieren und Fenster schlieÿen. So, der schwierige Teil liegt hinter uns, jetzt lassen wir kalibrieren! Im Hauptfenster des Programms kann man nun auf den dunkelgrau hinterlegten Teil klicken, in dem Camera 1 steht. Hat man dies getan, so erscheint eine gelbe Umrandung und ein Bereich wird sichtbar, in dem Not calibrated geschrieben steht (Markierung N). Nun klickt man zur Stereo-Kamera-Kalibrierung unten bei den fünf Icons auf das vierte von links, nämlich das mit den zwei Zahnrädern (Markierung O). Daraufhin sollten zwei Dinge geschehen: Zum einen önet sich eine schicke 3D-Animation, die einem die ganze Kalibrierung schön visualisiert, zum anderen gesellt sich zu - Camera 1 & 2. Camera 1 und Camera 2 ein Label Namens Stereo Rig Beim Betrachten der 3D-Ansicht gewinnt man wichtige Informationen zu wo sich das Koordinatensystem in Bezug auf die Kameras bendet und wie die Achsenbezeichnungen und Achsenausrichtungen festgelegt sind. Hat man sich an der 3D-Ansicht satt gesehen, dann kann man sie schlieÿen und die ganze Kalibrierung speichern, indem man im Hauptfenster des Programms auf das Disketten-Icon im Menü auf der linken Seite klickt (Markierung P). Nachdem die Kalibrierung gespeichert wurde, sollte man den entsprechenden Ordner önen und die Vielzahl an Dateien bestaunen, die erstellt wurden. Das Programm kann man im Übrigen nun schlieÿen. Von den ganzen Dateien sind in unserem Fall nur zwei wichtig: ra_0_Intrinsic.txt und StereoCamera_1_Intrinsic.txt. StereoCame- Önet man die erste der beiden Dateien, so benden sich in ihr neun Zeilen mit Zahlen, mit denen man zunächst nichts anfangen kann. Durch die Hilfedatei erfährt man, dass die ersten drei Zeilen zusammen die so genannte intrinsische Matrix der Kamera darstellen, die vierte Zeile die radialen und tangentialen Verzerrungskoezienten enthält, Zeile fünf bis sieben die Rotationsmatrix aufweist, die achte Zeile den Translationsvektor enthält und die neunte Zeile - da bin ich auch drauf gekommen - die Bildgröÿe in Pixel wiedergibt. Das gleiche gilt auch für die zweite der beiden Dateien, wobei die Rotationsmatrix und der Translationsvektor der zweiten Kamera wesentlich spannender sind, als die der ersten Kamera, da der Koordinatenursprung auf den KAPITEL 4. TUTORIALS 24 Brennpunkt der ersten Kamera gesetzt wird. Sie besitzt also keine Rotation und keine Verschiebung in Bezug auf das Koordinatensystem. Die achte Zeile der zweiten Kamera gibt dabei schon mal ein Indiz für die Richtigkeit der Kalibrierung. Der gröÿte der drei Werte, sollte ungefähr dem Wert der Distanz zwischen den Kameras in Millimetern angeben, bei mir sind das 49.734892374, was ungefähr 5 Zentimetern entspricht und das kommt hin, da meine Kameras ziemlich genau 5 Zentimeter auseinander stehen. Die Stereo-Kameras sind kalibriert, herzlichen Glückwunsch! Da die 3x3 Rotationsmatrix der ersten Kamera Einsen auf der Hauptdiagonalen und sonst nur Nullen enthält und es dadurch leider an einigen Stellen im Programm zu einer Division-durch-Null-Situation kommen kann, sollten alle betroenen Daten, zum Beispiel auch die Rotationsmatrix der zweiten Kamera und die Translationsvektoren mit einer ausgedachten Rotationsmatrix, zum Beispiel die der zweiten Kamera, durch Multiplikation transformiert werden. 4.1.2 Schritt-für-Schritt-Anleitung für Lösung mit OpenCV Da die zuvor beschriebene Art der Stereo-Kamera-Kalibrierung recht umständlich, und fremde Software mit im Spiel ist, wurde eine benutzerfreundlichere Variante implementiert, die auf OpenCV Funktionen basiert. Allerdings ist diese Variante weniger exibel, wie man im Folgenden sehen wird. Der OpenCV 1.0 Distribution liegt ein Schachbrettmuster bei, welches dem hier erläuterten Kalibrierungsprogramm unter Verwendung des Dateinamen pattern.pdf beigefügt wurde. Das Muster kann auf einer DIN A4 Seite aus- gedruckt werden und muss zur weiteren Verwendung in dieser Anleitung zu einem quadratischen Muster geschnitten werden. Die Kästchen am Rand müssen hierbei nicht quadratisch sein, sie können also leicht kleiner sein, als die fünf mal fünf inneren Kästchen, die unversehrt bleiben müssen. Das Muster sollte auf eine glatte, helle, vorzugsweise weiÿe Fläche geklebt werden. Ich habe die Glasäche eines leeren, also weiÿen, Bilderrahmens genommen. Entscheidend hierbei ist, dass um die äuÿeren, schwarzen Rechtecke weiÿe Flächen zu nden sind. 25 KAPITEL 4. TUTORIALS Sind zwei Kameras angeschlossen kann man die Kalibrierungs-Software starten, worauf eine Ausgabe in einem Konsolenfenster erscheint, die erläutert, welches Schachbrettmuster erwartet wird. In unserem Fall ein sieben mal sieben groÿes Feld, wobei die inneren Kästchen eine Gröÿe von drei mal drei Zentimeter aufweisen müssen. Durch Drücken einer Taste erscheinen zwei Fenster, die zeigen, was die beiden Kameras gerade sehen. Das Schachbrettmuster kann nun so gehalten werden, dass es von beiden Kameras vollständig gesehen werden kann und dass nichts auch nur einen Teil des Musters verdeckt. Das Drücken einer beliebigen Taste hält die Bilder der beiden Kameras an und das Muster kann nun weggelegt werden. Ein Algorithmus hat just nach diesem Tastendruck versucht, das Schachbrettmuster in beiden Bildern zu nden. Er war erfolgreich, wenn alle 25 inneren Kästchen an allen vier Ecken, bunte, durch eine Linie verbundene Kreise aufweisen. Der Farbverlauf hierbei ist: rot, orange, gelb, grün, hellblau, dunkel-blau. Sind beide Bilder so dargestellt, dann ist das Bildpaar verwendbar. Wenn nur rote Kreise zu sehen, sie wild verstreut, oder weniger als 25 Kreise zu sehen sind, ist diese Aufnahme und somit beide Aufnahmen unbrauchbar. In dem Konsolenfenster erscheint die Frage: Use Stereo frame? (y/n), also ob das gemachte Stereo-Bild zur Kalibrierung verwendet werden soll, oder nicht. Wenn beide Bilder, wie oben beschrieben, verwendbar sind, sollte die Y-Taste gedrückt werden, ansonsten, wenn eines der beiden unbrauchbar ist, sollte die N-Taste gedrückt werden. Ist dies erfolgt erscheint ein neues Menü im Konsolenfenster, welches auf die Anzahl der bisher verwendbaren Stereo-Bilder hinweist und nun fragt, ob noch ein Bildpaar gemacht werden soll (A-Taste), oder das Programm mit (G-Taste) oder ohne (K-Taste) Kalibrierung verlassen werden soll. Es sollte die A-Taste gedrückt werden und wiederholt, wie vorhin beschrieben, Stereo-Bilder von dem Schachbrettmuster gemacht werden, wobei das Brett nie zweimal in der gleichen Position und Orientierung sein sollte, da zwei identische Aufnahmen, der Kalibrierung keine neuen Daten liefern. Nach sieben bis zehn gelungenen Bildern kann das Programm mittels G-Taste zur Kalibrierung fortschreiten. Die Ergebnisse sind daraufhin im Programmordner in den Dateien cam1calibResult.txt beziehungsweise cam2calibResult.txt KAPITEL 4. TUTORIALS 26 zu nden. 4.2 Augenmaus Die Augenmaus an sich, also der Teil des Maus-Systems, welcher die Steuerung des Mauszeigers mit dem Blick ermöglicht, ist unter Umständen nicht immer voll funktionsfähig. Dem Benutzer soll daher ein leichter Ausschalt-Mechanismus zur Verfügung gestellt werden, der ihm erlaubt, jeder Zeit wieder auf eine manuelle Steuerung des Mauszeigers zu wechseln. Im folgenden wird nun geschildert, wie das ein- und ausschalten der Augenmaus prinzipiell funktionieren soll. 4.2.1 Augenmaus ausschalten In aller Regel sollte die Augenmaus mit dem Betriebssystem gestartet werden und idealer Weise in der Art funktionieren, dass gar nicht auällt, dass dieses komplexe Gebilde im Hintergrund läuft. Wird jedoch festgestellt, dass die Augenmaus nicht einwandfrei funktioniert, oder führt eine kontinuierliche Zeitverzögerung zu Unbehagen, so soll der Benutzer nicht auch noch damit belastet werden, den Ausknopf zu suchen. Es bietet sich im Grunde nur eine Tastenkombination an, um die Augenmaus abzuschalten, da von einer Disfunktion in der Mauszeiger-Steuerung auszugehen ist. Wurde die Augenmaus manuell abgeschaltet, so wird sie auch beim nächsten Start des Betriebssystems nicht wieder automatisch eingeschaltet. Das Maus-System und die dazu gehörige Software wird allerdings schon gestartet. Um dies zu ändern, kann der Benutzer die Option Einstellungen im Menü der Software auswählen und dort die gewünschten Änderungen vornehmen. 4.2.2 Augenmaus einschalten Für das einschalten würde sich prinzipiell auch die manuelle MauszeigerSteuerung eignen. Da jedoch das Ziel ist, keine Computer-Maus mehr zu benötigen, bietet sich auch hier eine Tastenkombination an. Im Zweifelsfall sogar die gleiche Kombination, die auch für das Ausschalten angewendet wird. Die Tastenkombination fungiert also als Schalter. Dieser Schalter behält seinen Zustand auch über einen Computer-Neustart hinweg, also gilt auch für das Einschalten, dass falls der Computer ausgemacht wurde, während die 27 KAPITEL 4. TUTORIALS Augenmaus eingeschaltet war, wird die Augenmaus auch bei erneutem Hochfahren des Computers eingeschaltet sein. KAPITEL 4. TUTORIALS 28 Kapitel 5 Benutzeroberäche Dieser Teil des Benutzerhandbuches erläutert die Benutzeroberäche der Augenmaus-Software. Alles in diesem Kapitel ist zu diesem Zeitpunkt leider rein konzeptionell, beschreibt also, wie die Software einmal sein soll und nicht wie sie momentan tatsächlich ist. Der Aufbau der Benutzeroberäche ist recht ähnlich zu dem einer Antivirensoftware. Eigentlich soll man nicht merken, dass eine Software läuft, aber in einem Problemfall sollte die Software dem Benutzer ermöglichen, den Fehler schnell zu beheben oder, wenn der Benutzer eine Änderung vornehmen möchte, sollte sie ihm dies durch einen leichten Zugang zu den richtigen Stellen ermöglichen. Die Benutzeroberäche teilt sich quasi in zwei Hauptkomponenten, die durch die Benutzung gegeben sind. Zum einen gibt es ein Taskbar-Icon, welches dem Benutzer den Status der Software mitteilt, zum anderen gibt es das Hauptfenster, welches in verschiedene Bereiche unterteilt ist und im Wesentlichen die Konguration des Maus-Systems ermöglicht. Zum Hauptfenster gelangt der Benutzer jeder Zeit über das Menü des Taskbar-Icons. 5.1 Das Taskbar-Icon Jeder Windows-Benutzer kennt sie: Störende Taskbar-Icons, die alle drei Minuten eine Nachricht in Form einer Sprechblase produzieren. So ist das Augenmaus-Taskbar-Icon nicht! Es ist schlicht, blinkt nicht, bietet ein Menü an und geht mit Mitteilungen, wenn überhaupt, sehr sparsam um. 29 KAPITEL 5. BENUTZEROBERFLÄCHE 30 Das Icon selbst ist ein kleines Auge, welches oen ist, wenn die Software eingeschaltet ist und geschlossen ist, wenn die Software ausgeschaltet ist. 5.1.1 Menü am Taskbar-Icon Durch einen Klick auf das Icon mit der rechten Maustaste, beziehungsweise durch das Betätigen einer noch nicht näher spezizierten Tastenkombination auf der Tastatur, erscheint ein Menü beim Taskbar-Icon. Über das Menü kann die Software unter anderem beendet werden, dann schlieÿen alle mit dem Maus-System zusammenhängenden Programme und die Software muss bei Bedarf unter Start -> Programme wieder manuell neu ausgeführt werden. Des weiteren kann die Augenmaus-Software auch vorübergehend deaktiviert werden, das heiÿt das Programm läuft zwar noch, aber das Tracking der Blickrichtung und insbesondere die Kameras sind vorübergehend ausgeschaltet, wodurch der Mauszeiger natürlich nicht mehr neu gesetzt wird. Je nachdem in welchem Zustand sich die Software bendet, zeigt das Menü also entweder die Auswahl Augenmaus deaktivieren oder Augenmaus aktivieren an. Ein schneller Benutzerwechsel wird gegebenenfalls auch über dieses Menü durchgeführt. Auÿerdem enthält das Menü eine Auswahl Einstellungen mit der man das Hauptfenster önen kann um Änderungen an den Einstellungen vorzunehmen. 5.1.2 Mitteilungen des Taskbar-Icons Sobald die Software des Maus-Systems installiert und gestartet wurde wird ein Wizzard aufgerufen, der den Benutzer durch die Konguration des Systems leitet. Bricht der Benutzer diesen Wizzard ab, da er das System zum Beispiel erst später kongurieren möchte, so wird die Software als TaskbarIcon im Zustand Augenmaus deaktiviert gestartet. Augenmaus aktivieren Sobald der Benutzer die Option wählt, überprüft die Software systematisch, ob alle zum Betrieb notwendigen Schritte vorgenommen wurden. Ist dies nicht der Fall, dann wird der Benutzer von dem TaskbarIcon mittels einer Sprechblase auf den noch fehlenden Kongurationsteil hingewiesen. So können zum Beispiel die Kameras angeschlossen, aber noch nicht kalibriert sein. Oder das System weiÿ nach der Kamera-Kalibrierung noch nicht, wo sich dessen Bildschirm bendet, und so weiter. 31 KAPITEL 5. BENUTZEROBERFLÄCHE Auÿerdem können während der Laufzeit festgestellte Probleme über das Taskbar-Icon mitgeteilt werden, wie zum Beispiel, dass das System mehrere Benutzer erkannt hat, die sich gegenseitig stören. Oder es wird eine zu geringe Beleuchtung erkannt und gemeldet. 5.2 Das Hauptfenster Im Hauptfenster soll der Benutzer eine einfach zu bedienende Kongurationsschnittstelle vornden. Neben dem für das WIMP-Design typischen Aufbau mit Rahmen, Menüleiste, die standardmäÿig Punkte enthält wie: Datei, Ansicht, Extras, Update und Hilfe und Statuszeile, weist das Fenster eine im oberen Bereich angeordnete Graphik, eine Art Logo, auf und direkt darunter einen gröÿeren Bereich für Inhalte. Der gröÿere Inhaltsbereich enthält Reiter, die die Navigation zu den verschiedenen Ansichten erlaubt. Die Ansichten haben die Titel: Tracking, Status, Benutzer, Bildschirme 5.2.1 und Kameras. Favoriten, Favoriten Favoriten sind häug durchgeführte Aktionen zu nden. StandardAugenmaus einschalten und ausschalten, wechseln in einen experimentellen Modus, der momentan mit Nasenmaus bezeichnet wird und Unter mäÿig sind dies ob bei der Augenmaus nur das linke, nur das rechte, oder beide Augen in die Berechnungen einieÿen sollen. Bei der Nasenmaus wird lediglich der Kopf für die Berechnung der Mauszeiger-Position verwendet. Die Nase wird quasi wie bei Pinocchio verlängert und an der Stelle an der die Nase den Bildschirm berühren würde bendet sich der Mauszeiger. 5.2.2 Tracking In der Ansicht Tracking werden die momentanen Trackinginformationen, also wo sich die Augen, die Kameras und der Bildschirm benden, also die Live-Situation des Maus-Systems, als Gittermodell angezeigt. Die ktive Kamera, die dieses Szenario erfasst, soll im Übrigen nach belieben positioniert werden können, so dass man die graphischen Ergebnisse aus beliebigen Blickwinkeln betrachten kann. Möglich wären auch ein paar Standardperspektiven, zwischen denen man hin und her wechseln kann, da vielleicht nicht alle Blickwinkel auf ein gegebenes Szenario sinnvoll sind. KAPITEL 5. 5.2.3 Unter BENUTZEROBERFLÄCHE 32 Status Status wird angezeigt, ob alle nötigen Vorkehrungen getroen wur- den, damit das System lauähig ist. Gibt es ein Problem mit einer Einstellung, so wird dies hier deutlich und der Benutzer kann das Problem von hier aus angehen. 5.2.4 Benutzer Der Reiter Benutzer erlaubt eine Benutzerverwaltung, wobei das Ein- richten und Speichern eines Benutzers nicht zwingend erforderlich ist, jedoch bessere Tracking-Ergebnisse liefern kann. Ist ein Benutzer ausgewählt, so werden die ihn betreenden Daten angezeigt. 5.2.5 Unter Bildschirme Bildschirme kann man zunächst einen, später jedoch mehrere Bild- schirmächen denieren, die der Mauszeiger-Positionierung dienen sollen. Es wäre zum Beispiel möglich zwei Bildschirme nebeneinander zu stellen und je nachdem auf welchen Bildschirm ein Benutzer schaut, der Mauszeiger entweder auf dem einen oder dem anderen positioniert wird. Die Datendarstellung zu den erfassten Bildschirmen, ihre Auösung, Gröÿe, Position im Raum und das Hinzufügen und Löschen von Bildschirmen erfolgt hier. 5.2.6 Kameras Als Letztes können unter der Ansicht Kameras die jeweiligen Daten zu den Kameras eingesehen werden, sowie eine Neukalibrierung durchgeführt und andere die Kameras betreende Einstellungen vorgenommen werden. 5.2.7 Die Benutzeroberächen-Hilfe Zu allen Ansichten des Hauptfensters gibt es neben der üblichen HilfeDatei jeweils eine Oberächen-Hilfe, die kurz und präzise erläutert, welche Optionen dem Benutzer durch die aktuelle Ansicht geboten werden. Alle Einstellungen können im Menü, über die Option oder geladen werden. Über die Option Update Datei, gespeichert soll dem Benutzer eine einfa- che Möglichkeit geboten werden, die Software zu aktualisieren. Unter Extras 33 KAPITEL 5. BENUTZEROBERFLÄCHE sollen unter anderem Einstellungen zur verwendeten Sprache innerhalb der Software und zum Verhalten der Software in Bezug auf automatisches Starten mit dem Betriebssystem, Abschalten von Maus-System-Nachrichten und dergleichen. KAPITEL 5. BENUTZEROBERFLÄCHE 34 Kapitel 6 Das Modell Das Modell soll veranschaulichen wie die Blickrichtungsbestimmung prinzipiell funktionieren soll. Es zeigt auf, von welchen Annahmen ausgegangen wird, welche Vereinfachungen vorgenommen wurden und letzten Endes wie die Berechnung praktisch ablaufen soll. Zunächst wird das sehr einfache theoretische Modell beschrieben, welches unter bestimmten, leider unmöglichen, Umständen ausreichen würde, um das Problem der Blickrichtungsbestimmung und Mauszeiger-Positionierung zu lösen. Daraufhin wird versucht, das notwendigerweise komplexere Modell einfach zu beschreiben. Auf möglicherweise auftretende Probleme wird in diesem Bereich nicht näher eingegangen. 6.1 Die einfache Theorie Stellen Sie sich vor, ihre Augen wären Laserpointer und der Bildschirm wäre sensitiv für das aus Ihrem Auge austretende Licht. Somit wüsste der Bildschirm immer genau wo Sie hinschauen. Um etwas mathematischer zu werden, sagen wir der Bildschirm wäre eine Ebene im Raum, die durch ihre vier Eckpunkte genau gegeben ist. Und aus den Augen tritt nun kein Lichtstrahl mehr, sondern ein Vektor, also ein Pfeil, der im optischen Augendrehpunkt beginnt und genau mittig durch die Iris aus dem Auge heraus zeigt. Zusätzlich meldet das Auge permanent, wo es sich gerade im Raum bendet und in welche Richtung dieser Blick-Vektor zeigt. Unter diesen Umständen lässt sich das Problem recht einfach vektor-algebraisch lösen, indem man den Schnittpunkt einer Geraden, nämlich der Blickgeraden, 35 KAPITEL 6. DAS MODELL Abbildung 6.1: 36 Minimal-Problem. Diese Abbildung zeigt wie einfach das Problem zu lösen wäre, wenn das Auge ein Signal versenden würde, welches genaue Angaben über dessen Orientierung im Raum machte. mit einer Ebene, nämlich dem Bildschirm, bestimmt. Existiert so ein Schnittpunkt, dann ist dies die Mauszeiger-Position, existiert keiner, so schaut der Benutzer nicht auf den Bildschirm. Die Probleme hierbei liegen auf der Hand: Der Bildschirm weiÿ nicht automatisch wo er sich im Raum bendet. Und das Auge teilt erst recht nicht die aktuelle Position und Blickrichtung mit. Diese Daten gilt es also zu ermitteln. 6.2 Die nicht so einfache Praxis Wie schon erwähnt ist die Lösung zur Bestimmung der Blickrichtung und der Mauszeiger-Position nicht so einfach wie das eben dargestellte Modell. Der Bildschirm ist ein relativ einfach zu erfassendes Gebilde, seine Position und Gröÿe sind durch die vier Eckpunkte eindeutig gegeben. Wenn man diese also einmal bestimmt hat, brauchen diese Daten nicht mehr ermittelt werden. Der Kopf, hingegen dessen Position, stellvertretend für die Position der Augen, ständig ermittelt werden soll, abgesehen davon, dass sich je zwei Köpfe grundsätzlich, bis auf die Anordnung der Augen, Nase, et cetera unterscheiden, ist ein recht komplexes Gebilde, wenn man von Rechtecken, Kugeln und Quadern als einfache Gebilde ausgeht. Es gilt also die Komplexität des Kopfes beziehungsweise des Gesichtes soweit wie möglich zu reduzieren und dennoch eine Aussage treen zu können, wo sich das Gesicht im Raum bendet. 37 KAPITEL 6. DAS MODELL Als Repräsentation des Gesichts kann ein Dreieck gewählt werden, welches zum Beispiel durch die beiden Augeninnenwinkel und die Nase gebildet wird. Wenn man sich dieses Dreieck als tatsächlich vorhandenes, zum Beispiel aus Karton gefertigtes Dreieck, vorstellt, welches auf das Gesicht in eben beschriebener Position geklebt wird, so stellt man fest, dass es egal ist, wie der Kopf bewegt wird. Solange man es nicht darauf anlegt, bewegt sich das Dreieck immer mit und bleibt immer an der gleichen Stelle und ist somit zur Repräsentation des Gesichtes geeignet. Rekapitulieren wir also kurz: Wir wissen wo die Bildschirmebene ist und wir wissen wo das Dreieck, stellvertretend für der Kopf, und somit auch wo die optischen Augendrehpunkte sind. Nun gilt es die relativ zum Kopf beweglichen Augen, beziehungsweise deren Pupillen zu nden. Mittlerweile müssen also fünf Punkte im Gesicht bestimmt werden, drei für das Dreieck und jeweils einer für jedes Auge. Wenn man nun weiÿ, wo sich das Dreieck bendet, kann man über dieses zu den theoretisch fest verankerten, optischen Augendrehpunkten gelangen und von diesen, durch die Pupillen in Blickrichtung, einen Schnittpunkt mit der Bildschirmebene bestimmen. Für das Finden des Gesichtsdreieckes soll eine Kamera eingesetzt werden. Da eine einzelne Kamera zur Berechnung der räumlichen Position von Punkten nicht ausreicht, wird eine zweite hinzugezogen. Jede Kamera liefert ein geringfügig anderes Bild als die jeweils andere Kamera. Da die Kameras kalibriert und untereinander unbeweglich montiert sind ist es bei vorausgehender Bildverarbeitung möglich, die Position der fünf notwendigen Gesichtspunkte im Raum zu bestimmen. Der optische Augendrehpunkt im Verhältnis zum Gesichtsdreieck sowie die Position des Bildschirmes in Bezug auf die Kameras werden in einer Kalibrierungsphase ermittelt und stehen zur Verfügung, so dass alle zur Berechnung des Blickpunktes auf dem Bildschirm notwendigen Daten vorhanden sind. KAPITEL 6. DAS MODELL 38 Kapitel 7 Maus-System Produkt-Struktur In diesem Abschnitt des Handbuches werden die implementierten C++ Funktionen detailliert beschrieben. Wenn Sie sich als Programmierer für die Funktionen interessieren, sollten Sie vielleicht eher den ausführlich beschriebenen Referenzteil sichten. 7.1 Stereo-Kamera-Kalibrierung Die hier verwendete Methode basiert auf der Methode von Zhang [1, 2]. Ein Schachbrett von bekanntem Ausmaÿ wird als planare Ebene in Bildern der Kamera gesucht. Die Registrierung der Bilddaten ergibt dann intrinsische Kameraparameter, wie die Position des Bildmittelpunktes und der radialen Verzerrungskoezienten und extrinsischen Kameraparameter, insbesondere wie die Kameras zueinander angeordnet sind. 7.1.1 Kalibrierung mit Hilfe von OpenCV Eine Kamera Kalibrierung mit OpenCV zu realisieren ist nicht sehr umständlich, sobald man einigermaÿen nachvollzogen hat, wie es funktioniert. In dem von mir implementierten Ansatz werden Stereo-Bilder von den beiden Kameras geholt, bis der Benutzer auf eine Taste drückt. Ist dies geschehen werden die Bilder angehalten und das Schachbrettmuster sollte in beiden Bildern der Kameras ganz zu sehen sein. Die Funktion cvFindChessBoardCornerGuesses() versucht unterdessen ein Schachbrettmuster zu nden. Und die gefundenen Pixel-Positionen der Ecken der inneren Felder werden mit cvFindCornerSubPix() noch optimiert. Dra- wEtalon() zeichnet die gefunden Ecken ein, so dass der Benutzer sehen kann ob alle Ecken richtig gefunden wurden. Ist dies nicht der Fall, so kann er das 39 KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR 40 Bild verwerfen und ein neues Stereo-Bild von den Kameras holen. Ein korrekt gefundenes Schachbrettbild wird ebenfalls verworfen, lediglich die Positionsdaten der Inneren und äuÿeren Ecken des Schachspielfeldes werden gespeichert. Hat der Benutzer sieben bis zehn gute Stereo-Bilder von dem Muster ge- run_calibration() ausgeführt, welches im Wesentlichen die FunkcvCalibrateCamera2(), cvFindExtrinsicCameraParams2() und cvFindFundamentalMat() und zum Beispiel auch cvRodrigues2() aufruft. Die Ergebnisse werden mittels cvWrite() in eine Datei geschrieben. macht, wird tionen Der weiter interessierte Leser sei an dieser Stelle auf die Beispieldatei zur Kamera Kalibrierung im OpenCV Programmverzeichnis verwiesen. 7.2 Augen-Maus Die Softwarekomponente Augen-Maus besteht ihrerseits aus mehreren Teilen, die sich entweder durch ihren Algorithmus oder, weil sie häuger wiederverwendet werden, von den anderen unterscheiden. 7.2.1 Tracking Beim Tracking geht es darum immer wieder die gleichen gesuchte Merkmale, in unserem Fall die fünf Gesichtspunkte, in Bildern einer Bildsequenz zu nden. Dies soll in einigen Zwischenschritten erreicht werden, welches in diesem Kapitel näher erläutert wird. Erzeugung des Stereo-Bildes Für die Berechnung der räumlichen Koordinaten eines Objekts, dessen Gröÿe man nicht kennt, kann man zwei oder mehr Kameras einsetzen. Hier werden zwei Kameras eingesetzt. Für die genaue Berechnung ist es wichtig, dass die Bilder der zwei Kameras genau gleichzeitig gemacht werden. Dieses ist bei Computern im Allgemeinen nicht möglich. Darum muss unbedingt darauf geachtet werden, dass die Bilder, so kurz wie nur möglich, direkt hintereinander gemacht werden. OpenCV bietet hierfür die Funktion cvGrabFrame() an, die das aktuelle Bild unverarbeitet zwischenspeichert, welches sehr schnell von statten geht, so dass man mehrere Aufrufe hintereinander tätigen kann, ohne dabei viel Zeit zu verlieren. 41 KAPITEL 7. Mit MAUS-SYSTEM PRODUKT-STRUKTUR cvRetrieveFrame() werden die zwischengespeicherten Daten dann so wei- ter verarbeitet, dass man die Bilder verwenden kann. getStereoFrame_LLM() ist nun eine Funktion, die die oben genannte Methode für zwei Kameras einsetzt, um möglichst zeitgleiche Bilder zu bekommen. Umwandeln des Kamerabildes in ein verwendbares Bild Ein von einer Kamera geholtes Bild weicht bei OpenCV in seinen Eigenschaften von einem regulären Bild in OpenCV ab, besitzt jedoch den gleichen Datentyp. Normalerweise wird ein Bild erstellt, initialisiert und am Ende freigegeben. Und als Verwender macht man die Annahme, dass ein normaler Zugri darauf möglich ist, dass also links oben auch wirklich links oben ist. Aber dem ist nicht so. Es hängt unter anderem vom Betriebssystem ab, ob das Bild nicht doch auf dem Kopf steht. Das fällt einem leider zunächst nicht auf, da ein Bild, welches auf dem Kopf steht, bei der Anzeige am Bildschirm automatisch gedreht wird. Aber sobald man zum Beispiel auf den Pixel an der Stelle (1,1) zugreift und stattdessen bei (Höhe-des-Bildes, 1) landet, kommt leichte Verwunderung auf, auch wenn dieses nur die Spitze des Eisberges ist. Man muss das von der Kamera geholte Bild also erstellen, eine Initialisierung mit Null ist nicht nötig, es darf aber auf keinen Fall freigegeben werden. Darum kümmert sich die Kamera, von der das Bild stammt selbst. Und unter Windows steht das Bild auf dem Kopf. Deshalb gibt es die Funktion setEditableImage_LLM(), die das Originalbild der Kamera kopiert und in die erwartete Position mittels Spiegelung an der Horizontal-Achse bringt. Bild-Entzerrung Ein Punkt, den man gerade als Anfänger gerne vergisst, ist die Tatsache, dass Bilder von einer Kamera, abhängig von den Eigenschaften der Linse, verzerrt sind. Ohne die vorherige Entzerrung - und darauf möchte ich hier ausdrücklich hinweisen - ist ein Stereo-Bildpaar nicht zur Bestimmung der räumlichen Koordinaten geeignet! KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR Glücklicherweise bietet OpenCV hierfür die Funktion 42 cvUndistort2() an, die eine schnelle Entzerrung garantiert, auch wenn es zunächst nicht ganz leicht zu verstehen ist, welche Parameter diese Funktion in welchem Format haben möchte, und dass diese Parameter aus der Kamera-Kalibrierung hervorgehen. setUndistortedImage_LLM() distort2(). ist im Grunde die gleiche Funktion wie cvUn- Es sei an dieser Stelle nochmal kurz darauf hingewiesen, dass jede Kamera individuell kalibriert werden muss, da selbst zwei Kameras gleichen Typs nie genau baugleich sind! Finden des Gesichts Im Bild von der Kamera sind viel zu viele Daten enthalten. Im Grunde möchten wir zum Beispiel nur wissen, welche Koordinaten ein Auge im Bild hat, also nur ein (x,y)-Wert. Stattdessen haben wir ein Bild mit 640 x 480, also 307.200 Pixel mit jeweils drei Farbwerten, also 921.600 Werte! Es gilt somit die Informationsfülle zu reduzieren. Ich möchte das in überschaubaren Schritten erledigen, wovon der erste Schritt das Finden des relevanten Gesichts sein soll. Auch hierfür bietet OpenCV eine sehr zuverlässige Lösung. Auf die Methode an sich gehe ich an dieser Stelle nicht weiter ein, da es den Umfang sprengen würde, aber die einzelnen Schritte können in der OpenCV DemoDatei facedetect.c gut nachvollzogen werden. So viel sei jedoch erwähnt, die Methode basiert auf Objekterkennung mittels Haar-Kaskaden. In unserem Fall wird also vorausgesetzt, dass eine HaarKaskade auf Gesichter trainiert wurde. Die Funktion setFaceImage_LLM() benutzt nun die in OpenCV bereitge- stellte Methode, um das relevante Gesicht im Kamerabild zu nden. Da es sein kann, dass mehrere Gesichter im Kamerabild vorhanden sind und der Algorithmus in diesem Fall auch mehrere Gesichter ndet, wird die Annahme gemacht, dass das relevante Gesicht am nächsten zur Kamera ist, also das gröÿte Gesicht. Die vereinfachte Annahme, dass das gröÿte Gesicht das relevante Gesicht ist, bringt einige Probleme mit sich. Wenn zum Beispiel zwei Personen zusammen vor dem Bildschirm sitzen, wird der mit dem gröÿeren Kopf als 43 KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR relevant angesehen oder es ndet ein ständiger Wechsel statt. Dieses und andere damit verbundene Probleme müssen unter Umständen nochmal angegangen werden, doch im Moment ist die einfachste gleichzeitig die beste Lösung. Ist also das relevante Gesicht identiziert worden, dann wird ein kleineres Bild erstellt, welches nur das relevante Gesicht enthält und dessen Gröÿe direkt von ihm beziehungsweise von der Nähe des Gesichtes zur Kamera abhängt. In diesem kleineren Bild haben wir nun zum einen die relative Gewissheit, dass in ihm ein Gesicht - und zwar ausschlieÿlich ein Gesicht - enthalten ist, und zum anderen haben wir die Informationsmenge schon drastisch reduziert. Bei einer Gesichtsbildgröÿe von 120 x 120 Pixel zum Beispiel haben wir eine Reduktion von 921.600 Werten auf 43.200 Werte - das ist ja schon mal etwas! Finden der Pupillen Wie schon gesagt gilt es die Fülle an Informationen aus dem ursprünglichen Bild von der Kamera zu verringern. Das Gesicht zu nden leistet dabei schon groÿe Dienste. Nun soll die Informationsmenge durch die folgenden drei Schritte auf den benötigten (x,y)-Wert, der die Position einer betrachteten Pupillenmitte angibt, reduziert werden: Anhand anatomischer Gegebenheiten wird ein gleichzeitig möglichst kleiner und exibler Bereich geschätzt, in dem sich zur gleichen Zeit nicht mehr als ein Auge bendet Anhand von Template Matching, also dem Suchen nach einem Objekt in einem Bild anhand eines Suchmuster-Bildes, welches man Template nennt, wird das Auge in diesem Bereich gefunden Anhand anatomischer Gegebenheiten und Ausnutzung der Tatsache, dass eine Pupille relativ rund ist, wird die Pupillenmitte innerhalb des gefundenen Auges gesucht Pupillenbereich schätzen Da der Gesichtsndungsalgorithmus von OpenCV gröÿeninvariant ist, erhalten wir groÿe oder kleine Gesichtsbilder. Dies gibt dem Benutzer die Möglichkeit, sich im Sichtfeld der Kameras frei zu bewegen, allerdings mit der Einschränkung, dass sein Gesicht stets den Kameras zugewandt sein muss, welches aber kein Problem darstellt, da die Kameras unter dem Bildschirm KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR 44 positioniert sind und der Benutzer in den relevanten Situationen auf den Bildschirm schaut. Des weiteren erlaubt der Algorithmus Kopfneigungen bis zu ca. 30°. Seitwärts gedrehte Gesichter oder Gesichter auf dem Kopf werden zum Beispiel nicht gefunden. Da der Gesichtsndungsalgorithmus homogene Bilder dieser Art liefert, verlässt ein betrachtetes Auge nie einen gewissen Bereich. Das lässt eine weitere Eingrenzung und somit eine weitere Informationsreduktion zu. In diesem weiter eingegrenzten Bereich bewegt sich das Auge jedoch, je nach Kopfneigung, wie auf einem Halbkreis, wobei das Auge in der Regel zur einen oder anderen Seite schief abgebildet wird. Das Auge nden Da das Auge in dem Bereich jedoch das einzige ist, was wie ein Auge aussieht, kann seine Position mit einem Bild von einem Auge, welches als Suchmuster dient, leicht bestimmt werden. Mit diesem Suchmuster kann man unter anderem der Beleuchtungsvarianz, bezogen auf den jeweiligen Standort, teilweise entgegenwirken: Durch das zu Beginn einmalige Anlegen von Augenbildern für einen bestimmten Benutzer und ein bestimmtes Beleuchtungsszenario erhält man eine einfache Art den Algorithmus zu personalisieren und somit zu optimieren. Damit nur ein Suchmuster angelegt werden muss wird das Bild mit dem Bereich, in dem sich das Auge bendet, auf eine Normgröÿe gebracht. In der gleichen Auösung ist auch das Suchmuster abgespeichert. Das normierte Bild mit dem Pupillenbereich ist dann um so schärfer und enthält mehr Bildinformationen, je näher sich die Person zu den Kameras bendet. Die Pupillenmitte nden Nachdem das Auge gefunden wurde wird ein Bild erstellt, welches auällige Kanten, also kontraststarke Übergänge von hellen zu dunklen Bereichen, durch weiÿe Bereiche auf schwarzem Hintergrund darstellt. Das heiÿt, dass das Bild überall dort, wo das Augenbild Kanten aufweist, helle Bereiche mit groÿen Zahlenwerten enthält und überall dort wo das Augenbild keine Kanten aufweist schwarze Bereiche mit kleinen Zahlenwerten enthält. 45 KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR Es wird der Sobel-Algorithmus als einfacher Kantendetektor-Filter eingesetzt, da davon ausgegangen wird, dass die Pupille zusammen mit dem Augenweiÿ eine rundliche Kante erzeugt, die es zu nden gilt. Die folgende Methode zur Findung eines Gebildes, welches am ehesten einem Kreis entspricht, ist recht clever und nicht ganz trivial. Es wird ein Bereich angegeben, in dem der Mittelpunkt des gesuchten Kreises liegen kann. Des weiteren werden ein minimaler und maximaler Radius festgelegt. Diese drei Werte einzugrenzen ist auf Grund der normierten Bildgröÿe des Pupillenbereiches und der damit verbundenen Konstanz des Augenbildes kein Problem. Der Algorithmus prüft nun für jeden möglichen Mittelpunkt und jeden möglichen Radius, indem er die auf dem Umkreis liegenden Helligkeitswerte addiert, wo der beste Kreis, also der mit der gröÿten Summe, liegt. Das ist nicht ganz einfach, deshalb zur Veranschaulichung eine Fallunterscheidung: Ein Kreis wird im Sobel-Bild als weiÿer Kreis auf schwarzem Hintergrund abgebildet, wobei die weiÿen Pixel hohe, zum Beispiel 200, und die schwarzen Pixel niedrige Zahlenwerte, zum Beispiel Null, enthalten. Sagen wir nun der aktuelle Mittelpunkt und Radius beschreibt genau den gesuchten Kreis, dann wird der Umkreis abgelaufen, also genau der weiÿe Kreis, und alle Zahlenwerte addiert, welche in der Summe einen groÿen Wert ergeben, da jeder Kreispunkt weiÿ ist und somit einen hohen Zahlenwert enthält. In einem anderen Fall, in dem der aktuelle Mittelpunkt und Radius eben nicht den gesuchten Kreis beschreiben, sondern einen Kreis, der zum Beispiel lediglich zwei Schnittpunkte mit dem gesuchten Kreis gemeinsam hat, ergibt die Summierung der Zahlenwerte auf dem Umkreis einen vergleichsweise kleinen Wert, da die Summanden lediglich an zwei Stellen ungleich Null sind. Es wird also derjenige Mittelpunkt und Radius als bester Kreis gewählt, welcher die gröÿte Summe aufweist. Es fällt leicht, sich vorzustellen, dass diese Verfahren auch mit unvollständigen Kreisen, zum Beispiel Halbkreisen, funktioniert. Eine relativ unbedeutende Sache fehlt nun noch, die aber lediglich der Beschleunigung des Algorithmus dient. Statt, dass jedes Mal der gesamte KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR 46 Umkreis abgelaufen wird, werden acht gleich verteilte Punkte auf dem Umkreis, also Kreisrepräsentanten, abgelaufen. Man kann dann natürlich andererseits das Pech haben, dass genau an diesen Stellen hohe Zahlenwerte zu nden sind, aber kein Kreis. Das scheint bei dieser Anwendung aber keine groÿen Auswirkungen zu haben. Die Funktion setPupilCenterPoint_LLM() geht genau nach dieser hier be- schriebenen Methode vor. Um anstelle dem einen, sagen wir dem rechten Auge, das andere, also das linke Auge zu nden, muss lediglich der zu Anfang gesteckte Suchbereich anders gesetzt werden, und um ein besseres Ergebnis zu erzielen, ein anderes Bild als Suchmuster verwendet werden. Es ist nicht zwingend notwendig, dass jeder Benutzer Augenbilder abspeichert, aber es erzielt zuverlässigere Ergebnisse. Ein zusätzliches Problem kann durch die relativ niedrige Auösung der Kameras entstehen, zum Beispiel dann, wenn die Bildinformationen in dem normierten Pupillenbereichsbild so gering sind, dass sich das gesamte Auge nur noch als dunkler Farbeck abzeichnet. Wenn sich der Benutzer jedoch in einem angemessenen Abstand zum Bildschirm aufhält bereitet dies bisweilen keine Schwierigkeiten. Wenn es nicht dem Normalzustand entspricht, können stark verdrehte Augen Probleme beim Suchen des Auges anhand des Suchmusters bereiten. Da man aber in der Regel so auf den Bildschirm schaut, dass es angenehm ist, also ohne seltsame Verdrehungen, sollte dies zu keiner weiteren Einschränkung führen. Finden weiterer Punkte im Gesicht Auÿer den Pupillen müssen mindestens noch drei weitere Punkte im Gesicht gefunden werden. Diese Punkte dienen der Bestimmung der Kopfausrichtung des Benutzers. Die Ermittlung der genauen Position des Kopfes spielt eine wichtige Rolle bei der Bestimmung der Blickrichtung, da die Augenstellung immer auch von der Drehung und Neigung des Kopfes abhängt, welches leicht durch einen Blick in den Spiegel und bewegen des Kopfes nachvollzogen werden kann. 47 KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR Drei Punkte sind notwendig, da sie eine Ebene im Raum aufspannen aus der ein Koordinatensystem, welches im Folgenden als Gesichtskoordinatensystem bezeichnet wird, erstellt werden kann und für die Orientierung des Kopfes im Raum charakteristisch ist. Gesucht sind drei, immer wieder sehr genau bestimmbare Punkte im Gesicht, die sich auch bei einer Änderung der Mimik gar nicht oder nur kaum bewegen. Ich habe mich für die die Punkte: Nächster Punkt des Augenweiÿes beider Augen zur Nase und Hälfte der kürzesten Distanz zwischen den beiden Nasenlöchern entschieden. Diese Punkte sind zwar relative unbeweglich, jedoch ist momentan noch kein Algorithmus implementiert, der diese Punkte immer zuverlässig ndet. Mein Ansatz war es das Finden dieser drei Punkte durch das vorherige Finden der Pupillenmitten zu vereinfachen, indem die Länge und Orientierung der Gerade zwischen den beiden gefundenen Pupillenmitten, anatomische Hinweise zur Lokalisierung der gesuchten Punkte liefern würde. Da jedoch das Finden der Pupillenmitten noch nicht zuverlässig genug funktioniert, konnte darauf noch nicht zurück gegrien werden. Zumindest die Bestimmung des Nasenpunktes funktioniert recht gut, indem die Nasenlöcher zum Beispiel durch ein Template Matching gefunden werden können, worauf ein Bild erzeugt wirde, welches nur diese enthält, um das Bild dann zu binarisieren, Störungen zu entfernen, die Skelette der beiden Nasenlöcher zu bestimmen und eine Linie zweischen den beiden höchsten Punkten der Skelette zu ziehen, die halbiert wird, um den Nasenpunkt zu bekommen. Damit andere, von der Bestimmung dieser Gesichtspunkte abhängige Funktionen trotzdem erstellt und getestet werden konnten, wurden die X- und Y-Werte von jeweils den fünf Punkten: Augen und drei Gesichtspunkte, in 73 Stereo-Bildern von Hand notiert, welches 1460 Zahlenwerten entspricht. Berechnung der 3D-Punkte Die Berechnung der Position eines Objektes im Raum kann also durch ein Pixelpaar, mit je einem Pixel aus jedem Bild eines entzerrten StereoBildpaares, und den intrinsischen und extrinsischen Daten der verwendeten Kameras bestimmt werden. Genau dies leistet die Funktion stereo2World_LLM(). KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR 48 Sagen wir Sie haben zwei Kameras aufgestellt und kalibriert. Nun nehmen sie ein Blatt Papier machen in die Mitte ein Kreuz und halten es so vor die beiden Kameras, dass in beiden Bildern der Kameras nur das weiÿe Blatt und das Kreuz zu sehen ist. Sie machen eine Aufnahme von diesem Bildpaar und entzerren die Bilder wie im Abschnitt Bild-Entzerrung beschrieben. Wenn nun ein Algorithmus oder Sie selbst von Hand, in beiden Bildern jeweils die X- und Y-Position des Kreuzes bestimmt, können diese vier Werte an die oben genannte Funktion übergeben werden, welche berechnet wo sich das Kreuz auf dem Blatt im Raum befand und diese Position anhand eines dreidimensionalen Vektors zurück gibt. Für die Anwendung Augenmaus, ist es notwendig die 3D-Koordinaten der fünf Gesichtspunkte zu bestimmen. Also die Ortsvektoren der Pupillenmitte des linken und rechten Auges und der restlichen drei Punkte, die der Bestimmung der Kopforientierung dienen. Nachdem also die 2D-Positionen der fünf Punkte in jedem der beiden Bilder des Stereo-Bildpaares bestimmt wurden, werden sie paarweise, also linkes Auge aus Bild1 mit linkem Auge aus Bild2, rechtes Auge aus Bild1 mit rechtem Auge aus Bild2, und so weiter an diese Funktion übergeben, so dass am Ende nur noch fünf 3D-Positionen, im Folgenden als Gesichtsdaten bezeichnet, weiter verarbeitet werden müssen. 7.2.2 Gesichtsmodell erstellen Nachdem das Tracking die Gesichtsdaten erstellt hat, kann nun das Gesichtsmodell aufgebaut werden. Das Gesichtsmodell besteht aus einem Koordinatensystem welches die Orientierung des Kopfes im Raum wiedergibt, den Koordinaten der beiden Pupillenmittelpunkte und noch zwei Vektoren auf die ich später eingehen werde. Zunächst möchte ich eine in Abbildung 7.1 gezeigte Bezeichnung der Punkte einführen, damit die Schilderung im folgenden einfacher wird. Stellen Sie sich vor, Sie wären der Bildschirm und blickten direkt in das Gesicht des Benutzers, dann sähen Sie sein rechtes Auge auf der linken Seite, die Nase natürlich in der Mitte und sein linkes Auge wäre von Ihnen aus auf der rechten Seite. Die rechte Pupillenmitte des Benutzers, also die, die von Ihnen aus auf der linken Seite ist, bezeichne ich nun als silberner Punkt. Die linke Pupillenmitte des Benutzers, also die, die von Ihnen aus auf der rechten Seite ist, wird 49 KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR Abbildung 7.1: Merkmale im Gesicht. Diese Abbildung zeigt, wie die Bezeichnung der Merkmale gewählt wurde (von links nach rechts: silbern, grün, blau, rot, golden). als goldener bezeichnet. Der Punkt der im Augenweiÿ des rechten Auges des Benutzers, also von Ihnen aus auf der linken Seite beziehungsweise dem Auge, welches den Silber-Punkt enthält, am nächsten zur Nase hin liegt, wird mit der Farbe grün bezeichnet, sein gegenüber im Gold-Auge wird mit rot bezeichnet und der Nasenpunkt wird mit blau bezeichnet. Nochmal zur Kontrolle: Sie stellen sich das Gesicht des Benutzers vor, halten ein Blatt vor sein Gesicht, so dass es verdeckt ist. Nun ziehen sie das Blatt langsam nach rechts weg. Das erste Auge, welches Sie sehen ist silbern, dann kommt die Augeninnenseite mit Namen grün, dann kommt die Nase mit Namen blau, dann die Augeninnenseite des zweiten Auges mit Namen rot und zuletzt die Augenmitte des zweiten Auges mit Namen golden. Erstellen des Gesichtskoordinatensystems Das Gesichtskoordinatensystem wird nun auf folgende Weise erstellt: Die X-Koordinatenachse soll von grün nach rot zeigen, also wird der Ortsvektor von grün vom Ortsvektor von rot subtrahiert. Die vorläuge Y-Koordinatenaches verläuft von grün nach blau, also wird auch hier blau minus grün gerechnet. Die Z-Koordinate soll von grün ins Kopnnere verlaufen, also aus Sicht des Bildschirms auf den Benutzer, weg vom Bildschirm. Diese erzeugt man, indem man den Normalenvektor zur X-Achse und vorläugen Y-Achse bestimmt. Das Ergebnis des Vektorkreuzproduktes ist gegebenenfalls falsch orientiert welches an einem negativen Z-Wert erkennbar und durch Multiplikation mit minus eins behoben werden kann. KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR 50 Abbildung 7.2: Verwendete Koordinatensysteme. Diese Abbildung zeigt, welche Ausrichtung die Achsen aller verwendeten Koordinatensysteme grundsätzlich haben, wobei die Z-Achse jeweils als dünnere Linie dargestellt ist. Verwendet werden ein Weltkoordinatensystem (KS) (a), Kamera-KS (b), Bildschirm-KS (c) (der Bildschirm wird hier von hinten betrachtet) und Gesichts-KS(d). Nun ist die Z-Koordinatenachse orthogonal zur X-Koordinatenachse und zur vorläugen Y-Koordinatenachse, welches jedoch nicht zwischen X- und YAchse gilt, so dass noch eine neue Ausrichtung der Y-Achse erfolgt. Hierzu wird die Y-Koordinatenachse als Vektorkreuzprodukt der Z- und XAchse bestimmt, wobei wieder auf das Vorzeichen des Y-Wertes geachtet und gegebenenfalls mit minus eins multipliziert werden muss, um die Y-Achse richtig, also nach unten, auszurichten. Für die Wahl der Achsenausrichtung kann Abbildung 7.2 herangezogen werden. Eine Normierung der drei achsenrepräsentierenden Vektoren auf die Länge eins folgt ebenfalls. 7.2.3 Berechnung der Blickgeraden Was geschieht nun mit dem Gesichtskoordinatensystem? Zur Berechnung des Blickpunktes auf dem Bildschirm wird eine Gerade benötigt die im Folgenden mit Line of Sight oder als LOS bezeichnet wird und die Blickrichtung 51 KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR repräsentiert. Ähnlich zu Erde und Erdkern möchte ich den optische Augendrehpunkt als Augenkern oder Augkern bezeichnen. Die LOS soll konstruiert werden indem der Augkern, zum Beispiel der des silbernen Auges also der Silberkern, als Ortsvektor dient und sich der Richtungsvektor aus Silberpunkt minus Silberkern ergibt, wobei Silberpunkt den Ortsvektor der Pupillenmitte des silber- nen Auges bezeichnet. Das ist nicht ganz einfach, also nochmal rein theoretisch: Wir wandern vom Weltkoordinatenursprung zum Silberkern, so dass wir uns nun im inneren des rechten Auge des Benutzers benden, drehen uns um und iegen vom Silberkern durch den Silberpunkt in Richtung Bildschirm, bis wir mit ihm kollidieren und somit den Blickpunkt bestimmt haben. Eine weniger schöne jedoch anschaulichere Erläuterung bietet die folgende Darstellung. Stellen Sie sich vor der Benutzer hat einen Schaschlikspieÿ in seinem Auge stecken, der den Silberpunkt und Silberkern genau verbindet. Wenn der Benutzer nun hin und her schaut, zeigt der Schaschlikspieÿ immer in die Blickrichtung und ist somit mit der LOS identisch. Schön und gut, aber was hat das mit dem Gesichtskoordinatensystem zu tun? Unter der Annahme, dass es diesen relativ statischen Kern des Auges gibt, hängt dessen Position von der Orientierung des Kopfes ab. Wenn also der Vektor vom Gesichtskoordinatenursprung zum Silber- und Goldkern bekannt ist, welches die Benutzer-Registrierung geleistet haben sollte, kann man mit Hilfe des gerade bestimmten Gesichtskoordinatensystem die nötige Rotation der Kernvektoren bestimmen und vom Grünpunkt aus die Kerne erreichen. Die Berechnung verläuft demnach so: Bestimmen des Gesichtskoordinatensystems, laden der benutzerspezischen Vektoren der beiden Augkerne, Rotation dieser Vektoren, bestimmen der Ortsvektoren der LOS für das linke und rechte Auge, durch Addition von grün und rotiertem Kernvektor, erstellen der Richtungsvektoren durch Silberpunkt minus Ortsvektor-Silberkern für LOS1 beziehungsweise Goldpunkt minus Ortsvektor-Goldkern für LOS2. Theoretisch ist das ein recht einfach zu berechnender Ansatz. Praktisch jedoch hat sich bisher gezeigt, dass kleinste Abweichungen im Vorfeld, zum Beispiel eine minimale Verschiebung des blauen Punktes, zu sehr groÿen Abweichungen beim Bestimmen des Blickpunktes führt, welches suggeriert, dass man zukünftig vielleicht mehr als drei Punkte zur Bestimmung der Kopforientierung heranziehen sollte. KAPITEL 7. 7.2.4 MAUS-SYSTEM PRODUKT-STRUKTUR 52 Blickpunktberechnung - Berechnung des Schnittpunktes der Blickgeraden mit dem Bildschirm Da die Daten des Bildschirms von der Bildschirm-Lokalisierung in der Punkt-Richtungsform vorliegen, was auch für die LOS gilt, besteht das Problem zunächst darin, den Schnittpunkt einer Geraden mit einer Ebene im Raum zu bestimmen. Dies erfolgt indem wir die Geradengleichung und Ebenengleichung einander gleich setzen und erhalten somit ein dreizeiliges Gleichungssystem mit drei Unbekannten, welches folglich lösbar ist. Nachdem der Schnittpunkt mit Weltkoordinaten (X,Y,Z) in Millimetern bestimmt wurde, wird ein Vektor von der linken, oberen Ecke des Bildschirms, also dessen (Pixel-)Nullpunkt, zum eben ermittelten Schnittpunkt konstruiert, indem der Bildschirm-Nullpunkt von dem Schnittpunkt subtrahiert wird. Wenn der Bildschirm parallel zur X-Y-Ebene des Weltkoordinatensystems verliefe, könnte man nun die X- und Y-Komponente des Vektors bestimmen und hätte somit nach einer Umrechnung von Millimetern in Pixel, die Genaue X-Y-Position auf dem Bildschirm. Da der Bildschirm in unserem Fall jedoch schief zu den Ebenen des Weltkoordinatensystems verläuft, muss der Vektor vorher noch mittels Bildschirmkoordinatensystem rotiert werden. Nachdem der Vektor rotiert und in einen X- und Y-Vektor geteilt wurde, können die Längen der Teilvektoren bestimmt werden. Die Längen in Millimeter, werden daraufhin noch in Pixel umgerechnet, indem man sie mit einem Skalierfaktor, der sich zum Beispiel für die X-Richtung durch die Division von Bildschirmbreite in Pixel durch Bildschirmbreite in Millimeter ergibt, multipliziert. Das Gelingen dieser Berechnung hängt maÿgeblich von der Qualität der Bildschirm-Lokalisierung und somit von der Richtigkeit der Bildschirmebene, der korrekten Breiten und Höhen des Bildschirms in Pixel und Millimetern ab. 7.2.5 Mauszeiger-Positionierung Nach der Bestimmung des Blickpunktes ist die Mauszeiger-Positionierung ein leichtes Unterfangen. Der Befehl SetCursorPos(10,758);, für x=10 und 53 KAPITEL 7. y=758, mit vorherigem MAUS-SYSTEM PRODUKT-STRUKTUR #include <iostream> und #include <windows.h> bewerkstelligt dies unter Windows. 7.3 Bildschirm-Lokalisierung Die Notwendigkeit einer Bildschirm-Lokalisierung steht auÿer Frage. Für die Berechnung des Blickpunktes, muss bekannt sein, wo sich die Bildschirmäche bendet. Dies heraus zu nden gestaltet sich komplizierter als man vielleicht denken mag. Das Hauptproblem besteht darin, dass der Bildschirm sich nicht im Sichtfeld der Kameras bendet und somit nicht direkt ermittelt werden kann, wo er sich in Bezug auf das Weltkoordinatensystem bendet. Die Orientierung des Bildschirms kann also nur indirekt ermittelt werden. Um dieses zu bewerkstelligen, kann zum Beispiel ein Spiegel herangezogen werden. Er wird so aufgestellt, dass die Kameras den Bildschirm im Spiegel sehen, während sie gleichzeitig auf den Spiegel aufgebrachte Markierungen erkennen und man somit weiÿ, wo sich die Spiegelebene bendet. Diese verfahren wurde angewendet, wurde aber insgesamt als zu komplex empfunden, so dass nach einem sowohl mathematisch als auch methodisch einfacheren Verfahren gesucht wurde. Ich habe ein Verfahren gesucht, welches, ausgehend von dem bestehenden Hardwareaufbau, mit alltäglichen Materialien zurecht kommt und welches im Folgenden beschrieben wird. 7.3.1 Lokalisierungsvorrichtung Basteln In Abbildung 7.3 sind einige Zwischenschritte der Beschreibung abgebildet. Es wird versucht mit alltäglichen Gegenständen und Materialien einen Ortsvektor und Normalenvektor als Repräsentanten der Bildschirmebene zu nden. Bei Normalenvektoren spielen auf jeden Fall rechte Winkel eine Rolle und der einzige Büroartikel, der garantiert einen rechten Winkel hat ist das Geodreieck, zumindest solange dieses neuwertig ist. Zudem benötigen wir ein normales Lineal, einen Stift, zwei DIN A4 Blätter und Kleber oder einen Heftgerät. KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR 54 Mit dem Lineal markieren wir zunächst die Mitte des Bildschirms am unteren Rand, wobei es darum geht sehr genau die Mitte zu bestimmen. Abbildung 7.3(a) zeigt, dass dieses gar nicht so einfach ist an den Kameras vorbei zu kommen. Jetzt nehmen wir eines der beiden DIN A4 Blätter und legen es quer vor uns auf den Tisch. Das Geodreieck wird ungefähr mittig mit der langen Seite an den unteren Blattrand gelegt. Danach ziehen wir mit dem Stift eine Linie um das Geodreieck. Mit dem Lineal verlängern wir die Linien von den kurzen Geodreieckseiten. Kariertes Papier kann hier sinnvoll sein, damit die Linien auch exakt weitergeführt werden können. Wie das ungefähr aussieht zeigt Abbildung 7.3(b). Abbildung 7.3(c) zeigt, dass die Verbindungsgeraden C und D gezogen werden sollen und eine Lasche E angezeichnet werden soll. Nach dem die Figur besonders an der Kante A sorgfältig ausgeschnitten wurde, müssen alle Kanten gerade und kräftig vorgefaltet werden, am besten mit dem Lineal. Danach kann das Papier wie in Abbildung 7.3(d) zusammengeklebt oder -geheftet werden. Das Geodreieck passt nun genau auf die Grundäche der Konstruktion und dient später der Stabilisierung des Ganzen. Das würde eigentlich schon reichen, aber das Blatt ist nicht lang genug. Es wird von den beiden Kameras noch nicht gesehen. Also nehmen wir ein zweites DIN A4 Blatt und falten es der Länge nach in die Hälfte. Auch hier ist eine saubere Kante gefragt. Anschlieÿend befestigen wir das Blatt an unserer Konstruktion so, dass die ganze Konstruktion, wie in Abbildung 7.3(e), eine Höhe von genau einem DIN A4 Blatt hat. Die Seiten können vorsichtig, durch Schneiden, verkleinert werden, welches das Gewicht der Konstruktion verringert. Zusätzlich werden noch zwei Markierungen gesetzt: G und F, wobei die Distanz zwischen den beiden ungefähr 7 cm betragen sollte. So, das Basteln wäre somit erledigt! 7.3.2 Stereo-Bilder der Konstruktion erstellen Die Konstruktion mit dem Geodreieck wird nun, wie in Abbildung 7.3(f ), so an den Bildschirm gehalten, dass sie wie ein Dach für die Kameras ist, mit der langen Seite des Geodreiecks auf der unteren Kante des Bildschirms und 55 KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR der Nullmarkierung genau auf der vorher mittig angebrachten Markierung am Bildschirm. So fest gehalten wird ein Stereo-Bild aufgenommen. Danach soll direkt noch ein Stereo-Bild aufgenommen werden, diesmal jedoch wird die Konstruktion um 1 cm nach rechts verschoben, welches auf Grund der Linealeinzeichnungen am Geodreick leicht zu bewerkstelligen ist. Die aufgenommenen Bilder müssen mit den intrinsischen und extrinsischen Kameraparametern entzerrt werden. Die Abbildungen 7.3(g) und 7.3(h) zeigen nun ein aufgenommenes StereoBild, einmal aus der Perspektive von Kamera 2 (Abbildung 7.3(g)) und einmal aus der Perspektive von Kamera 1 (Abbildung 7.3(h)), wobei alles unwesentliche ausgeblendet wurde. Wichtig ist nur, dass man die Markierungen F und G deutlich erkennt. Die X- und Y-Koordinaten der G und F Markierungen in allen vier Bildern müssen nun ermittelt werden. Am schnellsten geht dies von Hand im Programm Paint von Windows. Einfach das Bild önen, reinzoomen, das Rechtecksauswahl-Werkzeug wählen und mit dem Mauszeiger über die Pixel fahren, die aktuelle Position steht unten rechts in der Statusleiste. 7.3.3 Berechnen der Bildschirmdaten Wenn alle vorangegangenen Schritte richtig ausgeführt wurden, lassen sich die Bildschirmdaten nun auf folgende Weise berechnen: Aus dem Bildkoordinaten der beiden Stereo-Bilder werden mittels der Funktion stereo2World_LLM() die 3D-Koordinaten der F und G Markierun- gen berechnet. Aus der ersten Stereo-Bild wird eine Gerade erstellt, indem F als Ortsvektor fungiert und G minus F als Richtungsvektor. Die Länge der Geraden soll genau der Höhe eines DIN A4 Blattes entsprechen. Wurde das durchgeführt, dann erhalten wir den ersten Ortsvektor der Ebene durch die Addition des Vektors F und den auf die DIN A4 Höhe skalierten Richtungsvektor. Der Richtungsvektor dient gleichzeitig als Normalenvektor der Ebene. Für das zweite Stereo-Bild wiederholt, erhalten wir einen Zweiten Ortsvektor in die Bildschirmebene. Wir erhalten die X-Koordinatenachse des Bildschirms, indem wir den zweiten Ortsvektor vom ersten Ortsvektor in die Ebene subtrahieren. KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR 56 Die Y-Koordinatenachse des Bildschirms erhalten wir aus dem Vektorkreuzprodukt von X-Achse und Normalenvektor, die Z-Achse entspricht dem Normalenvektor. Fehlen nur noch Breite und Höhe des Bildschirms in Millimetern und die Angaben zur Auösung. Breite und Höhe kann man schnell Messen, die Auflösung sollte man kennen oder auf dem Desktop mit schaften Rechtsklick -> Eigen- nachschauen. Bleibt noch die Bestimmung des Bildschirm-Nullpunkt-Vektors, also des tatsächlichen Ortsvektors des Bildschirm. Dies ist auf Grund der nun bekannten Gröÿen wie folgt zu erreichen: erster Ortsvektor addiert mit auf halbe Bildschirmbreite skalierter X-Achsen-Vektor addiert mit auf Bildschirmhöhe minus Geodreieckhöhe skalierter Y-Achsen-Vektor. Das Ergebnis ist die Bildschirmebene in Punkt-Richtungsform, der Normalenvektor und die Angaben zur Höhe und Breite jeweils in den Einheiten Millimeter und Pixel. 7.4 Benutzer-Registrierung Bei der Benutzer-Registrierung geht es darum, die benutzerspezischen Charakteristiken fest zu halten. Dies ist, je nach Verfahren, unter anderem das speichern von Bildern von den Augen des Benutzers, oder der Nase, falls Template Matching-Verfahren eingesetzt werden sollen. Viel wichtiger jedoch sind zwei benutzerspezische Vektoren, die, Abhängig vom Gesichtskoordinatensystem, auf den Kern des rechten Auges des Benutzers (Silberkern) oder auf den Kern des linken Auges des Benutzers (Goldkern) zeigen. Um dies zu ermitteln, gibt es auch hier mehrere Ansätze. Ein Benutzer kann zum Beispiel mehrere Stereo-Bilder von sich machen, während er seinen Kopf still hält, aber am Bildschirm ihm Bekannte Punkte anschaut, zum Beispiel die Eckpunkte des Bildschirms. Da bekannt ist wo sich der Bildschirm im Raum bendet, können, unter der Annahme, dass sich alle LOS im einem relativ zum Kopf recht statischen Punkt, dem so genannten optischen Augendrehpunkt, LOS (Blickgeraden) von den bekannten Punkten auf dem Bildschirm durch die Pupillenmitte konstruiert werden. Mehrere solcher Geraden schneiden sich dann theoretisch im gesuchten Augenkern. 57 KAPITEL 7. 7.4.1 MAUS-SYSTEM PRODUKT-STRUKTUR Einfache Benutzer-Registrierung Auch hier lässt sich das Verfahren vereinfachen. Es werden lediglich zwei Bilder des Benutzers benötigt, jedoch müssen diese von sehr hoher Qualität sein und die Gesichtsdaten möglichst genau von Hand notiert werden. Der Blickpunkt sei bekannt. Für das erste Bild wird eine LOS erstellt. Für das zweite Bild die LOS des ersten Bildes in einem zulässigen Bereich abgelaufen und jedes mal eine LOS erstellt, deren Schnittpunkt mit der Bildschirmebene bestimmt wird. Es wird die Position auf der ersten LOS gewählt, deren Schnittpunkt am wenigsten von dem Bekannten Blickpunkt abweicht. Unter Umständen könnte man den Kopf bei der Aufnahme der zwei StereoBilder xieren, obwohl das gegen die Benutzerfreundlichkeitsprinzipien dieses Augenmaus-Systems sprechen würde. 7.5 Visualisierung Die Visualisierung ist ein erst ansatzweise implementierter Teil der AugenmausSoftware, die all diese wilden Berechnungen im Hintergrund sichtbar machen soll. Die Szene bestehend aus Bildschirm, Kameras und Benutzer, mit den zur Laufzeit bestimmten Orientierungen, LOS und Blickpunkten, soll dabei aus einer beliebig positionierbaren ktiven Kamera betrachtet werden können. Man kann das Ganze also von der linken Seite, von der rechten Seite, von oben oder von vorne betrachten, woher man auch immer gerade den besten Blickwinkel haben mag. 7.6 Konguration der Software Beim Kongurationsteil der Software handelt es sich momentan um einen konzeptionellen Teil der Maus-Software. Hier geht es darum, dass der Benutzer Einstellungen vornehmen kann, die die Umgebung der Anwendung betreen, wie zum Beispiel Helligkeitswerte. Aber auch banale Dinge, wie ob der Benutzer möchte, dass die Software mit dem Betriebssystem startet oder nicht. KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR 58 7.7 Hilfe-System Auch beim Hilfe-System der Benutzeroberäche handelt es sich um ein Konzept, da es die Benutzeroberäche, so wie sie entworfen wurde, noch nicht gibt. Es soll, wenn es eingeschaltet ist, dem Benutzer bei auftretenden Problemen mit der Software unter die Arme greifen, zum Beispiel darauf hinweisen, wenn eine Kamera nicht funktioniert, oder die Beleuchtung zu schwach ist. 7.8 Software-Update Und nun sind wir hoentlich beim letzten konzeptionellen Teil der Software angelangt: Es soll eine Update-Komponente entwickelt werden, die bei Bedarf durch den Benutzer ausgeführt werden kann, worauf sie auf einem Remote-Server anfragt, ob neuere Programmdateien vorhanden sind, die gegebenenfalls herungergeladen und automatisch installiert werden können. 59 KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR (a) Mitte markieren (b) Linien ziehen (c) Verbinden (d) Zusammenfügen (e) Verlängern (f ) An Mitte positionieren (g) Sicht Kamera 2 (h) Sicht Kamera 1 Bildschirm-Lokalisierung. Diese Abbildung zeigt Zwischenschritte beim Erstellen (a-e) einer Vorrichtung, mit anschlieÿender Aufnahme von Stereo-Bildern (f-h) für die Bildschirm-Lokalisierung. Abbildung 7.3: KAPITEL 7. MAUS-SYSTEM PRODUKT-STRUKTUR 60 Kapitel 8 Referenzteil Nach zahllosen Hilfs- und Testfunktionen, wurden alle Funktionen, die eine bestimmte Häugkeit in der Wiederverwendung aufwiesen und auf ihre Richtigkeit hin überprüft werden konnten, in einer einzigen C++ Hea- augenmaus.h zusammengefasst und ausführlich auf Deutsch und in Englisch mit Hilfe von dokumentiert. Dies soll es ermöglichen, dass derdatei Doxygen die Funktionen einfach nachvollzogen und angewendet werden können. Der Funktionsumfang wird erweitert, sobald eine zusätzlich notwendige Funktion erstellt und getestet wurde. Ich möchte Ihnen, lieber Leser, an dieser Stelle empfehlen sich den Referenzteil im Internet unter http://eyebachelor.googlecode.com/files/AugenmausHilfe_deutsch.chm, in Form einer Kompilierten-HTML-Hilfedatei anzusehen. Dort gibt es Querverweise, kleine Graken und ein übersichtliches Format. Um das gerade erwähnte Format nicht zu verändern und dieses Dokument nicht unnötig aufzublähen, wurde darauf verzichtet den Referenzteil hier aufzuführen. 61 KAPITEL 8. REFERENZTEIL 62 Kapitel 9 Untersuchungen zur Eektivität ausgewählter Funktionen Es soll nun auf die Ergebnisse einzelner, zentraler Funktionen eingegangen werden, um eine Aussage über deren Eektivität machen zu können. 9.1 Eektivität von setPupilCenterPoint_LLM() setPupilCenterPoint_LLM(), wurde das gesuchte Merkmal Pupillenmitte des rechten Auges des Benutzers Zur Untersuchung der Eektivität der Funktion in 73 Stereo-Bilder von Hand markiert. Anschlieÿend wurde die Funktion auf den 73 Stereo-Bildern ausgeführt und dabei die Abweichung von der handnotierten Position in einem Graph festgehalten (Abbildung 9.1 links). Hierbei wurde die Soll-Position, also die von Hand notierte, mittig als grünes Kreuz gesetzt und die jeweilige Ist-Position, in rot, mit der jeweiligen Abweichung platziert. Abbildung 9.1 rechts zeigt, wie oft die jeweilige Position dabei getroen wurde. Die Soll-Position, wurde zum Beispiel kein einziges Mal getroen. Angesichts dieses Ergebnisses, lässt sich deutlich feststellen, dass diese Funktion der Anforderung, die exakte Mitte einer Pupille zu nden, nicht gerecht wird. Allerdings wurde festgestellt, dass die Funktion bis zum Finden des Auges, mittels Template Matching, zuverlässig funktioniert. Abbildung 9.2 zeigt den typischen Fall. Im gleichen Bild wird nochmals deutlich, dass die Pupillenmitte zu nden recht schlecht abschneidet. 63 KAPITEL 9. UNTERSUCHUNGEN ZUR EFFEKTIVITÄT AUSGEWÄHLTER FUNKTIONEN Abbildung 9.1: setPupilCenterPoint_LLM() 64 Vergleich. Diese Abbil- dung zeigt, auf der linken Seite die Soll-Position (von Hand notiert) in grün und Ist-Positionen (Ergebnis der Funktion) in rot und auf der rechten Seite, wie die 73 berechneten Positionen verteilt sind. Auge nden mittels Template Matching. Diese Abbildung zeigt, ein typisches Ergebnis der setPupilCenterPoint_LLM() Funktion: Das Auge wird gut gefunden, die gefundene Pupillenmitte ist unbrauchbar. Abbildung 9.2: KAPITEL 9. 65 UNTERSUCHUNGEN ZUR EFFEKTIVITÄT AUSGEWÄHLTER FUNKTIONEN 9.2 Eektivität der Augenmaus mit handnotierten Daten Hier soll eine Aussage über die Eektivität der bestehenden Augenmaus gemacht werden. Da das Tracking und insbesondere das Finden der Pupillenmitten nicht ausreichend gut funktioniert, wurden die gesuchten fünf Gesichtsmerkmale in 73 Stereo-Bilder, zusammen mit den jeweils betrachteten Bildschirmpositionen, von Hand notiert. Nach der Durchführung aller für die Augenmaus notwendigen Kalibrierungen, Lokalisierungen und Registrierungen, wurden die berechneten Werte eingesetzt um für die 73 Stereo-Bilder den Blickpunkt und somit die MauszeigerPosition auf dem Bildschirm zu berechnen, wobei das Ergebnis in einem Graphen ins Verhältnis zur tatsächlichen Blickpunkt-Position gebracht wurde. Das ernüchternd, aber nicht mehr überraschend schlechte Ergebnis wird in Abbildung 9.3 dargestellt. Der Grund für dieses schlechte Ergebnis - in Abbildung 9.3(b) trit nicht einer der 73 Blickpunkte in den Bildschirmbereich - ist vor allem darauf zurück zu führen, dass es durchweg misslingt vernünftige Blickgerade aufzubauen. Bei den drei Gesichtsmerkmalen, die die Gesichtsebene aufspannen, braucht nur ein Merkmal minimal anders berechnet werden, schon verschieben sich die Vektoren der Augkerne, was auf die Blickgeraden einen unbrauchbarmachenden Einuss hat. KAPITEL 9. UNTERSUCHUNGEN ZUR EFFEKTIVITÄT AUSGEWÄHLTER FUNKTIONEN 66 (a) Blickpunkte für das rechte Auge (b) Blickpunkte für das linke Auge (c) Blickpunkte als arithmetisches Mittel beider Augen Blickpunktbestimmung. Diese Abbildung zeigt den Ergebnisgraphen des Vergleichs zwischen Soll-Blickpunkt und Ist-Blickpunkt, für das rechte (a) und linke (b) Auge und dem arithmetisches Mittel (c) beider Augen. Der Bildschirm ist dabei als Rechteck eingezeichnet. Ein gutes Ergebnis würde in allen drei Bildern 73 rote Punkte in der Nähe des Mittelpunktes aufweisen. Abbildung 9.3: Kapitel 10 FAQ Hier sollen zukünftige Fragen und deren Antworten, die auch für andere Leser interessant sein könnten festgehalten werden. 10.1 Allgemeine Fragen Sind die im Rahmen dieser Bachelor-Arbeit entstandenen Artefakte inkl. des Codes frei verfügbar? - Dieses Projekt ist unter der GNU General Public License v3 veröentlicht, dass heiÿt sie ist frei verfügbar wie MySQL, GCC, GIMP, et cetera. 67 KAPITEL 10. FAQ 68 Kapitel 11 Internetquellen 11.1 Augenmaus-System Augenmaus Blog (Deutsch, Englisch) http://eyebachelor.wordpress.com/ Aktuelle Augenmaus Dateien, Dokumentation, et cetera (Deutsch, Englisch) http://code.google.com/p/eyebachelor/ 11.2 Kamera-Kalibrierung Camera Calibration Tools (Englisch) http://www.doc.ic.ac.uk/%7Edvs/calib/main.html Usefull Links and Theory (Englisch) http://www.vision.caltech.edu/bouguetj/calib_doc 11.3 OpenCV Online OpenCV Library (Englisch) http://opencvlibrary.sourceforge.net OpenCV Yahoo Group (Englisch) http://groups.yahoo.com/group/OpenCV 69 KAPITEL 11. INTERNETQUELLEN 70 11.4 Nützliches Ermöglicht Suche nach OpenCV Funktionen mit Einblick (Englisch) http://www.koders.com Mathematik des Kamera Modells verständlich erklärt (Englisch) (Quelle der Abbildung 7.2) http://www.nowpublishers.com/product.aspx?product= CGV&doi=0600000001§ion=xintroduction Mehr über Epipolargeometrie, et cetera (Englisch) http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/ LECT10/node3.html Kapitel 12 Schlusswort Die Untersuchungen haben gezeigt, dass der gegebene Aufbau nicht einmal für handnotierte Daten ausreicht, um den Blickpunkt zu berechnen und die Mauszeiger-Positionierung somit fehlschlägt. Groÿer Nachholbedarf, abgesehen von der graphischen Benutzeroberäche, besteht bei der Implementierung eines funktionierenden Trackings. Gegebenenfalls müssen hochauösendere Kameras verwendet werden damit die 3D-Koordinaten genauer bestimmt werden können, sowie eine ausgefeiltere Kopfrepräsentation konzipiert werden damit sie nicht so sehr von einem einzelnen Merkmal abhängig ist. Die Benutzer-Registrierung könnte zudem Anfangs einmalig statisch von einer separaten Kamera durchgeführt werden, um bessere Vektoren zu den jeweiligen optischen Augendrehpunkten zu generieren. Wenn sich herausstellt, dass die Varianz in den Positionen der optischen Augendrehpunkte einen zu hohen Einuss auf das Ergebnis hat, muss unter Umständen ein grundsätzlich anderer Ansatz in Erwägung gezogen werden, der eventuell weg von LOS-Vektoren geht... ...mir fällt da gerade was ein ;-) Vielen Dank, für Ihr entgegengebrachtes Interesse! 71 KAPITEL 12. SCHLUSSWORT 72 Kapitel 13 Glossar Augenmaus - Die Soft- und Hardware, die es dem Benutzer ermöglicht den Mauszeiger mit dem Blick zu steuern. LOS - Line of Sight (Blickgerade). Maus-System - Die Soft- und Hardware, die es dem Benutzer ermöglicht den Mauszeiger mit dem Blick zu steuern und jene, die eine Kalibrierung und/oder Konguration des Ganzen ermöglicht. Stereo-Bild - Das sind zwei Bilder der gleichen Szene, zur gleichen Zeit, aber aus einer zu einander leicht verschobenen Perspektive. Stereo-Kamera - Ist der Apparat, der es ermöglicht Stereo-Bilder aufzunehmen, in unserem Fall bestehend aus zwei Web-Kameras, die unter einander fest montiert sind. 73 KAPITEL 13. GLOSSAR 74 Kapitel 14 Erklärung Ich erkläre, dass das Thema dieser Arbeit nicht identisch ist mit dem Thema einer von mir bereits für ein anderes Examen eingereichten Arbeit. Ich erkläre weiterhin, dass ich die Arbeit nicht bereits an einer anderen Hochschule zur Erlangung eines akademischen Grades eingereicht habe. Ich versichere, dass ich die Arbeit selbständig verfasst und keine anderen als die angegebenen Quellen benutzt habe. Die Stellen der Arbeit, die anderen Werken dem Wortlaut oder dem Sinn nach entnommen sind, habe ich unter Angabe der Quellen der Entlehnung kenntlich gemacht. Dies gilt sinngemäÿ auch für gelieferte Zeichnungen, Skizzen und bildliche Darstellungen und dergleichen. Ort, Datum Unterschrift 75 Index Auswertung Augenmaus-System Eektivität, 65 Hardware selbst zusammenbauen, 11 Kamera-Kalibrierung, siehe Stereo-Kamera- Kalibrierung Software Bezugsquelle, 69 Dokumentation, 61 Struktur im Detail, 39 Stereo-Kamera-Kalibrierung Methode, 39 Schritt-für-Schritt-Anleitung, 18 Tracking Ablauf im Detail, 40 Eektivität, 63 76 Literaturverzeichnis [1] Z. Zhang, A exible new technique for camera calibration. IEEE Transac- tions on Pattern Analysis and Machine Intelligence, vol. 22, no. 11, pp. 1330-1334, 2000. Flexible Camera Calibration By Viewing a Plane From Unknown Orientations. International Conference on Computer Vision (IC- [2] Z. Zhang, CV'99), Corfu, Greece, pp. 666-673, 1999. [3] W. Burger, M.J. Burge, Digitale Bildverarbeitung. Springer-Verlag, Ber- lin, Heidelberg, 2. Auage, 2006. 77