Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧
(转载请注明出处)
使用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 开发笔记 (十五) 手势帧的更多相关文章
- Kinect for Windows SDK 1.8的改进及新特性
今年3月, 微软推出了Kinect for Windows SDK 1.7 更新,包括了手势识别 Kinect Interactions 和实时 3D 建模 Kinect Fusion 两项新技术. ...
- Kinect for Windows SDK开发学习相关资源
Kinect for Windows SDK(K4W)将Kinect的体感操作带到了平常的应用学习中,提供了一种不同于传统的鼠标,键盘及触摸的无接触的交互方式,在某种程度上实现了自然交互界面的理想,即 ...
- Kinect for Windows SDK开发初体验(一)环境配置
1.开发环境需求 (1).硬件需求 a.需要拥有双核,2.66GHz以上的CPU. b.显卡支持Microsoft DirectX 9.0c; c.2GB的内存 d.Kinect for Window ...
- Kinect for Windows SDK开发入门(一):开发环境配置
[译]Kinect for Windows SDK开发入门(一):开发环境配置 前几天无意中看到微软发布了Kinect for windows sensor,进去看了一下Kinect应用的例子,发现K ...
- Kinect for Windows SDK开发入门(15):进阶指引 下
Kinect for Windows SDK开发入门(十五):进阶指引 下 上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun K ...
- Kinect for Windows SDK开发入门(二):基础知识 上
原文来自:http://www.cnblogs.com/yangecnu/archive/2012/03/31/KinectSDK_Application_Fundamentals_Part1.htm ...
- 【计算机视觉】深度相机(八)--OpenNI及与Kinect for windows SDK的比较
OpenNI(开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API.OpenNI API由一组可用来编写通用自然交互应用的接口组成.OpenNI的主要目的是要形成一 ...
- 《ArcGIS Runtime SDK for Android开发笔记》
开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...
- OpenCV、PCL;Xtion、kinect;OpenNI、kinect for windows SDK比较
一.对比介绍: 1. OpenCV:开源跨平台,OpenCV于1999年由Intel建立,如今由Willow Garage提供支持. 2. OpenNI:OpenNI组织创建于2010年11月.主要成 ...
随机推荐
- php 图片生成器
一.需求 最近公司由于有大量的海报要做,而且海报的布局规模都是一样的,只是内容不同,所以老板想我开发一个图片的生成器.可以根据你输入的内容生成海报图片. 具体有需求有以下的需求 1.可以根据将每条数据 ...
- Cordova 开发环境搭建及创建第一个app
整理记录使用cordova创建app应用程序并将其部署至Android系统移动设备上操作过程,具体如下: 一.前期安装环境 1. 安装JDK(java开发工具包) 2. 安装gradle 3. 安装A ...
- 5.17从零开始搭建springboot-dubbo的例子
https://www.cnblogs.com/baijinqiang/p/10848259.html
- css属性代码大全总结(一)
一 CSS文字属性: color : #999999; /*文字颜色*/ font-family : 宋体,sans-serif; /*文字字体*/ font-size : 9pt; /*文字大小*/ ...
- IIS日志分析:SC-Status语义
在网站属性-网站-日志(属性) 中进行设定该站点IIS日志常规属性和扩展属性,扩展属性设置IIS日志包含字段显示. HTTP协议状态(sc-status)码的含义 IIS中 100 Continue ...
- c# 验证码实现代码
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...
- 【转载】深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- 开机进入GRUB不要慌,命令行也可启动Linux
1. 首先利用ls命令,找到Ubuntu安装在哪个磁盘分区: 比如输入ls后我的机器列出的磁盘分区信息如下: (hd0),(hd1),(hd1,gpt3),(hd1,gpt2),(hd1,gpt1) ...
- javascript中创建新节点的方法 标签: javascript 2016-12-25 11:38 55人阅读 评论(0)
一. var newnode=document.createElement("i"); var newnodeText=document.createTextNode(" ...
- 爬虫系列(五) re的基本使用
1.简介 究竟什么是正则表达式 (Regular Expression) 呢?可以用下面的一句话简单概括: 正则表达式是一组特殊的 字符序列,由一些事先定义好的字符以及这些字符的组合形成,常常用于 匹 ...