使用kinect在C ++中获取2个手势

时间:2014-03-15 00:40:17

标签: c++ kinect

我正在尝试构建一个只接受Kinect手动输入的程序

我需要获得3件事, - 基于OpenGL输出数据的kinect深度视频流 - 只识别2个简单的手势,张开的手和闭合的拳头,我将建立一些功能来解决每个手的布尔形式 - 左手和右手位置,如果可能做超过2手,那将是很好的

基本上用kinect中的打开和关闭手部动作进行单击并拖动鼠标操作,让我们只用一只手开始,如果它可以超过2只手,我会学到的后面。

从我到目前为止所读到的内容,Kinect可以轻松地完成这项工作而无需任何额外的库,因此我应该能够使用Kinect库和OpenGL构建我的应用程序

我听说网上有很多这样的例子,但到目前为止我发现的只有C#,而不是C ++,我程序的其他组件只有C ++,如果可能的话我想继续使用C ++。

1 个答案:

答案 0 :(得分:1)

基本上有两层:

  • 交互流(C ++或托管)
  • 交互控制(仅限托管,特定于WPF)

WPF控件是根据交互流实现的。

如果您使用的是WPF以外的UI框架,则需要执行以下操作:

  • 实施“交互客户端”界面。这个界面有一个 单一方法,GetInteractionInfoAtLocation。这个方法会 在跟踪用户的情况下由交互流重复调用 手部动作。每次呼叫时,您都有责任 返回“交互信息”(托管中的InteractionInfo, 给定用户,手和位置的C ++中的NUI_INTERACTION_INFO)。 从本质上讲,这就是交互流执行命中测试的方式 在用户界面中的控件上。
  • 创建交互流的实例,为其提供一个 参考您的交互客户端实现。
  • 启动Kinect传感器的深度和骨架流。
  • 对于传感器流产生的每个深度和骨架, 将帧的数据传递给适当的方法(ProcessDepth或 ProcessSkeleton)的交互流。作为交互流 处理来自传感器的输入帧,它将产生 代码要使用的交互框架。在C ++中,调用 交互流的GetNextFrame方法来检索每个这样的帧。 在托管代码中,您可以调用OpenNextFrame,也可以订阅 InteractionFrameReady事件。
  • 从每个交互框架中读取数据以找出用户的内容 是在做。每个帧都有一个时间戳和一组用户信息 结构,每个结构都有一个用户跟踪ID和一个集合 手信息结构,提供有关每只手的信息 位置,状态和抓握/解除事件

您可以找到完整的示例here