Kinect Hand Tracking

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Die neue 3D Kamera von Microsoft ist eine preisgünstige 3D Kamera und wird daher in vielen Projekten verwendet. Neben dem Farbbild bekommt man ein zweites Bild mit Tiefeninformationen. Ziel dieses Projektes war es die Position der Hand zu verfolgen um mit der Hand Computerprogramme zu steuern.

Konzept

Mit Hilfe der Tiefeninformationen der Kinect wird eine einfache Verfolgung der Hand realisiert. Es wird der nähste Punkt ermittelt (Im Normalfall die Hand), danach wird das Bild Binarisiert und es wird der Schwerpunkt (Position der Hand) berechnet. Der Schwerpunkt wird noch geglättet. Durch das schnelle nach vorne bewegen der Hand wird ein Klick ausgelöst.

Umsetzung

Aufgrund mehrerer Probleme unter Windows die Kinect zu nutzen wurde Linux verwendet. Zur Bildverarbeitung wurde die Quelloffene Programmbibliothek OpenCV verwendet.

Vorbereitungen

Als Erstes muss der Treiber Installiert werden.

Siehe Kinect - Einbindung in verschiedene Systemumgebungen


Als Basis wurde das Programm glview vom freenct Treiber benutzt. Bei diesem Programm wurde anstelle der Ausgabe der Tiefenbildes die Bildverarbeitung eingefügt.


Zusätzlich wird noch die LibLo Library benötigt.

Bildverarbeitung

  • Als erster Schritt wird der nähste Punkt im Tiefenbild ermittelt, es ist davon aus zu gehen dass der nähste Punkt in den meisten fällen bei der Hand ist. Dieser Punkt wird für die Spätere Verwendung noch in die History Eingetragen
  • Anhand der Entfernung des nähsten Punktes (in der Formel min) wird der Schwellwert für die Binarisierung berechnet.
 Schwellwert = min + 30000/min - min/8 + 100
  • Das Tiefenbild wird Binarisiert
  • Der Schwerpunkt der Binarisierten Bildes wird berechnet und in der History Eingetragen
  • Der Schwerpunkt wird über die Letzten 3 Schwerpunkte Geglättet. Dieser Geglättete Schwerpunkt wird als Position verwendet und per OSC verschickt
  • Die Beschleunigung der Hand wird über die Strecke der Hand zwischen zwei Bildern berechnet und per OSC verschickt
  • Zum detektieren der Klicks wird der Abstand der Hand zwischen dem Aktuellen Frame und 4 Frames vorher verglichen. Bei einer Verringerung des Abstandes um 30000/min - min/8 + 100 wird ein Klick ausgelöst und per OSC verschickt. Damit nicht mehrere Klicks ausgelöst werden wird nach dem auslösen eines Klicks das Klicken für 5 Frames deaktiviert.

Blockschaltbild

Processing.png

Probleme

  • Treiberinstallation nicht einfach (Vor allem unter Windows)
  • Probleme mit der Einbindung von Libraries unter Windows
  • fakenect funktioniert unter Windows nicht
  • Nur eine Kinect verfügbar, es konnte immer nur einer Testen
  • EyesWeb nicht für Linux verfügbar

Da die Meisten Probleme nur unter Windows auftauchen entscheiden wir uns Linux zu verwenden.

Mögliche Verbesserungen

  • Linearisierung der Tiefeninformationen
  • Gui zum konfigurieren

Downloads

Quellcode