Gestensteuerung Pacman

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Gestensteuerung eines Pacman Spieles

Zielsetzung

Ziel des Projektes, ist es einen halbdurchlässigen Spiegel mit einem Bildschirm dahinter (MagicMirror) in Betrieb zu nehmen und das Programm, welches über den Bildschirm ausgegeben wird mit Gesten zu steuern. Als Programmbeispiel wurde eine Pacman Implementierung auf Basis von OpenFrameworks verwendet. Als Mögliche Erweiterung wurde die Ansteuerung des MagicMirror Frameworks MagicMirror2 in Betracht gezogen.

Komponenten

Die Beziehungen unter den verwendeten Hardware-Komponenten sind im untenstehenden Bild dargestellt.

Systembild.png

Implementierung der Bewegungserkennung

Die Implementierung der Bewegungserkennung ist im unten stehenden Aktivitätsdiagramm illustriert. Die wichtigsten Schritte hier noch einmal genau erklärt:

Nachdem das Bild von der Kamera bezogen wurde und die Umwandlung in Graustufen gemacht wurde, wird jeweils eine Region of Interest (ROI) Links und Rechts im Bild definiert. Hier findet dann die Bewegungserkennung auf der jeweiligen Seite durchgeführt. Als nächstes wird das aktuelle Bild vom vorherigen abgezogen. Im Differenzbild sind deshalb nur Veränderungen vom vorherigen zum aktuellen Bild zu sehen also die Bewegungen. Nach der Binarisierung werden die veränderten Pixel gezählt und bei Überschreitung eines Grenzwertes (moveThreshold) der optische Schwerpunkt des Differenzbildes berechnet (siehe Funktion calcCenter(..) in der Datei ofApp.cpp). Über den moveThreshold kann die Empfindlichkeit der Erkennung eingestellt werden. Je höher dieser Wert, desto mehr Änderung muss in dem Bild statt finden, die Bewegung muss schneller werden. Der letzte Schritt der Bildverarbeitung besteht darin, die y-Koordinate des aktuell berechneten Schwerpunktes des Differenzbildes mit der des vorherigen Bildes zu Vergleichen. Überschreitet diese Differenz den posThreshold, so wird eine Bewegung erkannt und per OSC an die Implementierung des Pacman Spieles gesendet. Alternativ zum Pacman Spiel könnte auch die Steuerung der MagicMirror App angesteuert werden, sofern es gelingt, OSC Signale in JavaScript zu verarbeiten (MagicMirror2 Apps sind in JavaScript geschrieben). Als letzter Schritt werden die berechneten Daten des aktuellen Bildes als vorheriges Bild gespeichert, damit im nächsten Durchlauf wieder ein Vergleichsbild zur Verfügung steht. Gestenerkennung.png

Implementierung der Kommunikation

Die Kommunikation zwischen der Gestenerkennung und Anwendung geschieht mit Hilfe von Open Sound Control (OSC). Dieses ursprünglich für Audiodaten entwickelte Protokoll arbeitet auf der Grundlage von TCP/IP. Somit gibt es eine Sender Seite und eine Empfänger Seite. In der Setup Funktion der OF Anwendung müssen Sender und Empfänger mit der gewünschten IP-Adresse und dem richtigen Port initialisiert werden. Wenn in der Gestenerkennung eine Geste erkannt wurde, so kann die entsprechende Nachricht mit Hile der Funktion sendMessage(...) an die Anwendung gesendet werden. Auf der Anwendungsseite wird dann mittels Polling in der Update Funktion auf den Empfang einer Nachricht geprüft und die entsprechende Reaktion getätigt.

Implementierung der Anwendung

Das User Interface baut sich aus einem leicht abgeändertem Pacman Spiel zusammen. Man hat die Möglichkeit den Schwierigkeitsgrad zu wählen und die Option entweder einen normalen Pacman oder über eine Gesichtserkennung das eigene Gesicht als Pacman zu steuern. Die Steuerung von dieser Pacman Version ist über Gestensteuerung verwirklicht und basiert auf einer reinen Links Rechts Steuerung, welche immer aus der Blickrichtung des Pacmans agiert.

Für das UI wurde eine bereits vorhandene Pacman Version genommen, welche aber über WASD (Pfeiltasten Anordnung auf den Tasten WASD) gesteuert wird. Diese wurde auf eine Links/Rechts Steuerung angepasst um sie an die Bewegungserkennung anzupassen. Für das Ersetzen des Pacman Icons mit dem eigenen Gesicht, wird über die OpenFrameworks Erweiterung OpenCV eine Haar Kaskade zum Erkennen des Gesichtes verwendet.

Ausblick

Die Gestensteuerung kann prinzipiell auch zur Steuerung von anderen Anwendungen genutzt werden. Gerade der Einsatz in einem MagicMirror erscheint sinnvoll, da es schwierig ist in einem Spiegel z.B. Multitouch oder ein kapazitives Touch-System zu implementieren. Darüber hinaus wäre es sehr ungewohnt, einen Spiegel als Touchscreen zu nutzen. Der Schlüssel zur einfachen Nutzung auf einem MagicMirror ist die Verarbeitung von OSC Nachrichten in JavaScript, da das für diesen Einsatz etablierte Framework MagicMirror2 in JS implementiert ist.

Implementierung

Download des Eclipse-Projektes