Human Gesture Control (HGC)

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Diese Dokumentation beschreibt Idee und Umsetzung von Human Gesture Control, das im Wintersemester 2011 im Rahmen des Interaktionspraktikums entstanden ist.

Das Ziel war es, eine interaktive Spielesteuerung zu verwirklichen.


Ideen 

Durch Brainstorming und Diskussion standen am Anfang unseres Praktikums vier wichtige Ideen:

Idee 1 - Half-Star-Mine

Mischungen aus Mine Craft, Half Life 2 und Star Wars mit denen man mit den Kisten oder anderen Objekten in einem Raum interagieren kann.

Die Gesten aus dem Star Wars Spiel würden mit Physik aus Half Life 2 und Mine Craft gepaart. Hier enstand die Idee, den Hammer Editor zum Erstellen eigener Spielszenarien einzubauen. 


Idee 2 - Interaktives Brettspiel 

Die Spielfläche wird durch den Projektor auf einen Tisch projiziert. Die Gesten wie zum Beispiel ‚Faust schütteln‘ wird als würfeln erkannt und die Würfel wird auf die Spielfläche eingeblendet.

Die Spielfigur wird automatisch um die Schritte weitergeleitet und g Ereigniskarten oder ähnliches direkt eingeblendet. Die Erkennung der Hand des Spielers erfolgt durch einen farbigen Handschuh.


Idee 3 - Ohmfinder

Basierend auf einem aktuellen Smartphone, bekommt die App das Videosignal von der Kamera und wird direkt auf den Bildschirm interpretiert.

Die Funktionen wären unter anderem
Ohm-Finder.png
  • Bilderkennung der Gebäude
  • Automatischer Start der Routenführung zum vorher eingegebenen Zielort
  • Lageplan abrufbar
  • Erkennung der Koordinaten zum Auffinden von Gebäuden über GPS
  • Erkennung von Position und Stockwerk im Gebäude über OhmNet

 

Idee 4 - Vollständige Steuerung eines HTPC

Die Idee war es, einen HTPC vom Sofa aus über eine Gestensteuerung fernzusteuern. Hierbei sollte in statische Gesten für Stop, Play, Pause und Stumm und bewegte Gesten für die Eingabe von Buchstaben o.ä. unterschieden werden.

  • Steuerung des Mauszeigers mit dem Zeigefinger mittels einer Webcam
  • Gesten für Standard-Funktionen wie „Play“ und „Pause“
  • Verfügt über Gesten zum Klicken und Scrollen
  • Unterstützt die Erkennung weiterer komplexer (bewegter) Gesten
  • Durch spezielle Geste kann Umschaltung in den Maus-Modus erfolgen und zurück.


Die realisierbare Idee

Die meiste Ideen sind zwar realisierbar aber fordern eine enorme Zeitdauer und sind deswegen im Rahmen der zwei Semesterwochenstunden nicht zu schaffen. Zuletzt haben wir uns dann geeinigt, dem Projekt das Ziel zu setzen, dass die Gestenerkennung optimal funktioniert und danach ein Programm auf die Gestensteuerung auszusetzen.


  • Erkennung weniger (statischer oder bewegter) Gesten in Eyesweb
  • Senden via OCS an „gesture_detection_OSC“ (in C++) oder den Hammer Editor
  • Steuerung weniger Funktion der Spielwelt vom Hammer Editor
  • Steuerung der Standardfunktionen eines Mediaplayers mithilfe des „gesture_detection_OSC“


Programme für Realisierung

  • Eyesweb XMI
  • Eyesweb 3.X.X
  • Hammer-Editor
  • Visual Studios 2008 (C++)
  • Open Frameworks(OSC)

Zur einheitlichen Bereitstellung der Daten wird das OSC Protokoll verwendet. Dies wird entweder direkt von dem verwendeten Programm unterstützt oder z.B. durch eine zusätzliche Library ermöglicht.

Das Ergebnis 


Verarbeitung der Videodaten über Farbsegmentierung 

Die Bestimmung der zu verarbeitenden Koordinaten wird über eine Farbselektion in Eyesweb gemacht. Hierzu wird das Kamerabild in den HSV Farbraum überführt und dann der "Hue" und der "Saturation"-Wert durch unterschiedliche Grenzwerte binarisiert. Über die beiden oberen Slider lassen sich die Hue-Werte, also die jeweiligen Farbwerte, nach unten und nach oben hin begrenzen. Der dritte Slider in der Mitte begrenzt den Sättigungswert. Diese binarisierten Bilder werden nun wieder zusammengefasst und mit dem Kamerabild zusammengelegt. Hieraus folgt, dass im Bild nurnoch Bildanteile angezeigt werden, die durch die 3 Slider im Patch herausgefiltert wurden. Für diese restlichen Werte wird nun eine Schwerpunktbestimmung durchgeführt und die Schwerpunkte über OSC herausgeschickt.Gleichzeitig wird der jeweilige Wert im Bild durch ein Kreuz, und die letzten 10 Werte über eine Linie im Bild live eingeblendet.


