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 |
---|
title | Beispiel |
---|
collapse | true |
---|
|
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 |
---|
title | Beispiel |
---|
collapse | true |
---|
|
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 |
---|
title | Kinect Test |
---|
collapse | true |
---|
|
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 |
---|
title | Depth Threshold |
---|
collapse | true |
---|
|
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 |
---|
title | Video Image |
---|
collapse | true |
---|
|
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);
} |