Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Die Microsoft Kinect ist eine Kamera, welche für die Spielkonsole Xbox entwickelt wurde. Das Besondere an dieser Kamera ist ihre Möglichkeit, neben einem normalen RGB Bild, ein Tiefenbild ihrer Umgebung zurückzugeben. Damit wird es möglich komplexere Computer Vision Aufgaben zu implementieren. Darüber hinaus bietet das sog. Microsoft Kinect SDK die Möglichkeit das Skelett einer Person zu erkennen. Durch das "Skeleton-Tracking" ist es möglich festzustellen, wo die Gelenke einer Person sind und welche Gesten und Bewegungen sie ausführt. Leider ist dieses SDK nur für Windows erhältlich und wir arbeiten daher vor allem mit dem Tiefenbild der Kinect Kamera.

...

Code Block
PImage videoImage = kinect.getVideoImage();
PImage irImage = kinect.getIrImage();
Code Block
titleBeispiel
collapsetrue
import org.openkinect.freenect.*;
import org.openkinect.freenect2.*;
import org.openkinect.processing.*;

Kinect2 kinect2;

void setup() {
  size(640, 360, P2D);

  kinect2 = new Kinect2(this);
  kinect2.initIR();
  
  kinect2.initDevice();
}

void draw() {
  background(0);
  image(kinect2.getIrImage(), 0, 0, kinect2.depthHeight, kinect2.depthHeight);
}

Tiefenbild

Um das Tiefenbild als Graustufen zurückzubekommen wird folgendes gemacht:

Code Block
PImage depthImage = kinect.getDepthImage();

Gezeichnet wird es mit:

Code Block
image(depthImage, 0, 0);

...

Code Block
titleBeispiel
collapsetrue
import org.openkinect.freenect.*;
import org.openkinect.freenect2.*;
import org.openkinect.processing.*;

Kinect2 kinect2;

void setup() {
  size(512, 424, P2D);

  kinect2 = new Kinect2(this);
  kinect2.initRegistered();
  
  kinect2.initDevice();
}

void draw() {
  background(0);
  image(kinect2.getRegisteredImage(), 0, 0);
  println(kinect2.depthWidth +" "+ kinect2.depthHeight);
}

Übersicht der Funktionen

Hier eine Übersicht der Funktionen, welche die Library zur Verfügung stellt:

...

Für weitere Informationen: the javadoc reference.

Weitere Beispiele

Code Block
titleKinect Test
collapsetrue
import org.openkinect.freenect.*;
import org.openkinect.freenect2.*;
import org.openkinect.processing.*;

Kinect2 kinect2;

void setup() {
  size(1024, 848, P2D);

  kinect2 = new Kinect2(this);
  kinect2.initVideo();
  kinect2.initDepth();
  kinect2.initIR();
  kinect2.initRegistered();

  kinect2.initDevice();
}

void draw() {
  background(0);
  image(kinect2.getVideoImage(), 0, 0, kinect2.depthWidth, kinect2.depthHeight);
  image(kinect2.getDepthImage(), kinect2.depthWidth, 0);
  image(kinect2.getIrImage(), 0, kinect2.depthHeight);
  image(kinect2.getRegisteredImage(), kinect2.depthWidth, kinect2.depthHeight);

  fill(255);
  text("Framerate: " + (int)(frameRate), 10, 515);
}
Code Block
titleDepth Threshold
collapsetrue
import org.openkinect.processing.*;

Kinect2 kinect2;

int lowerThreshold = 0;
int upperThreshold = 750;

void setup() {
  size(512, 424);

  kinect2 = new Kinect2(this);
  kinect2.initDepth();
  kinect2.initDevice();
}

void draw() {
  PImage img = kinect2.getDepthImage();
  int[] depthMap = kinect2.getRawDepth();

  loadPixels();

  for (int x = 0; x < kinect2.depthWidth; x++) {
    for (int y = 0; y < kinect2.depthHeight; y++) {
      int loc = x+ y * kinect2.depthWidth;
      int rawDepth = depthMap[loc];
      
      if (rawDepth > lowerThreshold && rawDepth < upperThreshold) {
        pixels[loc] = color(150, 50, 50);
      } else {
        pixels[loc] = img.pixels[loc];
      }
    }
  }

  updatePixels();
}
Code Block
titleVideo Image
collapsetrue
import org.openkinect.freenect.*;
import org.openkinect.freenect2.*;
import org.openkinect.processing.*;

Kinect2 kinect2;

void setup() {
  size(640, 360, P2D);

  kinect2 = new Kinect2(this);
  kinect2.initVideo();
  
  kinect2.initDevice();
}

void draw() {
  background(0);
  image(kinect2.getVideoImage(), 0, 0, width, height);
}