(转载请注明出处)

使用SDK: Kinect for Windows SDK v2.0 public preview1409

同前面,由于SDK未完毕,不附上函数/方法/接口的超链接。

这次最终是新的东西了。是“手势帧”,只是原名是“可视化手势构建器”(Visual Gesture Builder)帧,是

SDK 2.0自带的手势解决方式。只是,假设您认为微软写得不可靠。甚至垃圾。您能够尝试自己写个。笔者在

提供的范例中。写了个简单的样子(几十行而已,不要期望过大)。

好了,这个可视化手势构建器(后面简称手势),须要包括头文件

#include <Kinect.VisualGestureBuilder.h>

须要链接静态库

#pragma comment ( lib, "Kinect20.VisualGestureBuilder.lib" )

这部是可选的,您能够显式动态链接dll文件:"Kinect20.VisualGestureBuilder.dll",也能够

使用这个库文件隐式动态该文件,还须要原SDK中某vgbtechs目录以下的2个dll文件。

使用VS的生成事件就可以,请注意x64还是x86.

还有就是,这个手势数据库是由SDK2.0自带的工具生成的*.gbd文件。

这节不过说明怎么使用这个文件,至于怎么使用工具创建文件,应该是下节吧。谁知道

可能大家看过了SDK自带的“Visual Gesture Builder Viewer”了:

由于手势帧有点简单,我们就仿造这个做一个吧:

0. 支持随意窗体尺寸

我们之前的样例一直是固定窗体尺寸,这次能够改变窗体大小了,须要响应WM_SIZE消息

    为了方便地改变窗体,我们使用D2D 1.0中的D2D1HwndRenderTarget,由于自带了Resize方法.

1.加入图标,我们使用Kinect SDK自带的图标吧

复制app.ico到project下后,在project里面加入一个*.rc文件,右键,查看代码,不要编辑,毕竟Express版无法编辑。

写上

1 ICON "app.ico"

1代表编号    ICON代表类型     "app.ico"代表文件名称

这样编译,程序自己主动就会加入图标了。

接下来给程序加入图标:注冊窗体时

   wcex.hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(1));

    那个1就是之前rc文件填的编号。就可以

2.支持窗体文件拖拽:

先注冊可以进行文件拖拽: DragAcceptFiles(m_hwnd, TRUE);

之后再响应WM_DROPFILES消息就可以

3.新的花样

我们之前使用基于等待垂直同步的轮询模式,也使用了基于消息的事件模式.这次我们使用基于计时器的轮询模式。

一个SetTimer就可以,操作系统的时间片通常是20ms,所以我们就20ms的计时器吧,反正高于30FPS;

4. 渲染策略

在左边渲染彩色帧深度帧骨骼帧。简直就是把最前面几节的代码复制过来。

在右边可视化手势结果。

SDK 自带的手势解决方法中,手势分为两种:

离散手势连续手势

enum _GestureType
{
GestureType_None = 0,
GestureType_Discrete = 1,
GestureType_Continuous = 2
} ;

简单过程: (轻车熟路了, * 是可能须要动态改动的)

创建手势帧源(CreateVisualGestureBuilderFrameSource)

* 加入手势(IVisualGestureBuilderFrameSource::AddGesture(s))

* 删除手势(IVisualGestureBuilderFrameSource::RemoveGesture)

* 更换跟踪ID(IVisualGestureBuilderFrameSource::put_TrackingId)

打开读取器(IVisualGestureBuilderFrameSource::OpenReader)

轮询获取手势帧:(IVisualGestureBuilderFrameReader::CalculateAndAcquireLatestFrame)

获取对应结果

    IVisualGestureBuilderFrame::get_ContinuousGestureResult

    IVisualGestureBuilderFrame::get_DiscreteGestureResult

这两个方法,參数均是: 第一个想要获取结果的手势, 第二个是相应的结果。

从这个能够看出:

将两种手势分开储存能够降低方法调用,可是为了方便。这里就没有分类;

手势结果有:

连续型: 进度(float)

离散型: 结果(boolean), 置信度(float), 是否为首帧(boolean)

那么,问题来了!

游戏编程哪家强?

怎么获取手势呢?

CreateVisualGestureBuilderDatabaseInstanceFromFile

CreateVisualGestureBuilderDatabaseInstanceFromMemory

这两个能够获取手势数据库了,

    MIDL_INTERFACE("7FA8E82E-E43E-4DD6-A481-1E967DC4B7C8")
IVisualGestureBuilderDatabase : public IUnknown
{
public:
virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AvailableGesturesCount(
/* [annotation][out][retval] */
_Out_ UINT *numGestures) = 0; virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AvailableGestures(
/* [annotation][in] */
_In_ UINT32 capacity,
/* [annotation][size_is][out] */
_Out_writes_all_(capacity) IGesture **availableGestures) = 0; };

