
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();
}
}
}