3

我希望有人可以帮助我指出正确的方向。

我正在寻找一种使用 Microsoft Kinect 关闭灯的方法。该灯连接到与 Telldus Tellstick 配对的 Home Easy 远程插座开关。我正在使用 C# 编写应用程序,现在我的脑海里有一个模糊的想法,我想做什么,并且在使用 Kinect SDK 之后,我对如何使用 Kinect 有了更好的理解。

我想知道的是创建这个应用程序最合乎逻辑的方式是什么?我在想一些事情:初始化Kinect>当Kinect准备好然后扫描骨架>当检测到骨架时,将布尔值标记为“真”>当值为真时,打开灯。

我知道这很模糊,但我是使用 kinect 开发的新手,总的来说我还在学习 C#。任何帮助,无论多么小,将不胜感激!

问候,约翰。

4

1 回答 1

1

您不能为此设置一个简单的布尔值,因为 SDK 的事件驱动方法将返回 6 个骨架结构,即使它们都是空的。不过,使用一点 LINQ 和空值检查可以得到你想要的东西。

脚步:

  1. 初始化 Kinect(我将为此应用 WPFViewers 使用包含的 KinectSensorChooser)启用并注册骨骼流。
  2. 在骨架事件中检查以确保您没有得到空骨架集合(它发生了)
  3. 使用 LINQ 获取第一个将其跟踪属性设置为跟踪的骨架。您也可以只使用 for 循环,我只是发现 LINQ 对这些类型的迭代很有用。
  4. 如果 LINQ 查询后的骨架不为空,请执行某些操作。

如果您想快速上手并有一些天赋,您可以利用下载 SDK Kinect Explorer 时包含的示例。有一个骨架查看器和 KinectSensorChooser,它可以让您拥有一个功能齐全的应用程序,只需很少的代码。在此处阅读有关此示例中包含的骨骼查看器的更多信息


我偶然发现了是否为此提供代码。我认为最好用执行操作所需的逻辑而不是实际代码来回答这个问题......因为你问了:) 但是,如果你想要这个代码,你可以从Channel 9 的快速入门我的书第 4 章中获得它


编辑(扩展 KinectExplorer):

为了扩展 KinectExplorer 以在检测到骨架时做出响应,只需在 KinectSkeletonViewer.xaml.cs 中找到函数 KinectAllFramesReady。在这个函数内部,有一个对 hasSkeletonData 的布尔检查,当 Kinect 的可视框架中存在骨架时,将调用这个 if 语句。所以:

   private void KinectAllFramesReady(object sender, AllFramesReadyEventArgs e)
   {
    //Checking for Skeleton
    if (haveSkeletonData)
    {
     //Do Stuff Here
    }
   }
于 2012-04-10T02:22:09.553 回答