Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧
来源:互联网 发布:韩庚罢录天天向上知乎 编辑:程序博客网 时间:2024/05/16 03:24
(转载请注明出处)
使用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到工程下后,在工程里面添加一个*.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; };
笔者都不用说了吧。
至于可视化算法,这并不是重点,可以看看代码了解一下,写得比较乱.
不过这次的代码自己认为还写得不错,建议大家仔细看看
好了,这就是成果图了,彩色帧是黑色的,因为是关灯了,毕竟室友些睡觉了,像我这种人真蛋疼。
支持文件拖拽,改变窗口大小,比微软自带的好用点,就暂时代替微软坑爹的那个吧:
自己的电脑上关闭窗口,但是进程还未退出,微软您就慢慢坑吧
代码下载地址:点击这里, 名字打错了,打成“面形”了,请不要在意这些细节
- Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧
- Kinect for Windows SDK v2.0 开发笔记 (一)环境
- Kinect for Windows SDK v2.0 开发笔记 (三)深度帧与红外帧获取
- Kinect for Windows SDK v2.0 开发笔记 (二)彩色帧获取
- Kinect for Windows SDK v2.0 开发笔记 (五)骨骼帧与笑面男
- Kinect for Windows SDK v2.0 开发笔记 (九)面部帧获取
- Kinect for Windows SDK v2.0 开发笔记 (十) 高清面部帧(1) FACS 介绍
- Kinect for Windows SDK v2.0 开发笔记 (十七) 深度帧3D
- Kinect for Windows SDK v2.0 开发笔记 (四)玩家索引与绿屏技术
- Kinect for Windows SDK v2.0 开发笔记 (六)音频获取
- Kinect for Windows SDK v2.0 开发笔记 (七)语音识别(上)
- Kinect for Windows SDK v2.0 开发笔记 (八)语音识别(下)
- Kinect for Windows SDK v2.0 开发笔记 (十八) Fusion 基本2D显示
- Kinect for Windows SDK v2.0 开发笔记 (十一) 高清面部帧(2) 面部特征对齐
- Kinect for Windows SDK v2.0 开发笔记 (十二) 高清面部帧(3) 面部模型(2D)
- Kinect for Windows SDK v2.0 开发笔记 (十三) 高清面部帧(4) 面部模型构建器
- Kinect for Windows SDK v2.0 开发笔记 (十四) 高清面部帧(5) 面部模型 3D
- Kinect for Windows SDK开发入门(十五):进阶指引
- 【贪心法】田忌赛马,配置奶茶...codejam贪心水题集
- Liunx Learn
- Ubuntu 14.04安装 Metasploit Framework
- 修改 apk 默认的安装位置(不需要 Root)
- IOS 警告 汇总
- Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧
- 小心使用Protected(深入理解)
- 二项堆的概念与代码实现
- C/C++语言一些宏的介绍
- HTML 框架
- HTML图像
- HTML样式
- [分期付款] 建行安居分期,刚申请过,最高额度居然能申请到100万!汗。。
- Louis Vuitton Outlet Belts UG2np