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月.主要成 ...
随机推荐
- Speex回声消除原理深度解析
这里假设读者具有自适应滤波器的基础知识.Speex的AEC是以NLMS为基础,用MDF频域实现,最终推导出最优步长估计:残余回声与误差之比.最优步长等于残余回声方差与误差信号方差之比,这个结论可以记下 ...
- windows系统下nodejs安装、环境配置及删除NPM全局配置
nodejs安装及设置NPM全局路径 删除NPM全局路径配置 一.nodejs安装及设置NPM全局路径 第一步:下载安装文件 下载nodejs,官网:http://nodejs.org/downloa ...
- 自学Python六 爬虫基础必不可少的正则
要想做爬虫,不可避免的要用到正则表达式,如果是简单的字符串处理,类似于split,substring等等就足够了,可是涉及到比较复杂的匹配,当然是正则的天下,不过正则好像好烦人的样子,那么如何做呢,熟 ...
- jQuery学习笔记之DOM操作、事件绑定(2)
jQuery学习笔记之DOM操作.事件绑定(2) --------------------学习目录------------------------ 4.DOM操作 5.事件绑定 源码地址: https ...
- KVO的使用及底层实现
1.概念 KVO(Key-Value-Observer)也就是观察者模式,是苹果提供的一套事件通知机制.允许对象监听另一个对象特定属性的改变,并在改变时接收到事件,一般继承自NSObject的对象都默 ...
- 关于基础的Set 和Get
先附上一篇文章,讲的很清楚 在Core中,我们要是先这样设置了.在我们对这个上下文做查询工作的时候,例如: var head = _OMSECDatabase.OmsEcorderHead.Where ...
- SQL Server之十大存储过程
下面介绍十大不同类型存储过程. 用户自定义存储过程 . 创建语法 create proc | procedure pro_name [{@参数数据类型} [=默认值] [output], {@参数数据 ...
- linux route命令的使用详解(转)
route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以下问题:该Linu ...
- mssql for VSCode Guide
前言 mssql 出自微软自己的 Visual Studio Code 开源插件,代码托管于 GitHub 上. 不过需要注意的一点是,使用 insert into 语句新增的数据...中文是会乱码的 ...
- 【Python基础】while循环语句
Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句…… 执行语句可以是单个语句或语句 ...