HandMediaControl

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Idee

HandMediaControl (Christoph Weith & David Hornung, Praktikum Interaktion WS 11/12) zielt darauf ab, anhand von statischen Handgesten verschiedene Multimediaprogramme zu steuern.
Beispiele für eine solche Steuerung sind:

  • Lautstärkeanpassung in Audio- und Video-Anwendungen
  • Blättern in PDF-Dokumenten und PowerPoint-Präsentationen

Konzept

Vorüberlegungen

Um einen alltagstauglichen Einsatz des Projekts gewährleisten zu können, haben wir uns für eine Realisierung mit OpenCV 2.1 entschieden. Somit erhalten wir eine Anwendung, die plattformunabhängig, frei von Schnittstellen und im Hintergrund lauffähig ist. Außerdem sind keine weiteren Tools wie z.B. EyesWeb nötig.

Technische Umsetzung

Die Hand wird mit einer USB Webcam aufgenommen. Nach einer Hintergrundsubtraktion werden die ermittelten Hu-Momente des binarisierten Bildes den Hu-Momenten der einzelnen vordefinierten Gesten zugeordnet und bei Übereinstimmung ein Druck auf die entsprechende Multimedia-Taste simuliert. Bei diesen Multimedia-Tasten handelt es such um zusätzliche Tasten auf modernen Tastaturen, mit denen Multimedia-Funktionen ausgeführt werden können. Bei unserem Projekt haben wir uns auf die Simulation der Multimedia-Tasten unter Linux beschränkt. Die benötigten Fake-Inputs haben wir mit dem Programm xte generiert. Unter Windows besteht die Möglichkeit die Funktion keybd_event zu verwenden, hierzu muss die Header-Datei windows.h inkludiert werden. Mittels Präprozessor-Direktiven wäre eine Unterscheidung zwischen Linux und Windows und somit ein gemeinsamer Source Code möglich.

Lernmodus

Um die Ermittlung der Hu-Momente für die entsprechenden Gesten zu erleichtern wurde ein halbautomatischer Lernmodus implementiert, der den Mittelwert und die Toleranz aller Hu-Momente errechnet und auf dem Bildschirm ausgibt. Das Einfügen in den Code erfolgt manuell. Der Lernmodus wird durch Druck der Taste l (learn) im Konsolenfenster gestartet und durch erneuten Tastendruck wieder beendet.

Verwendete Gesten

Tools/Hardware/OS

  • OpenCV 2.3: Verwendung von objektorientierten Funktionen zur Bildbe- und Bildverarbeitung
  • Code::Blocks 10.04: Entwicklungsumgebung
  • guvcviewer: Kalibrierung der Kamera, z.B. Helligkeit, automatischen Weißabgleich deaktivieren usw.
  • Logitech QuickCam 9000
  • Ubuntu 11.04

Probleme und Lösungen

Wie bei Auswertung von Kamerabildern üblich spielte die Belichtung ein bedeutende Rolle. Daher behalfen wir uns mit einem schwarz gestrichen Pappdeckel als Bildhintergrund.

Fehler die durch die automatisch eingestellte Empfindlichkeit der Webcam herrührten ließen sich nur mit dem GUI-Tool guvcviewer nach Einstecken der Webcam ausschalten. Leider konnten wir nicht - wie anfangs geplant - mit dem Kommandozeilentool uvcdynctrl die automatische Empfindlichkeit abschalten. Dies wird vom derzeitigen Treiber für Logitech-Webcams nicht unterstützt. (Weiterhin ist die Seite der Logitech-Community www.quickcamteam.net seit längerem offline)

Eine weitere Schwierigkeit stellte der Wertebereich der Hu-Momente dar. Die von OpenCV zurückgegebenen Werte waren extrem klein und mussten entsprechend hochskaliert werden. Manche Hu-Momente lieferten trotz Hochskalierung bis an die Grenze des double-Datentyps keine sinnvollen Werte.

Außerdem eigneten sich nur bestimmte Gesten für unser Projekt, da viele Gesten sehr ähnliche Hu-Momente aufwiesen und somit nicht eindeutig zuordenbar waren.

Ergebnis

Die gewünschte Funktion wurden in C++ mit der OpenCV Programmbibliothek implementiert, für den komfortablen Einsatz ist das Programm aber nicht ausgereift. Ab und an werden falsche Gesten erkannt, oder die gewollte Geste erst nach einigen Versuchen. Derzeit lässt sich die Lautstärke einstellen, nächster und Vorheriger Titel auswählen und den Titel pausieren und wiedergeben.

Abschließend bleibt zu sagen, dass die Erkennung von Handgesten mithilfe der Hu-Momente störanfällig und die Qualität der Gestenerkennung stark von der Umgebung (Belichtung, Schatten, Hintergrund) abhängig ist. Außerdem leidet die Qualität der Erkennung auch unter der Anzahl der Hände, die für eine Geste registriert wurden, da die Proportionen verschiedener Hände unterschiedlich sind.

Möglicherweise können durch Wahl eines alternativen Verfahrens wie z.B. Farbsegmentierung oder die Auswertung geometrischer Merkmale (Tiefeninformation, Achsen, Linien, Winkel) bessere Ergebnisse erzielt werden.

Links