Eyesweb-Patch.png


Der fertige Eyesweb-Patch kann hier heruntergeladen werden: HGC.eyw


Versand der Koordinaten über OSC 

Die durch die Farbsegmentierung und Schwerpunktbestimmung erhaltenen Koordinaten werden nun über das OSC-Protokoll an den verarbeitenden PC geschickt (kann auch der selbe PC sein) Hierzu wurde im Eyesweb-Patch aus der Matrix, welche der Schwerpunktblock herausgibt, jeweils der X- bzw. Y-Wert extrahiert und dann über einen gemeinsamen OSC-Block nach außen geschickt. Wir benutzen hierfür den Port 11560. Jeder andere freie Port funktioniert jedoch genauso. Die Koordinaten werden nun in einem selbstgeschriebenen C++ Programm empfangen und ausgewertet.


Erkennung der Gesten in einem C++ Code 

Die Erkennung der ausgeführten Gesten wurde über einen selbstgeschriebenen C++ Code realisiert. Pate stand hierbei der Fingertracker von www.fingertracker.de/. Dieser wurde von uns in C++ umgeschrieben und um einige zusätzliche Funktionen teilweise erweitert und teilweise abgespeckt.

Die hauptsächliche Erkennung der Gesten erfolgt über die Analyse der Bewegung der Schwerpunkte. Diese Bewegung wird daraufhin untersucht, ob sich der Schwerpunkt nach oben, unten, rechts oder links bewegt. Hierbei wird ein Grenzwert gesetzt, ab wann eine Bewegung als gewollte Bewegung erkannt wird. Damit lässt sich zum Beispiel eine ungenaue Schwerpunktbestimmung ausgleichen. Zusätzlich werden Bewegungen in die gleiche Richtung zu einer Bewegung zusammengefasst. Die Gesten an sich werden über die Reihenfolge der Bewegungen spezifiziert. Ein n wird zum Beispiel als die Bewegungsreihenfolge oben, rechts, unten definiert. Ein c als links, unten, recht. Zum Erkennen der Bewegungen wird eine bestimmte Zeit gewartet und dann die erkannten Bewegungen analysiert. Man muss also mit der Bewegung innerhalb dieser Zeit fertig sein. Die erkannten Gesten werden sollten vom Programm als vorher festgelegte Keystrokes ausgegeben werden, um ein Spiel zu steuern.


Den Sourcecode zum Programm finden Sie unter diesem Link: Source-Code Executable


Steuerung der Computerspielfigur über Keystrokes 

Zum Bau der Spielumgebung hatten wir uns für den Hammer-Editor entschieden. Über diesen Editor lassen sich Spielwelten mit der Half-Life Engine erstellen. Wir erstellten einen enfachen rechteckigen Raum, in welchem einige Gegenstände lagen, welche benutzt und zerstört werden können.

Über die vom C++ Programm erkannten und über Keystroke ausgegebenen Gesten sollt die Spielfigur in dieser Umgebung interagieren können.

Leider lies das Programm jedoch keine Steuerung über Keystrokes zu. Wir vermuten, dass dies Teil der Anti-Cheat-Strategie von Valve ist, die das triggern ihrer Spiele über virtuelle Keystrokes nicht zulassen, um das programmieren von Bots zu erschwe Beim Test des C++ Programms in einem Texteditor wurde klar, dass die Keystrokes zumindest an Windows übergeben und dort auch an das jeweils im Focus stehende Fenster übertragen werden.


Hammer Screenshot


Die erstellte Map lässt sich unter folgendem Link downloaden: Hammer Editor Map


Fazit

Das Bearbeiten der Aufgabe hat uns viel Spaß gemacht und uns der Praxis auch etwas näher gebracht. Unser Ziel haben wir weitgehend erreicht. Wir hätten noch eine Steuerung eines Gerätes einbauen können oder den angedachten Lernmodus in Java fertig entwickeln können.


Wir mussten jedoch während der Bearbeitung auch feststellen, dass es sehr viel Aufwand bedarf, ein richtiges ausgeklügeltes System zu entwerfen, da wir bei einigen Fragen an unsere Grenzen oder an die Grenzen der Software gestoßen sind. Es war unsere erste Arbeit in EyesWeb und daher war uns manchmal nicht klar, ob wir nun die Systemgrenzen erreicht haben oder nur den richtigen Block nicht gefunden haben. Dennoch sind wir der Meinung, in der kurzen Zeit die Möglichkeiten ganz gut ausgeschöpft zu haben.