【问题标题】:Microsoft Kinect + Telldus Tellstick微软 Kinect + Telldus Tellstick
【发布时间】:2012-04-15 12:51:42
【问题描述】:

我希望有人能帮我指明正确的方向。

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

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

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

问候, 约翰。

【问题讨论】:

  • Initialize Kinect > 当 Kinect 准备好然后扫描骨架 > 当检测到骨架时,将布尔值标记为“真”,这是更合乎逻辑的方式
  • 谢谢 Mekici,我很想知道我是否需要从骨骼跟踪中收集任何数据,或者我是否可以指定布尔命令而没有任何进一步的问题?
  • 事实上骨骼追踪没有必要!为什么必须使用骨架处理?您的方法可以是简单的图像处理,即运动检测?
  • 我希望能够在应用程序运行时显示实时骨骼数据,以增强 GUI。
  • 我不知道这在 SDK 中是否属实,但在 beta 版本中,每当我使用 bool 来判断是否检测到有人时,一切都冻结了。我猜他们修好了(我希望)

标签: c# automation kinect


【解决方案1】:

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

步骤:

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

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


我偶然发现了是否为此提供代码。我认为最好用执行操作所需的逻辑而不是实际代码来回答这个问题......因为你问了:) 但是,如果你想要这个代码,你可以从 Channel 9's Quickstartsmy book 章节中获取它四个


编辑(扩展 KinectExplorer):

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

   private void KinectAllFramesReady(object sender, AllFramesReadyEventArgs e)
   {
    //Checking for Skeleton
    if (haveSkeletonData)
    {
     //Do Stuff Here
    }
   }

【讨论】:

  • 嗨,大卫,感谢您的回复。顺便说一句,我打算在年初买你的书!但发布日期对我来说有点晚了。我已经将 WPF 查看器用于颜色流,并且它已注册为骨架方案。不过,我不了解 Skeletal SDK 示例,因为我对 C# 的了解仍然非常有限。快速入门指南有所帮助,但并没有真正针对我想要做的事情。您是否有可能只提供一些代码来为我指明正确的方向?不一定要彻底……
  • 感谢 J.Doe,由于 V1 发布时 API 的大量更改,我的书被搁置了。我想确保任何选择它的人都可以使用最新版本......我对我的答案进行了编辑,以便为您提供有关在 KinectExplorer 中查找以注入您的代码的位置的指示。我希望这会有所帮助。
  • ints 似乎工作,例如。 int PersonDetected = 0; Skeleton skeleton; if (skeleton.TrackingState == SkeletonTrackingState.Tracked) { PersonDetected = 1; }
  • 我已经尝试过你的建议 Outlaw Lemur,但我不断收到错误消息 use of unassigned local variable,我似乎无法弄清楚它的含义!
  • @J.Doe 那是因为skeleton 还没有定义......见stackoverflow.com/questions/10451456/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多