MS Kinect Demoanwendung (Skelett)

 

 

MSRKINECTSDK muss gesetzt sein (environment varaibles):



Anmerkung: Das SDK muss derzeit auf jedem Rechenr installiert werden, auf dem die fertige Software letztendlich benutzt werden soll.

 

Ein neues Projekt "WPF-Application" wird angelegt.

 

 

 

und eine Referenz hinzugefügt:

 

Referenzen: http://msdn.microsoft.com/en-us/library/7314433t%28v=VS.90%29.aspx

 

(Solution Explorer > References)

 

 

 

Im Quellcode ist somit einzufügen:

using Microsoft.Research.Kinect.Nui;
using Microsoft.Research.Kinect.Audio;

 

 

 

Coding4Fun Kinect Toolkit

Zur einfacheren Verwendung des MS Kinect SDKs:

 

 

 

Auch im Quellcode wird die Ressource angegeben:

using Microsoft.Research.Kinect.Audio;

using Microsoft.Research.Kinect.Nui;

using Coding4Fun.Kinect.Wpf;


 

Ein Testprogramm, das die Kamera nur initialisiert, kann wie folgt aussehen:

 

namespace Kinect_O1

{

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}


Runtime nui = new Runtime();

private void Window_Loaded(object sender, RoutedEventArgs e)

{

nui.Initialize(RuntimeOptions.UseColor | RuntimeOptions.UseDepth);

}


private void Window_Closed(object sender, RoutedEventArgs e)

{

nui.Uninitialize();

}

}

}

 

 

 

"Skeletal Tracking"

Jeder Punkt (Kopf, linke Hand, rechte Hand etc.) wird über die Koordinaten X,Y,Z bestimmt:

X...horizontale Position [-1;1]
Y... vertikale Position [-1;1]
Z... Distanzinformation in Metern

Diese werden im Folgenden für die Kopfposition ausgewertet:

 

Im XAML Code des Projekt wird ein Bild eingebunden:

 

<Image 

Source="C:\PFAD\Kuhkopf_Berg.jpg"

Name="mykuhkopf" Height="241" Width="318" HorizontalAlignment="Left" Margin="0,0,0,0" Stretch="Fill" VerticalAlignment="Top"

/>

 

und mit Hilfe der gesendeten Kinect-Daten positioniert:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using Microsoft.Research.Kinect.Nui;

using Microsoft.Research.Kinect.Audio;

using Coding4Fun.Kinect.Wpf;


namespace Demo

{

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

Runtime nui = new Runtime();


private void Window_Loaded(object sender, RoutedEventArgs e)

{

nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);

nui.Initialize(RuntimeOptions.UseSkeletalTracking);

}


void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)

{ // sobald ein "Skelett" im Status "tracked" ist, also über die Kamera als
// solches erkannt wurde, wird die

// Funktion SkeletonFrameRady aufgerufen

SkeletonFrame allSkeletons = e.SkeletonFrame;

// Abruf der Daten

SkeletonData skeleton = (from s in allSkeletons.Skeletons

where s.TrackingState == SkeletonTrackingState.Tracked

select s).FirstOrDefault();


// HEAD

 

Winkel = Math.Atan2((skeleton.Joints[JointID.ShoulderCenter].Position.X - skeleton.Joints[JointID.Head].Position.X),

(skeleton.Joints[JointID.ShoulderCenter].Position.Y - skeleton.Joints[JointID.Head].Position.Y));

Winkel = -(Winkel * 180 / Math.PI);

mykuhkopf.RenderTransform = new RotateTransform(Winkel+180, 0, 0);


// Ausgabe/Positionierung

 

SetImagePosition(mykuhkopf, skeleton.Joints[JointID.Head]);

 

}


private void SetImagePosition(FrameworkElement myimage, Joint joint)

{

var scaledJoint = joint.ScaleTo(800, 600, .5f, .5f);


Canvas.SetLeft(myimage, scaledJoint.Position.X);

Canvas.SetTop(myimage, scaledJoint.Position.Y);

}


private void Window_Closed(object sender, EventArgs e)

{

nui.Uninitialize();

}

}

}