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月.主要成 ...
随机推荐
- APPStore 发布流程及证书申请
最新的 iOS 申请证书与发布流程(2016.7) 今天刚好客户定制的APP需要上架,也提供了新的开发者账号,所以就顺带把申请证书与发布流程写一遍. 证书是什么? 上面这个就是我们申请好证书后,下载到 ...
- 笔记《javascript高级程序设计》 第12章 DOM2和DOM3
DOM2 级核心:在 1 级基础上构建,为节点添加更多方法和属性 DOM2 级视图:为文档定义了基于样式信息的不同视图 DOM2 级事件:说明了如何使用事件和DOM文档交互 DOM2 级样式:如何以编 ...
- CentOS7 搭建Kafka(一)zookeeper篇
CentOS7 搭建Kafka(一)zookeeper篇 近几年当红小生Kafka备受各路英雄好汉追捧,一点不比老前辈RabbitMQ和ActiveMQ差,因为流行,所以你就得学啊:我这么懒,肯定是不 ...
- A - Next Round
Problem description "Contestant who earns a score equal to or greater than the k-th place finis ...
- xhtml1-frameset.dtd
<!-- Extensible HTML version 1.0 Frameset DTD This is the same as HTML 4 Frameset except for chan ...
- MySQL学习笔记之右连接
MySQL的右连接 #右连接,以右表为基表 select course.stuid,course.stuname,sex,course,city from class1 right join cour ...
- 【转】SQL SERVER 主体,已同步
转自郭大侠博客: https://www.cnblogs.com/gered/p/10601202.html 目录 SQL SERVER 基于数据库镜像的主从同步... 1 1.概念... 2 1. ...
- net .异步委托知识
以前在编程中,异步用的比较少,导致C# 一些基础的 东西用法都不怎么熟悉,经常要用的时候在去查找资料比较被动,而已没真正里面理解起来,始终感觉不是自己的知识 (题外话) 首先委托关键字 Delega ...
- 大白话理解箭头函数this
var obj1={ num:4, fn:function(){ num:5; var f=() => { num:6; console.log(this.num); //4 外层非箭头函数包裹 ...
- android黑科技系列——爆破一款应用的签名验证问题
一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是 ...