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