Kinect 和 WPF:完整身体追踪





5.00/5 (5投票s)
Kinect 中的完整身体追踪。
现在是时候进行一个真正有趣且实用的 Kinect 教程了。我们将看到如何使用 Kinect 传感器、OpenNI 库和 Windows Presentation Foundation 实现全身追踪。
我发现 OpenNI C# 示例有点混乱,所以我决定开发一个 .NET 4 包装库,它可以用于 WPF 应用程序,无需像 GDI+、System.Drawing 等 .NET 2 组件。我将其命名为 Nui.Vision,它是当前我正在开发的更大框架的一部分。Nui.Vision 是一个 .NET 4 程序集,它提供了一个易于使用的身体追踪 API!
2011年4月20日更新
Nui.Vision 现在与 OpenNI 框架的最新版本 (1.1.0.41) 兼容。我对其进行了一些更改和错误修复,包括 roni26_wu 提供的骨骼显示修复(请参阅下面的评论)。Nui.Vision 的开源版本即将发布!
必备组件
- Kinect for Windows
或 Kinect for XBOX
传感器
- Windows 7 / Vista 操作系统。
- .NET Framework 4.0(版本 3.5 也可以工作)。
- OpenNI 库(安装指南 - 我使用了不稳定版本)。
- 我的 Nui.Vision 库。
使用库
使用 Nui.Vision 就像小菜一碟。所有的身体追踪都在后台完成,所以你只需要在适当的事件触发时更新你的用户界面。首先,添加对 OpenNi.net.dll 和 Nui.Vision.dll 的引用。 另外,按照此处描述的方式,将有效的配置文件导入到你的项目中。不要忘记输入相应的 using 语句
using Nui.Vision;
然后声明一个新的 NuiUserTracker
对象,并在构造函数中初始化它。提供之前导入的配置文件的路径(不要忘记将相同的文件粘贴到应用程序的 Debug/Release 文件夹中)
_skeleton = new NuiUserTracker("SamplesConfig.xml");
紧接着,你需要定义 UserUpdated
事件。
_skeleton.UsersUpdated += new NuiUserTracker.UsersUpdatedHandler(Skeleton_UserUpdated);
创建了一个适当的事件处理程序。 NuiUserEventArgs
参数为你提供了所有已识别用户的集合!现在你可以获得每个用户每个身体部位的坐标(X、Y 和 Z)(OpenNI 当前支持 15 个身体部位)!
foreach (var user in e.Users) {
float headX = user.Head.X;
float headY = user.Head.Y;
float headZ = user.Head.Z;
float neckX = user.Neck.X;
float neckY = user.Neck.Y;
// etc...
}
很简单,对吧?
以下是所有可用身体部位的列表
- Head
- 弦颈
- 左肩
- 左肘
- 左手
- 右肩
- 右肘
- 右手
- 躯干
- 左膝
- 左髋
- 左脚
- 右膝
- 右髋
- 右脚
现在你可以开始开发很酷的 WPF Kinect 应用程序和游戏了。想象力是极限。