Atlassian uses cookies to improve your browsing experience, perform analytics and research, and conduct advertising. Accept all cookies to indicate that you agree to our use of cookies on your device. Atlassian cookies and tracking notice, (opens new window)
Confluence
/
Leap

Leap

Apr 05, 2017

Leap Motion ist eine Firma, welche Devices für das Finger- und Hand-Tracking entwickelt und vertreibt. Der nun vorgestellte Leap Motion Controller ist ein USB Gerät, welches mittels Infrarot in der Lage ist, die Position von Fingern und der Hand in einem eingeschränkten Bereich sehr genau zu erfassen. Für Processing gab es schon recht früh ein Release eine Library, welche von onformative bereit gestellt wird. Die Library kann von GitHub geladen werden. Sie erlaubt den Zugriff auf die Informationen der Kamera.

Getting Started

Die Library funktionier ähnlich zu den anderen Processing-Libraries. Um aber Daten von der Leap lesen zu können muss zuerst die App (Server) installiert werden.

Dann gilt es die Library zu importieren:

import com.onformative.leap.LeapMotionP5;
import com.leapmotion.leap.Finger;

Dann kann ein Leap Objekt angelegt werden:

LeapMotionP5 leap;

Welches dann später in der setup() Method initialisiert wird:

leap = new LeapMotionP5(this);

Die Position der Finger oder der Hand kann dann abgefragt werden:

for (Finger finger : leap.getFingerList()) {
  PVector fingerPos = leap.getTip(finger);
}

Finger Tracking 2D

Für das erste Beispiel “LM01_1_Aktive_Finger_2D” benutzen wir nur das einfache Finger Tracking und zeichnen für jeden Finger eine Ellipse:

for (Finger finger : leap.getFingerList()) {
  PVector fingerPos = leap.getTip(finger);
  ellipse(fingerPos.x, fingerPos.y, 10, 10);
}

Mit diesem Beispiel lässt sich gut die Genauigkeit und die Limits (Finger eng zusammen) der Library erkennen.

Finger Tracking 3D

Das nächste Beispiel zeigt, wie sich auch die 3D Koordinaten der Finger auslesen lassen. Dazu rufen wir ein translate() auf und zeichnen eine Sphäre an der neuen Position:

translate(fingerPos.x, fingerPos.y, fingerPos.z);

So lässt sich erkennen, dass der Nullpunkt der z-Achse sich direkt über dem LeapMotion Controller befindet.

Hand Tracking 3D

Im letzten Beispiel verwenden wir die Lage der Hand um eine virtuelle Box zu steuern. Auch hier lässt sich zum einen direkt die Position der Hand als PVector auslesen:

PVector handPosition = leap.getPosition(hand);

Den Roll, Pitch und Yaw der Hand bekommen wir durch:

float pitch = leap.getPitch(hand);
float roll = leap.getRoll(hand);
float yaw = leap.getYaw(hand);

Diese Werte können wir dann verwenden um die virtuelle Box um die gleichen Werte zu rotieren:

rotateX(radians(map(pitch, -30, 30, 45, -45)));
rotateZ(radians(map(roll, -40, 40, 45, -45)));

Aufgaben

  • Schaut euch die Gesture-Regocnition Beispiele der Library an.
  • Kreiert eine eigene Geste, welche durch den LeapMotion Controller erkannt werden kann.

Links

  • LeapMotionP5 Library
, multiple selections available,
For you

Computer Vision
Results will update as you type.
  • Digital Signal Processing
  • Einfache Algorithmen
  • Image Processing
  • Kinect
  • Klassen
  • Leap
  • Linksammlung
  • Marker Tracking
  • OpenCV
  • Processing Keystone
  • Resolume Arena
  • Sound als Input
  • Vektoren
  • Video Processing
  • Video Library 2.0
  • Arduino Portenta H7 + Vision Shield

{"serverDuration": 47, "requestCorrelationId": "6bf1ea9e65f443909ce64339345df898"}