Download Tagungsband 2012 - Informatics Inside

Transcript
legung beobachtet. Die Ursache hierfür liegt darin, dass die JavaScript-Engine bei dem Zugriff
auf ein Attribut des skriptbaren Plug-ins eine
typunsichere JavaScript-Variable erstellt, in die
der zurückgegebene Wert geschrieben wird. Es
wird vermutet dass der allokierte Speicher von
Variablen mit einer Referenz auf ein natives Objekt aus der skriptbaren Objektstruktur von dem
Garbage-Collector jedoch nicht mehr freigegeben werden kann, da die Bedingung hierfür,
dass der Referenzzähler des referenzierten Objekts Null erreicht, erst bei dem Schließen des
Browserfensters erfüllt wird. Zur Lösung des
Problems kann jedoch während der Initialisierung einer Anwendung einmalig eine Referenz
auf jedes benötigte skriptbare Objekt in einer
statischen Variable gespeichert und daraufhin
von dem Event-Handler wiederverwendet werden, ohne dass es zum Speicheranstieg kommt.
2.2 HANDGESTEN
Bei der Entwicklung von Gesten-basierten
Anwendungen können bekannte Gesten zum
Bestätigen von Eingaben wiederverwendet
werden. Aus diesem Grund hat man sich entschieden das Plug-in um solche Gesten zu
erweitern. OpenNI/NITE bietet zu diesem
Zweck die Erkennung von Handgesten über
die NITE-Toolbox-Bibliothek. Diese Bibliothek wurde jedoch ignoriert, da sie zum Entwicklungszeitpunkt auf dem Hand-Tracker
von OpenNI/NITE basierte und eine eigene
Initialisierungsgeste für jede Hand erforderte.
Desweiteren wäre diese Lösung inkompatibel
mit dem Microsoft Kinect SDK gewesen. Aus
diesem Grund wurde die Erkennung für zwei
Handgesten, eine Drück- und eine Greifgeste,
selbst implementiert. Zur Verwendung dieser
Gesten können über die skriptbare Schnittstelle Event-Handler registriert werden.
Bei der Erkennung der Drückgeste werden die
Handkoordinaten auf schnelle Bewegungen in
Richtung der Kinect überwacht. Hierzu verfügt
jeder Benutzer für jede Hand über eine Bewegungshistorie der letzten acht Frames, mit der
die durchschnittliche Änderung der Koordinaten berechnet wird. Damit die Bewegung
korrekt interpretiert wird, muss die Z-Achse
8
12
des Skelett-Koordinatensystems parallel zum
Boden ausgerichtet sein. Aufgrund der erforderten schnellen Bewegung der Hand, war mit
der implementierten Drückgeste jedoch keine
präzise Selektion möglich, weshalb zudem die
Greifgeste entwickelt wurde. Diese Geste erlaubt die Hand ruhig zu halten, da sie auf der
Erkennung eines Zustandswechsels der Hand
von offen auf geschlossen und wieder auf offen basiert. Zum Zeitpunkt der Entwicklung
boten keine der beiden Frameworks eine hierfür notwendige Unterscheidung offener und
geschlossener Hände, weshalb diese selbst
implementiert wurde (siehe Kapitel 2.3). Um
unbewusste Zustandswechsel von der Greifgeste zu unterscheiden, wurde eine minimale
und maximale Wartezeit zwischen dem Schließen und dem Öffnen der Hand eingeführt. Die
Wartezeit wurde dabei auf minimal 450 und
maximal 1500 Millisekunden gesetzt. Um eine
visuelle Rückmeldung für jeden auftretenden
Zustandswechsel der Greifgeste geben zu können, können dafür Event-Handler registriert
werden.
2.3 UNTERSCHEIDUNG DES
HANDZUSTANDS
Für die Umsetzung der Greifgeste, war es nötig eine Unterscheidung von geschlossenen
und geöffneten Händen zu implementieren.
Hierbei hat man sich an den Ansatz vorgestellt von Manresa et al. [3] orientiert. Dieser
funktioniert durch das Erkennen der Tiefe von
Defekten in der konvexen Hülle der Kontur einer Hand. Ein Defekt in der konvexen Hülle
entspricht hierbei einer Lücke zwischen zwei
Fingern und wird durch einen Startpunkt u,
einer Tiefe d und einen Endpunkt v definiert
(siehe Abbildung 3).
Abbildung 3: Defekte in einer konvexen Hülle [3]
Informatics
Inside