充分利用 C# 中的 Kinect SDK - 第 1 部分:初始化






4.88/5 (10投票s)
一系列关于使用 Kinect for Windows SDK 进行实验的文章。
引言
这是系列文章的第一部分,记录了我对 Kinect for Windows SDK 的实验。在前两三篇文章之后,本系列应该为初学者提供一个很好的入门指南,并为更高级的开发人员提供一个不错的参考。
系列目录
- 初始化
- ImageStreams(图像流)
- 即将推出……
背景
Kinect 最初是为微软的 XBOX 360 游戏机开发的传感器。它有一个普通的摄像机,一个用于深度检测的红外摄像机,以及一个麦克风阵列。您可以在 这里 找到有关 Kinect 及其 Windows SDK 的所有信息。
SDK 基础知识
要在您的应用程序中使用 SDK,您需要引用 Microsoft.Research.Kinect
程序集。它包含两个命名空间
Microsoft.Research.Kinect.Nui
- 用于视觉特征Microsoft.Research.Kinect.Audio
- 用于音频特征
在这一点上,我将重点关注 SDK 的 NUI 部分及其功能
DepthStream
- 深度传感器的接口VideoStream
- 摄像机的接口SkeletonEngine
- 用于跟踪最多两个人体骨骼的引擎NuiCamera
- 设备信息和控制(主要用于获取/设置仰角)
要开始编码,您需要使用 SDK 中的 Runtime
类。此类提供设备枚举和初始化的入口点。在大多数情况下,您只需要获取 Runtime
类的实例即可
Runtime rt = Runtime.Kinects[0];
这将使您可以控制系统中找到的第一个 Kinect。如果您连接了更多 Kinect,您将需要使用 Runtime.Kinects
集合来枚举设备
foreach (Runtime CurrentRuntime in Runtime.Kinects)
{
// Do your stuff...
}
运行时初始化
无论您通过哪种方式获取对 Runtime
的引用,您都必须 Initialize()
它。忘记这样做将在访问 ImageStream
或 SkeletonEngine
时导致异常。
在调用 Initialize()
之前,您应该通过检查 Status
属性来检查运行时和设备的状态。文档将状态描述为
Connected
- 传感器已完全连接并准备就绪。Error
- 发生错误。Disconnected
- 传感器未连接到 USB 连接器。NotPowered
- 传感器未通电。NotReady
- 传感器的某些部分尚未准备就绪。
只有当 Status
为 KinectStatus.Connected
时,您才应该继续。可以通过附加到 Runtime.Kinects.StatusChanged
事件来监视状态。
初始化后,将几个选项传递给 Runtime
。根据文档,它们的含义非常简单
UseColor
- 处理颜色信息。UseDepth
- 处理深度信息。UseDepthAndPlayerIndex
- 处理玩家索引。UseSkeletalTracking
- 处理骨骼跟踪数据。
不启用某些功能可能会导致性能变化。我稍后会尝试验证它。
接下来您应该做的是 Open()
ImageStream
。同样,忘记这样做将导致在访问帧时出现异常。提供错误的参数将导致 InvalidOperationException
。
CurrentRuntime.Initialize(RuntimeOptions.UseDepthAndPlayerIndex
| RuntimeOptions.UseSkeletalTracking
| RuntimeOptions.UseColor
);
CurrentRuntime.VideoStream.Open(ImageStreamType.Video, 2,
ImageResolution.Resolution1280x1024, ImageType.Color);
CurrentRuntime.DepthStream.Open(ImageStreamType.Depth, 2,
ImageResolution.Resolution320x240, ImageType.DepthAndPlayerIndex);
InfoTool
上面显示的代码片段取自我的第一个工作应用程序 - InfoTool。目前,此工具所做的只是
- 枚举设备
- 初始化所有设备
- 打开
ImageStream
- 显示在上述步骤中收集的所有信息
这是一个示例输出
此示例输出显示有一个 Kinect 可供使用,并且所有初始化都已成功执行。正如您所看到的,VideoStream
和 DepthStream
在启动时有一些不正确的参数,并通过调用 Open()
将其更改为正确的参数。
关注点
我的下一次实验将包括
- 确定使用
ImageStrea
ms 的最佳方法 - 骨骼跟踪
- 基准测试/性能调优
历史
- 2011-11-20:初步提交。
- 2012-01-06:添加系列目录并更新源代码(适用于整个系列)。