Kinect SDK为开发者提供了自然用户交互和音频API,并且可以与现有的Microsoft Speech API一起使用。本文将展示如何创建一个执行骨架追踪的WPF应用程序。
在开始之前,请确保卸载任何先前的Kinect驱动程序,例如PrimeSensor、CL NUI、OpenKinect等。
下载官方Kinect SDK并安装。系统要求包括:
打开Visual Studio,创建一个新的WPF应用程序。
在.NET标签下添加对Microsoft.Research.Kinect程序集的引用。不要忘记在xaml.cs文件中包含其命名空间。这里只包含了Nui命名空间,因为目前不需要音频功能。
C# using Microsoft.Research.Kinect.Nui;
用户界面包括一个显示原始摄像头输出的图像和一个显示用户关节的画布:
XML
<Grid>
<Image Name="img" Width="640" Height="480" />
<Canvas Name="canvas" Width="640" Height="480" />
</Grid>
打开xaml.cs文件并开始编写代码。Kinect API提供了一个Runtime对象来完成任务:
C# Runtime _nui = new Runtime();
接下来,需要初始化Runtime对象然后打开视频流:
C# _nui.Initialize(RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking | RuntimeOptions.UseColor);
_nui.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color);
最后,需要定义适当的事件处理程序来显示摄像头图像和骨架识别。非常简单:
C# _nui.VideoFrameReady += new EventHandler<imageframereadyeventargs>(Nui_VideoFrameReady);
_nui.SkeletonFrameReady += new EventHandler<skeletonframereadyeventargs>(Nui_SkeletonFrameReady);
以下是每个方法的实现。它们是自解释的,并且与Nui.Vision库非常相似。
C# void Nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)
{
var image = e.ImageFrame.Image;
img.Source = BitmapSource.Create(image.Width, image.Height, 96, 96, PixelFormats.Bgr32, null, image.Bits, image.Width * image.BytesPerPixel);
}
C# void Nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
canvas.Children.Clear();
foreach (SkeletonData user in e.SkeletonFrame.Skeletons)
{
if (user.TrackingState == SkeletonTrackingState.Tracked)
{
foreach (Joint joint in user.Joints)
{
DrawPoint(joint, Colors.Blue);
}
}
}
}