笔者都不用说了吧。

至于可视化算法,这并非重点。能够看看代码了解一下,写得比較乱.

只是这次的代码自己觉得还写得不错。建议大家细致看看

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHVzdHBn/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

好了,这就是成果图了。彩色帧是黑色的,由于是关灯了。毕竟室友些睡觉了,像我这样的人真蛋疼。

支持文件拖拽。改变窗体大小。比微软自带的好用点。就临时取代微软坑爹的那个吧:

自己的电脑上关闭窗体。可是进程还未退出。微软您就慢慢坑吧

代码下载地址:点击这里
名字打错了,打成“面形”了,请不要在意这些细节

Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧的更多相关文章

  1. Kinect for Windows SDK 1.8的改进及新特性

    今年3月, 微软推出了Kinect for Windows SDK 1.7 更新,包括了手势识别 Kinect Interactions 和实时 3D 建模 Kinect Fusion 两项新技术. ...

  2. Kinect for Windows SDK开发学习相关资源

    Kinect for Windows SDK(K4W)将Kinect的体感操作带到了平常的应用学习中,提供了一种不同于传统的鼠标,键盘及触摸的无接触的交互方式,在某种程度上实现了自然交互界面的理想,即 ...

  3. Kinect for Windows SDK开发初体验(一)环境配置

    1.开发环境需求 (1).硬件需求 a.需要拥有双核,2.66GHz以上的CPU. b.显卡支持Microsoft DirectX 9.0c; c.2GB的内存 d.Kinect for Window ...

  4. Kinect for Windows SDK开发入门(一):开发环境配置

    [译]Kinect for Windows SDK开发入门(一):开发环境配置 前几天无意中看到微软发布了Kinect for windows sensor,进去看了一下Kinect应用的例子,发现K ...

  5. Kinect for Windows SDK开发入门(15):进阶指引 下

    Kinect for Windows SDK开发入门(十五):进阶指引 下 上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun K ...

  6. Kinect for Windows SDK开发入门(二):基础知识 上

    原文来自:http://www.cnblogs.com/yangecnu/archive/2012/03/31/KinectSDK_Application_Fundamentals_Part1.htm ...

  7. 【计算机视觉】深度相机(八)--OpenNI及与Kinect for windows SDK的比较

    OpenNI(开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API.OpenNI API由一组可用来编写通用自然交互应用的接口组成.OpenNI的主要目的是要形成一 ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...

  9. OpenCV、PCL;Xtion、kinect;OpenNI、kinect for windows SDK比较

    一.对比介绍: 1. OpenCV:开源跨平台,OpenCV于1999年由Intel建立,如今由Willow Garage提供支持. 2. OpenNI:OpenNI组织创建于2010年11月.主要成 ...

随机推荐

  1. JDK多任务执行框架(Executor框架)

    Executor的常用方法 为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效地进行线程控制.它们都在java.util.concurrent包中,是JDK开发包的核心. ...

  2. ACM_开心消消乐

    开心消消乐 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大白最近喜欢上了开心消消乐,于是英语基础好的他准备让课文中英语句子也来 ...

  3. 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常

    代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常 设置 padding=0

  4. Last-Modified If-Modified-Since ETag If-None-Match

    Last-Modified.If-Modified-Since 有些数据随时都在变化. CNN.com 的主页经常几分钟就更新.另一方面,Google.com 的主页几个星期才更新一次 (当他们上传特 ...

  5. Java基础12一IO流

    1.IO流的原理 利用数据通道实现程序和数据源之间数据的的读写操作.  2.IO流分类 输入流.输出流.字节流.字符流.节点流.过滤流  3.InputStream 字节输入流 实现类FileInpu ...

  6. System.DateTime.Now 24小时制。

    this.Label6.Text = "当前时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") ...

  7. SQL Server存储过程作业(二)

    阶段1:练习——统计某类型客房的入住客人人数 需求说明 使用存储过程统计在指定类型的客房入住客人的总人数 提示: 存储过程的输入参数是指定的客房类型名称 USE Hotel GO --阶段1:查询入住 ...

  8. 读书笔记「Python编程:从入门到实践」_8.函数

    8.1 定义函数 def greet_user(): # def 来告诉Python你要定义一个函数.这是函数定义 """Hello World""& ...

  9. 【sqli-labs】 less42 POST -Error based -String -Stacked(POST型基于错误的堆叠查询字符型注入)

    Forgot your password? New User click here? 看源码,可以发现和less 24不同的一点在于password字段没有进行转义处理 那就对password字段进行 ...

  10. 第八章 Python之常用模块

    日志模块 import logging import logging #默认级别为warning,默认打印到终端 logging.debug( logging.info( logging.warnin ...