- Windows anmachen 🙂
- Kinect mit dem USB-Power-Adapter anstöpseln.
- Unter http://www.microsoft.com/en-us/download/details.aspx?id=40278 das Kinect for Windows SDK v1.8 laden und. (Nicht Version 2!) Die grüne Lampe wird leuchten.
- Unter dem Geräte Manager wird Kinect angezeigt:
- Optional: Für ein paar Beispiele installiere von http://www.microsoft.com/en-us/download/details.aspx?id=40276 das Kinect for Windows Developer Toolkit v1.8.
Unter Developer Toolkit Browser v1.8.0 (Kinect for Windows) kann man dann Beispiele anschauen und prüfen, ob die Kamera einen “empfängt”. - Gehe unter http://research.dwi.ufl.edu/ufdw/download.php und lade ufdw.jar. Melde das Jar im Klassenpfad an.
- Lade ein Beispiel von http://research.dwi.ufl.edu/ufdw/j4k/examples.php, entpacke es, und setze für ein 64-Bit-Java die DLL-Dateien (ufdw_j4k_64bit.dll/ufdw_j4k2_64bit.dll) in das Java-Projekt.
Das waren die Vorbereitungen, jetzt können wir zum eigentlichen Java-Programm kommen. Zum Testen soll einfach nur die Orientierung (also der Winkel zur Kinect) in den Winkel einer 3D-Box übertragen werden – dreht man sich vor der Kinect, wird die Box sich mitdrehen. Gleichzeitig gibt es noch einen Text, sodass man den Winkel gleich ablesen kann.
Fertig sieht das so aus:
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.shape.Box; import javafx.scene.text.Text; import javafx.scene.transform.Rotate; import javafx.stage.Stage; import edu.ufl.digitalworlds.j4k.J4KSDK; import edu.ufl.digitalworlds.j4k.Skeleton; public class MovingBody extends Application { private final Box box = new Box( 200, 200, 200 ); private final Text text = new Text( 200, 200, "#" ); class SkeletonTracker extends J4KSDK { @Override public void onSkeletonFrameEvent( boolean[] skeletonTracked, float[] positions, float[] orientations, byte[] jointStatus ) { int skeletonId = 0; while ( !skeletonTracked[ skeletonId ] ) skeletonId++; Skeleton skeleton = Skeleton.getSkeleton( skeletonId, skeletonTracked, positions, orientations, jointStatus, this ); box.setRotate( (int) skeleton.getBodyOrientation() ); // reduce "noise" with (int) text.setText( "" + (int) skeleton.getBodyOrientation() ); text.setRotate( (int) skeleton.getBodyOrientation() ); } @Override public void onColorFrameEvent( byte[] colorData ) { } @Override public void onDepthFrameEvent( short[] depthFrame, byte[] playerIndex, float[] xyz, float[] uv ) { } } public MovingBody() { new SkeletonTracker().start( J4KSDK.SKELETON ); } @Override public void start( Stage primaryStage ) { Group root = new Group(); primaryStage.setScene( new Scene( root, 400, 400 ) ); primaryStage.show(); box.setTranslateX( 200 ); box.setTranslateY( 200 ); box.setTranslateZ( 200 ); box.setRotationAxis( Rotate.Y_AXIS ); root.getChildren().addAll( box, text ); } public static void main( String[] args ) { launch( args ); } }