(转载请注明出处)

使用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. APPStore 发布流程及证书申请

    最新的 iOS 申请证书与发布流程(2016.7) 今天刚好客户定制的APP需要上架,也提供了新的开发者账号,所以就顺带把申请证书与发布流程写一遍. 证书是什么? 上面这个就是我们申请好证书后,下载到 ...

  2. 笔记《javascript高级程序设计》 第12章 DOM2和DOM3

    DOM2 级核心:在 1 级基础上构建,为节点添加更多方法和属性 DOM2 级视图:为文档定义了基于样式信息的不同视图 DOM2 级事件:说明了如何使用事件和DOM文档交互 DOM2 级样式:如何以编 ...

  3. CentOS7 搭建Kafka(一)zookeeper篇

    CentOS7 搭建Kafka(一)zookeeper篇 近几年当红小生Kafka备受各路英雄好汉追捧,一点不比老前辈RabbitMQ和ActiveMQ差,因为流行,所以你就得学啊:我这么懒,肯定是不 ...

  4. A - Next Round

    Problem description "Contestant who earns a score equal to or greater than the k-th place finis ...

  5. xhtml1-frameset.dtd

    <!-- Extensible HTML version 1.0 Frameset DTD This is the same as HTML 4 Frameset except for chan ...

  6. MySQL学习笔记之右连接

    MySQL的右连接 #右连接,以右表为基表 select course.stuid,course.stuname,sex,course,city from class1 right join cour ...

  7. 【转】SQL SERVER 主体,已同步

    转自郭大侠博客:  https://www.cnblogs.com/gered/p/10601202.html 目录 SQL SERVER 基于数据库镜像的主从同步... 1 1.概念... 2 1. ...

  8. net .异步委托知识

    以前在编程中,异步用的比较少,导致C# 一些基础的 东西用法都不怎么熟悉,经常要用的时候在去查找资料比较被动,而已没真正里面理解起来,始终感觉不是自己的知识 (题外话) 首先委托关键字  Delega ...

  9. 大白话理解箭头函数this

    var obj1={ num:4, fn:function(){ num:5; var f=() => { num:6; console.log(this.num); //4 外层非箭头函数包裹 ...

  10. android黑科技系列——爆破一款应用的签名验证问题

    一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是 ...