Gestenerkennung zur Steuerung

Aus toolbox_interaktion
Version vom 30. Januar 2019, 16:09 Uhr von EngelhardtMa (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Einleitung

Im Zuge des Interaktionspraktikums im WS 2018/19 wurde eine Gestenerkennung mittels Bildverarbeitung konzipiert, diese bedarf dabei nur einen Laptops mit eingebauter Webcam. Verschiedene Methodiken der Bildverarbeitung kamen dabei zum Tragen, wie Hintergrundsubtraktion, Erkennung der Person in Region of Interests sowie Erosion und Dilatation. Das Programm wurde dabei in der Programmiersprache C++ geschrieben, wobei das Framework „openFrameworks“ sowie die Bibliothek „openCV“ zum Einsatz kamen. Der Nutzer des Programms kann das Programm seinen Bedürfnissen anpassen, dazu muss er nur die zu Beginn des Codes stehenden Konstanten (#define) modifizieren.

Programmablauf

Zu Beginn wird mithilfe der Enter Taste ein Standbild aufgenommen, welches nachfolgend für die Hintergrundsubtraktion verwendet wird, d.h. dass damit nur noch die veränderten Formen und Strukturen im Bild betrachtet werden, also nur auf den Körper des Spielers geschaut wird. Dabei wird die Subtraktion nicht bei normalen RGB- Bildern angewendet, sondern bei Grauwertbildern, da hier die Operationsgeschwindigkeit aufgrund des geringeren Rechenbedarfs deutlich höher ist. Nach der Hintergrundsubtraktion erfolgt die Umwandlung des Bildes in die binarisierte Form. An die Binariesirung schließt die Minimierung der Störung im Bild an (Default: Dilatation, dann Erosion). Danach findet die Auswertung des Bildes an, wobei drei unterschiedliche ROIs (links, rechts, oben) verwendet werden, um Gesten zu detektieren. Sind in einem ROI nun genügend weiße Pixel vorhanden (Default: ein Viertel der ROI), wird eine Aktion ausgelöst, in diesem Fall das Drücken einer bestimmten Taste auf der Tastatur. Aufgrund dessen kann nun theoretisch ein beliebiges Spiel angesteuert werden.

Anmerkungen

Der Bediener des Spiels kann zu Beginn des Programmstarts Einstellungen an der Webcam vornehmen, dabei sollte die automatische Belichtung ausgeschaltet werden, diese Methode wird jedoch obsolet, sollte der Raum und der Spieler konstant beleuchtet werden.

Demospiel Posenerkennung

Durch Drücken der Backspace Taste kann ein Demospiel zur Posenerkennung gestartet werden. Es erscheinen Bilder, die die jeweilige Pose darstellen soll. So muss der Spieler, wenn rechts ein schwarzer Kreis erscheint, die rechte ROI betätigen. Nach Erfüllen der Pose erscheint eine Neue. Zum Spielen des Demospieles müssen allerdings die Bilder der Posen erst gespeichert werden (s. unten).

Modifizierbarkeit

Adaptive Thresholding

Der Nutzer kann durch setzen der Variable ADAPTIVE_THRESHOLDING auf TRUE das adaptive Thresholding einschalten. Dabei wird auf Grundlage eines Histogramms des grauen Differenzbildes der Schwellwert für die Binarisierung festgelegt, so können veränderte Umwelteinflüsse, wie zum Beispiel das Licht, besser berücksichtigt werden.

Opening / Closing

Durch setzen der Variable CLOSING auf TRUE und OPENING auf FALSE kann die Bearbeitung durch Dilatation und Erosion umgedreht werden.

Auslösekriterium der ROIs

Durch verändern des Wertes scaleROItrigger kann die Triggerzahl der ROIs verändert werden. Der Defaultwert "4" bedeutet hierbei, dass ein Viertel der ROI mit weißen Pixeln gefüllt sein muss, um als ausgelöst zu gelten.

Tastenbelegung

Um verschiedene Spiele spielen zu können, kann die Tastenbelegung der ROIs modifiziert werden. Dabei kann über die Variable buttonLeftHandROI die Taste verändert werden, die bei ausgelöster linker ROI gedrückt werden soll. Außerdem kann über CONTINUOUS_MODE_LEFT geändert werden, ob die Taste nur einmal bei Auslösen der ROI gedrückt werden soll (FALSE), oder die Taste gehalten werden soll (TRUE).

Bilder

Grundstellung

Hintergrundbild wurde durch Drücken von Enter aufgenommen und als Graubild gespeichert. Hintergrundsubtraktion und binarisierung finden laufend statt.

Geststeu grundstellung.png

Auslösen einer ROI

Die rechte ROI wird durch die Hand ausgelöst.

Geststeu ausloesen.png

Demospiel Posenerkennung

Durch Drücken von Backspace wird das Demospiel gestartet. Nacheinander werden Posen geladen, daraus ist zu erkennen, welche ROIs ausgelöst werden müssen.

Geststeu demospiel.png

Bilder der Posen für Demospiel

Die Bilder für das Demospiel sind 80x80 Pixel groß und im Dateipfad Projektname\bin\data ohne den Anfang "geststeu_" (also als Pose1 usw.) abzuspeichern.

Geststeu Pose1.png Geststeu Pose2.png Geststeu Pose3.png

Geststeu Pose4.png Geststeu Pose5.png Geststeu Pose6.png

Programm-Code

Quellcode