(转载请注明出处)

使用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. Speex回声消除原理深度解析

    这里假设读者具有自适应滤波器的基础知识.Speex的AEC是以NLMS为基础,用MDF频域实现,最终推导出最优步长估计:残余回声与误差之比.最优步长等于残余回声方差与误差信号方差之比,这个结论可以记下 ...

  2. windows系统下nodejs安装、环境配置及删除NPM全局配置

    nodejs安装及设置NPM全局路径 删除NPM全局路径配置 一.nodejs安装及设置NPM全局路径 第一步:下载安装文件 下载nodejs,官网:http://nodejs.org/downloa ...

  3. 自学Python六 爬虫基础必不可少的正则

    要想做爬虫,不可避免的要用到正则表达式,如果是简单的字符串处理,类似于split,substring等等就足够了,可是涉及到比较复杂的匹配,当然是正则的天下,不过正则好像好烦人的样子,那么如何做呢,熟 ...

  4. jQuery学习笔记之DOM操作、事件绑定(2)

    jQuery学习笔记之DOM操作.事件绑定(2) --------------------学习目录------------------------ 4.DOM操作 5.事件绑定 源码地址: https ...

  5. KVO的使用及底层实现

    1.概念 KVO(Key-Value-Observer)也就是观察者模式,是苹果提供的一套事件通知机制.允许对象监听另一个对象特定属性的改变,并在改变时接收到事件,一般继承自NSObject的对象都默 ...

  6. 关于基础的Set 和Get

    先附上一篇文章,讲的很清楚 在Core中,我们要是先这样设置了.在我们对这个上下文做查询工作的时候,例如: var head = _OMSECDatabase.OmsEcorderHead.Where ...

  7. SQL Server之十大存储过程

    下面介绍十大不同类型存储过程. 用户自定义存储过程 . 创建语法 create proc | procedure pro_name [{@参数数据类型} [=默认值] [output], {@参数数据 ...

  8. linux route命令的使用详解(转)

    route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以下问题:该Linu ...

  9. mssql for VSCode Guide

    前言 mssql 出自微软自己的 Visual Studio Code 开源插件,代码托管于 GitHub 上. 不过需要注意的一点是,使用 insert into 语句新增的数据...中文是会乱码的 ...

  10. 【Python基础】while循环语句

    Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句…… 执行语句可以是单个语句或语句 ...