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月.主要成 ...
随机推荐
- JDK多任务执行框架(Executor框架)
Executor的常用方法 为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效地进行线程控制.它们都在java.util.concurrent包中,是JDK开发包的核心. ...
- ACM_开心消消乐
开心消消乐 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大白最近喜欢上了开心消消乐,于是英语基础好的他准备让课文中英语句子也来 ...
- 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常
代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常 设置 padding=0
- Last-Modified If-Modified-Since ETag If-None-Match
Last-Modified.If-Modified-Since 有些数据随时都在变化. CNN.com 的主页经常几分钟就更新.另一方面,Google.com 的主页几个星期才更新一次 (当他们上传特 ...
- Java基础12一IO流
1.IO流的原理 利用数据通道实现程序和数据源之间数据的的读写操作. 2.IO流分类 输入流.输出流.字节流.字符流.节点流.过滤流 3.InputStream 字节输入流 实现类FileInpu ...
- System.DateTime.Now 24小时制。
this.Label6.Text = "当前时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") ...
- SQL Server存储过程作业(二)
阶段1:练习——统计某类型客房的入住客人人数 需求说明 使用存储过程统计在指定类型的客房入住客人的总人数 提示: 存储过程的输入参数是指定的客房类型名称 USE Hotel GO --阶段1:查询入住 ...
- 读书笔记「Python编程:从入门到实践」_8.函数
8.1 定义函数 def greet_user(): # def 来告诉Python你要定义一个函数.这是函数定义 """Hello World""& ...
- 【sqli-labs】 less42 POST -Error based -String -Stacked(POST型基于错误的堆叠查询字符型注入)
Forgot your password? New User click here? 看源码,可以发现和less 24不同的一点在于password字段没有进行转义处理 那就对password字段进行 ...
- 第八章 Python之常用模块
日志模块 import logging import logging #默认级别为warning,默认打印到终端 logging.debug( logging.info( logging.warnin ...