Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上
- 格式:doc
- 大小:753.50 KB
- 文档页数:19
体感(Kinect)技术开发和应⽤简介体感有多种;Kinect是微软做的;⼀微软 Kinect 技术简介Kinect使⼈机交互从⼆维扩展到三维,进⼊到⾮接触的交互体验。
Kinect硬件基本组成:传动马达,⽤于仰⾓控制;彩⾊摄像头;红外摄像头;红外投影机;麦克风阵列(4个);主板和芯⽚;底座,风扇等;⼯作原理。
Kinect传感器提供三⼤类原始数据:深度数据流(depth stream),彩⾊视频流(color stream),原始⾳频数据(raw audio stream);分别对应三个处理过程:⾻骼跟踪(Skeletal Tracking),⾝份识别(Identify),语⾳识别(Speech Pipeline)。
Kinect SDK应⽤层API包括三⼤组件:NUI API,SDK的核⼼,⽤来处理彩⾊图像流,深度数据,⾻骼跟踪,控制Kinect设备;Kinect Audio DMO,提供波束成形和⾳源定位功能;Speech SDK,⾳频、语⾳、多媒体API以及微软语⾳识别功能。
初始化API时,设定⾻骼跟踪选项,应⽤程序可以最多同时⾻骼跟踪2个⽤户,获得每个⽤户20个⾻骼关节点的三维坐标。
(Kinect SDK 1.7版本)开发所需技能。
C#,WPF;或C++;常⽤数据结构;常⽤解析⼏何、坐标变换;图形学基础,如位图、像素;熟悉⼀些3D开发环境更好。
系统要求:Kinect SDK可以免费下载;Kinect 传感器可在亚马逊或京东购买;Win7, VS2010以上。
Kinect的视距和⾻骼跟踪范围不是很⼤,⼤体是⼏⽶范围的⼀个⽴体空间。
⼀般开发之初可以先根据获取的⾻骼关节绘制⽕柴⼈,以初步了解开发。
⽕柴⼈就是指返回关节坐标给程序,⾃⼰连线来绘制⼀个⼈形。
Kinect可返回的⼈体关节和⽕柴⼈⽰例如下;⼆体感应⽤简介虚拟应⽤Kinect试⾐镜,基于kinect体感技术的试⾐镜,让客户能够⾼速的试穿⾐服;就是不⽤脱⾐服,可以快速看到⼀件件⾐服穿在⾝上的效果;3D建模3D摄像机, ⽤两个KINECT实现3D摄像机的基本效果;利⽤Kinect对⼈体进⾏3D建模,然后依据⼈体的3D信息,连接对应的塑模设备,塑造出⼈体塑像;机械控制⽤Kinect 操控遥控直升机;Kinect Robo,使⽤Kinect作为机器⼈的头,通过kinect检測周围环境,并进⾏3D建模,来指导机器⼈的⾏动;虚拟乐器空⽓吉他,通过Kinect⼿势操作虚拟吉他弹奏⾳乐;Kinect弹奏中国古代乐器,通过⼿势的改变能够演奏出不同中国古代乐器的声⾳;计算机相关应⽤Kinect⼿势操作浏览器,通过Kinect⼿势对浏览器进⾏翻页,下拉,放缩等操作;Kinect体感控制看⽚,应⽤在⼿术室,⼿术者可通过体感控制查看患者的影像资料;因为戴⼿套的情况下不⽅便⽤⿏标和键盘操作电脑;虚拟实验Kinect蜡笔物理,使⽤Kinect⼿势画图,通过体感控制所画图形,并使之具有物理特性,⽐⽅重⼒,吸引⼒等;也可以将主持⼈与背景图合成,实现类似天⽓预报导播。
MS SDK v1.0:Kinect for Windows SDK同时提供了native code 和managed code的API供开发者使用,SDK 的更新可以在网站/b/kinectforwindows/处获得;编写基于Kinect的应用程序本质上通编写其他Windows一样,只不过Kinect的SDK提供了一些支持Kinect感应器的特征API而已,其中包括color images, depth images, audio input 和skeletal data;下载安装Kinect for Windows SDK,该SDK中包括:·实现基于Kinect的应用程序的驱动和技术文档·编写managed和unmanaged代码的API参考手册和文档,API在不同的硬件环境下都能较高效的提供多媒体数据流;·展示Kinect功能的样例,其中的sample browser集中管理了这些样例;·将所所提供的样例分解成不同的问题供用户学习解决的How Tos;在read-me中可以找到关于安装SDK的细节提示以及最新的bug反馈;以下是Kinect for Windows SDK能够实现的一些特性示例:·通过骨架追踪系统识别并追踪1-2个视野范围内的活动用户;·通过能获取彩色图像数据流和深度图像数据流的XYZ-depth camera来确定物体到感应器之间的距离;·通过四元麦克风阵列捕获消除了噪声和回声的声音信息或者在捕获声音的同时使用beam finding来确定声源位置;·通过整合了Microsoft Speech recognition API的声音捕获系统进行语音识别;Kinect for Xbox 360和Kinect for Windows有一些特性差别,主要在于前者有专门的性能优化;此外,此SDK并不能用于开发可移植到Xbox 360的游戏,基于Xbox 360 与Windows 平台的较大差异,建议使用XDK软硬件系统来开发Xbox 360应用程序;使用Kinect for Windows SDK开发程序所要求的软硬件环境:操作系统:·Windows 7 or Windows Embedded Standard 7·只能在本地环境中开发运行此SDK支持的程序,因为Kinect的驱动不能安装在虚拟机中;硬件环境:·电脑最低配置要求:·32位(x86)或64位(x64)处理器·双核,2.66GHz或者更快的处理器·一个供Kinect Sensor使用的USB2.0总线端口·2GB内存·支持DirectX 9.0c的显卡·一个Kinect Sensor软件环境:·MS VS2010 Express 或其它VS2010版本·.NET Framework 4(VS 2010集成安装)此外,运行C#语音样例需要如下软件环境要求:·Microsoft Speech Platform - Runtime(Version 11),此运行时环境要求在Kinect运行时安装时被自动安装;·Microsof Speech Platform - Software Development Kit(SDK)(Version 11)下图显示了Kinect Sensor的感知范围,其中的default range对Xbox 360和Kinect for Windows 都适用,而near range仅对后者适用:上图是在NUI_IMAGE_STREAM_FLAG_DISTINCT_OVERFLOW_DEPTH_V ALUES标识在打开的情况下API返回的,当标识关闭时,除了normal range内的值返回正常以外,其余都返回0;另外,在default模式下才可正常追踪人体骨架的20个关节点,在near模式下,无法完整追踪20个关节点。
微软正式发布Kinect for Windows及SDK10月9日,微软正式在中国发布了Windows版Kinect感应器。
从现在起,企业可以充分利用Kinect 体感功能,为中国客户开发和部署商业解决方案。
同期,微软还发布了最新版本的Kinect for Windows软件开发工具包(SDK),以及供全球下载的运行时间。
Kinect for Windows平台支持企业和开发者利用PC及其它Windows终端使用Kinect,以开发更多应用给用户带来更多创新体验。
Kinect for Windows平台包括Kinect for Windows感应器,Kinect for Windows 开发工具包(SDK),以及商用许可。
Kinect for Windows能够帮助用户通过手势和语音与计算机进行自然交互,从而向各行业领导厂商提供全新的交互工具以改变其客户和员工的人机交互方式。
Kinect for Windows的发布意味着用户不再局限于使用键盘、鼠标或触控屏幕进行计算机操作,使用者只需给出口令即可完成应用命令操作。
如果他们想要在屏幕上移动对象,只需通过手势即可完成。
这一创新性的自然界面人机交互开启了全新的计算应用体验类别,其中包括:• 零售行业——与零售商店和公共场所数字标牌信息亭进行远程互动;• 医疗行业——充分利用语音和手势功能进行远程诊疗,以确保无菌环境和免控制要求;• 利用Kinect for Windows的人体跟踪功能来开发培训和模拟工具,如物理疗法应用、员工学习模块或体育健身应用;• 教育领域——在教室中,对数据进行可视化和操纵。
Kinect for Windows感应器中国地区建议零售价格为人民币1930元,可在京东商城网站购买。
Kinect for Windows感应器提供了Windows开发者所要求的功能和特性,其中包括:用户可在无需接触键盘或屏幕的情况下进行人机交互(例如在会议室、手术室或办公室)的近距离功能。
Kinect动作捕捉系统介绍一、关于Kinect1、简介Kinectfor Xbox 360,简称Kinect,是由微软开发,应用于Xbox 360 主机的周边设备。
它让玩家不需要手持或踩踏控制器,而是使用语音指令或手势来操作Xbox360 的系统界面。
它也能捕捉玩家全身上下的动作,用身体来进行游戏,带给玩家“免控制器的游戏与娱乐体验”。
其在2010年11月4日于美国上市,建议售价149美金。
Kinect在销售前60天内,卖出八百万部,目前已经申请金氏世界记录,成为全世界销售最快的消费性电子产品。
2012年2月1日,微软正式发布面向Windows系统的Kinect版本“Kinect for Windows”,建议售价249美金。
Kinect有三个镜头,中间的镜头是RGB 彩色摄影机,用来采集彩色图像。
左右两边镜头则分别为红外线发射器和红外线CMOS 摄影机所构成的3D结构光深度感应器,用来采集深度数据(场景中物体到摄像头的距离)。
彩色摄像头最大支持1280*960分辨率成像,红外摄像头最大支持640*480成像。
Kinect还搭配了追焦技术,底座马达会随着对焦物体移动跟着转动。
Kinect也内建阵列式麦克风,由四个麦克风同时收音,比对后消除杂音,并通过其采集声音进行语音识别和声源定位。
2013年11月22日,随着xbox one的发售,kinect也更新为2.0版本。
二代和一代的主要区别在于它是专门为XboxOne设计,外形作了改进,精度更高,在捕捉在捕捉肢体动作和表情的基础上,增加了手指动作捕捉和心跳感应。
强化了分辨率至1080P,每秒处理的数据最多达2GB,镜头捕捉角度也增加至60%。
2、硬件功能3、安装部署除自定义应用程序处理外,对于将大量使用Kinect for Windows v2 身体跟踪的应用程序,建议使用下面的计算机配置作为参考。
该方案允许kinect发挥绝佳的性能,同时仍然能容纳附加的应用程序处理并维持最佳帧速率。
• 149•针对运动功能障碍患者的康复训练需求,设计一种基于Kinect 的康复训练辅助系统。
该系统利用Kinect 骨骼追踪技术,获取人体骨骼节点坐标,计算骨骼向量,提取动作特征,并结合DTW (Dy-namic Time Warping )算法,将患者训练动作与标准动作进行匹配,根据匹配结果对患者动作进行评估和矫正。
同时设计基于SSM (Spring 、SpringMVC 、MyBatis )框架的训练数据管理系统,对患者训练数据进行整理分析,给出可视化展示,便于跟踪患者训练状况,使康复训练更加科学高效。
随着人口老龄化,高血压、脑卒中的患病率日益增长,运动功能障碍的人数逐年上升。
医学研究表明,科学的康复训练是治疗的关键环节之一。
在医疗康复领域,传统的康复训练需要穿戴复杂的设备,并且专业的康复医师较少,整体康复医疗资源比较缺乏。
随着科技的发展,人机交互技术步入人们的视线。
作为人机交互领域的研究热点,体感交互技术开发出的康复训练系统所需设备廉价、小型轻便,能实现康复训练的家庭化,有效弥补了传统康复训练方法的缺陷。
因此,本文设计一套基于Kinect 的康复训练辅助系统,为广大患者在社区和家庭更有效地得到康复治疗提供帮助。
1 系统总体结构设计系统以Kinect 骨骼追踪技术为基础,主要由四个模块组成:标准动作生成模块、患者动作匹配模块、训练评估与矫正模块和训练数据管理模块。
图1给出了系统结构设计图。
图1 系统结构设计图(1)标准动作生成模块。
由多人录入康复医师设计的标准训练动作,利用Kinect 采集动作的骨骼数据,进行特征提取,将多人的动作特征整合后,得到该标准动作的模板特征并存入数据库。
(2)患者动作匹配模块。
通过读取患者的实时骨骼节点数据,提取动作特征,获得患者训练动作序列,再用 DTW 算法计算其与标准动作库中样本序列的匹配程度,得到动作匹配结果。
(3)训练评估与矫正模块。
系统根据患者所有动作的匹配结果计算训练得分,给出动作评级;系统会将患者动作不规范的地方标红并圈出,以达到动作矫正的效果。
Kinect到底怎么侦测3D影像?关于Kinect所使用的辨识技术,网路上有许多以讹传讹的说法。
例如用两颗摄影镜头拍摄成3D影像、并以红外线探测Z轴深度做感应;也有许多人以为Kinect是利用红外线纪录体温的方式,来找出人体的影像,这些当然都不是正确答案。
微软在去年(2009年)初收购了一家以色列籍的3DV Systems公司(来源:reuters),包含公司员工以及所有专利技术都归微软所有。
该公司拥有名为ZCam的动作感测系统,采用TOF(Time of Flight)技术,让许多人认为Project Natal诞生计划(Kinect前身)就是采用TOF技术,但......最后证实大家还是猜错了。
这里简单介绍一下TOF技术,大家应该可以从字面猜到含意,Time of Flight就是去计算光线飞行的时间。
首先让装置发出脉冲光,并且在发射处接收目标物的反射光,藉由测量时间差算出目标物的距离;ZCam就是使用 TOF技术,使用红外线以及Accelerometers加速度计感应器,感测立体空间的相对位置变化,建构灰阶距离影像的深度感应器。
3DV Systems 公司研发该技术已经长达10年,并取得许多专利技术,所以受到了微软的瞩目。
不过就在今年(2010年)年初时,微软的开发人员却大爆Project Natal诞生计划并不是如外界传言采用3DV Systems公司的TOF技术(来源:engadget)。
微软先进技术研究院副总裁Moshe Lichtman,于去年接受媒体访问时,就表示并购3DV Systems公司目的不在于使用他们的技术,而是作为保障自家感测技术的后盾。
因为专利技术认定上有时较为模糊,稍有不慎就会被对手告侵犯专利权;3DV Systems拥有许多相关专利,因此藉由并购3DV Systems快速取得专利,也能避免被其他对手并购,阻挠微软的产品研发。
微软在今年4月时,正式公布与另一家以色列公司PrimeSense合作(来源:gossipgamers),这下才让Kinect使用的3D侦测技术有了着落。
[译]Kinect for Windows SDK开发入门(三):基础知识下1. 性能改进上文的代码中,对于每一个彩色图像帧,都会创建一个新的Bitmap对象。
由于Kinect视频摄像头默认采集频率为每秒30幅,所以应用程序每秒会创建30个bitmap对象,产生30次的Bitmap内存创建,对象初始化,填充像素数据等操作。
这些对象很快就会变成垃圾等待垃圾回收器进行回收。
对数据量小的程序来说可能影响不是很明显,但当数据量很大时,其缺点就会显现出来。
改进方法是使用WriteableBitmap对象。
它位于System.Windows.Media.Imaging命名空间下面,该对象被用来处理需要频繁更新的像素数据。
当创建WriteableBitmap时,应用程序需要指定它的高度,宽度以及格式,以使得能够一次性为WriteableBitmap 创建好内存,以后只需根据需要更新像素即可。
使用WriteableBitmap代码改动地方很小。
下面的代码中,首先定义三个新的成员变量,一个是实际的WriteableBitmap对象,另外两个用来更新像素数据。
每一幅图像的大小都是不变的,因此在创建WriteableBitmap时只需计算一次即可。
InitializeKinect方法中加粗的部分是更改的代码。
创建WriteableBitmap对象,准备接收像素数据,图像的范围同时也计算了。
在初始化WriteableBitmap的时候,同时也绑定了UI元素(名为ColorImageElement的Image对象)。
此时WriteableBitmap中没有像素数据,所以UI上是空的。
还需要进行的一处改动是,对ColorFrameReady事件响应的代码。
如下图。
首先删除之前创建Bitmap那部分的代码。
调用WriteableBitmap对象的WritePixels方法来更新图像。
方法使用图像的矩形范围,代码像素数据的数组,图像的Stride,以及偏移(offset).偏移量通常设置为0。
Kinect for Windows SDK开发初体验(一)忘记本文作者叫什么了,很是抱歉,希望大伙知道的提醒一下,再次感谢原作者!环境配置万众期待的Kinect for Windows SDK终于在广大开发者的千呼万唤中发布了beta版,作为历史上销售最快的消费电子产品,早就有无数人想将其用于其他领域了。
微软虽然在硬件接口上制造了一点小障碍,但并没有对Kinect的输出做任何加密。
于是,基于Kinect的各种应用层出不穷,也有开源社区提供了针对Kinect的USB驱动程序,比如OpenKinect等。
微软从谏如流,推出了官方版的Kinect for Windows SDK,终于让广大开发者可以名正言顺地使用Kinect SDK了。
我希望能够在第一时间为国内开发者提供Kinect开发相关的介绍,根据微软官方提供的指南,从浅入深,将自己摸索Kinect SDK 的过程记录下来。
安装环境首先来说,Kinect for Windows SDK的下载地址:/en-us/um/redmond/projects/kinectsdk/download.aspxKinect SDK目前只支持Windows 7,分为x86和x64两个版本。
开发工具方面还需要.NET Framework 4.0和Visual Studio 2010 (最低Express版本)的支持。
Kinect SDK的视频开发教程:/Series/KinectSDKQuickstarts?sort=recent#tab_sortBy_recentKinect SDK的开发指南:/en-us/um/redmond/projects/kinectsdk/guides.aspxKinect SDK的官方论坛:/Forums/en-US/kinectsdk/threads硬件设备的需求是:Kinect for Xbox 360 sensor和Xbox 360 Kinect AC Adapter/ Power Supply。
前7篇文件我们介绍了Kinect SDK中各种传感器的各种基本知识,我们用实验的方式演示了这些基本对象和方法的如何使用,这些都是Kinect开发最基本的知识。
了解了这些基本知识后,就可以开发出一个基于Kinect的简单程序了。
但是这些离开发出一个好的基于Kinect的应用程序还有一段距离。
后面的文章中,将会结合Kinect SDK介绍WPF以及其它第三方工具,类库来建立一个以Kinect 为驱动的有较好用户体验的程序。
我们将利用之前讲到的知识来进行下面一些比较复杂的话题。
Kinect传感器核心只是发射红外线,并探测红外光反射,从而可以计算出视场范围内每一个像素的深度值。
从深度数据中最先提取出来的是物体主体和形状,以及每一个像素点的游戏者索引信息。
然后用这些形状信息来匹配人体的各个部分,最后计算匹配出来的各个关节在人体中的位置。
这就是我们之前介绍过的骨骼追踪。
红外影像和深度数据对于Kinect系统来说很重要,它是Kinect的核心,在Kinect系统中其重要性仅次于骨骼追踪。
事实上,这些数据相当于一个输入终端。
随着Kinect或者其他深度摄像机的流行和普及。
开发者可以不用关注原始的深度影像数据,他们变得不重要或者只是作为获取其他数据的一个基础数据而已。
我们现在就处在这个阶段,Kinect SDK并没有提供给开发者访问原始红外影像数据流的接口,但是其它第三方的SDK可以这么做。
可能大多数开发者不会使用原始的深度数据,用到的只是Kinect处理好了的骨骼数据。
但是,一旦姿势和手势识别整合到Kinect SDK并成为其一部分时,可能开发者甚至不用接触到骨骼数据了。
希望能够早日实现这种集成,因为它代表这Kinect作为一种技术的走向成熟。
本篇文章和下篇文章仍将讨论骨骼追踪,但是采用不同的方法来处理骨骼数据。
我们将Kinect作为一个如同鼠标,键盘或者触摸屏那样的一个最基本的输入设备。
微软当初推出Kinect for Xbox的口号是“你就是控制器”,从技术方面讲,就是“你就是输入设备”。
通过骨骼数据,应用程序可以做鼠标或者触摸屏可以做的事情,所不同的是深度影像数据使得用户和应用程序可以实现以前从没有过的交互方法。
下面来看看Kinect控制并与用户界面进行交互的机制吧。
1. 用户交互运行在电脑上的应用程序需要输入信息。
传统的信息来自于鼠标或者键盘等这些输入设备。
用户直接与这些硬件设备进行交互,然后硬件设备响应用户的操作,将这些操作转换成数据传输到计算机中。
计算机接收这些输入设备的信息然后将结果以可视化的形式展现出来。
大多数计算机的图像用户界面上会有一个光标(Cursor),他通常代表鼠标所在的位置,因为鼠标是最开始有个滚轮设备。
但是现在,如果将这个光标指代鼠标光标的话,可能不太准确,因为现在一些触摸板或手写设备也能像鼠标那样控制光标。
当用户移动鼠标或者在触摸板上移动手指时,光标也能响应这种变化。
当用户将光标移动到一个按钮上时,通常按钮的外观会发生变化,提示用户光标正位于按钮上。
当用户点击按钮时,按钮则为显示另一种外观。
当用户松开鼠标上的按键,按钮就会出现另外一种外观。
显然,简单的点击事件会涉及到按钮的不同状态。
开发者可能对这些交互界面和操作习以为常,因为诸如WPF之类的用户交互平台使得程序与用户进行交互变得非常简单。
当开发网页程序时,浏览器响应用户的交互,开发者只需要根据用户鼠标的悬停状态来设置样式即可进行交互。
但是Kinect不同,他作为一个输入设备,并没有整合到WPF中去,因此,作为一个开发者。
对操作系统和WPF所不能直接响应的那部分工作需要我们来完成。
在底层,鼠标,触摸板或者手写设备都是提供一些X,Y坐标,操作系统将这些X,Y坐标从其在的空间坐标系统转换到计算机屏幕上,这一点和上篇文章讨论的空间变换类似。
操作系统的职责是响应这些标准输入设备输入的数据,然后将其转换到图形用户界面或者应用程序中去。
操作系统的图形用户界面显示光标位置,并响应用户的输入。
在有些时候,这个过程没有那么简单,需要我们了解GUI平台。
以WPF应用程序为例,它并没有对Kinect提供像鼠标和键盘那样的原生的支持。
这个工作就落到开发者身上了,我们需要从Kinect中获取数据,然后利用这些数据与按钮,下拉框或者其他控件进行交互。
根据应用程序或者用户界面的复杂度的不同,这种工作可能需要我们了解很多有关WPF的知识。
1.1 WPF应用程序中输入系统介绍当开发一个WPF应用程序时,开发者并不需要特别关注用户输入机制。
WPF会为我们处理这些机制使得我们可以关注于如何响应用户的输入。
毕竟作为一个开发者,我们更应该关心如何对用户输入的信息进行分析处理,而不是重新造轮子来考虑如何去收集用户的输入。
如果应用程序需要一个按钮,只需要从工具箱中拖一个按钮出来放在界面上,然后在按钮的点击事件中编写处理逻辑即可。
在大多数情况下,开发者可能需要对按钮设置不同的外观以响应用户鼠标的不同状态。
WPF会在底层上为我们实现这些事件,诸如鼠标何时悬停在按钮上,或者被点击。
WPF有一个健全的输入系统来从输入设备中获取用户的输入信息,并响应这些输入信息所带来的控件变化。
这些API位于System.Windows.Input命名空间中(Presentation.Core.dll),这些API直接从操作系统获取输入设备输入的数据,例如,名为Keyboard,Mouse,Stylus,Touch和Cursor的这些类。
InputManager这个类负责管理所有输入设备获取的信息,并将这些信息传递到表现框架中。
WPF的另一类组件是位于System.Windows命名空间(PresentationCore.dll)下面的四个类,他们是UIElement,ContentElement,FrameworkElement以及FrameworkContentElement 。
FrameworkElement继承自UIElement,FrameworkContentElement继承自ContentElement。
这几个类是WPF中所有可视化元素的基类,如Button,TextBlock及ListBox。
更多WPF输入系统相关信息可以参考MSDN文档。
InputManager监听所有的输入设备,并通过一系列方法和事件来通知UIElement和ContentElement对象,告知这些对象输入设备进行了一些有关可视化元素相关的操作。
例如,在WPF中,当鼠标光标进入到可视化控件的有效区域时就会触发MouseEnterEvent 事件。
UIElement和ContentElement对象也有OnMouseEnter事件。
这使得任何继承自UIElement或者ContentElement类的对象也能够接受来自输入设备的所触发的事件。
WPF会在触发任何其它输入事件之前调用这些方法。
在UIElement和ContentElement 类中也有一些类似的事件包括MouseEnter,MouseLeave,MouseLeftButtonDown,MouseLeftButtonUp,TouchEnter,TouchLeave,TouchUp和TouchDown。
有时候开发者需要直接访问鼠标或者其他输出设备,InputManager对象有一个称之为PrimaryMouseDevice的属性。
他返回一个MouseDevice对象。
使用MouseDevice对象,能够在任何时候通过调用GetScreenPositon来获取鼠标的位置。
另外,MouseDevice 有一个名为GetPositon的方法,可以传入一个UI界面元素,将会返回在该UI元素所在的坐标空间中的鼠标位置。
当需要判断鼠标悬停等操作时,这些信息尤其重要。
当Kinect SDK每一次产生一幅新的SkeletonFrame帧数据时,我们需要进行坐标空间转换,将关节点位置信息转换到UI空间中去,使得可视化元素能够直接使用这些数据。
当开发者需要将鼠标作为输入设备时,MouseDevice对象中的GetScreenPositon和GetPosition方法能提供当前鼠标所在点的位置信息。
在有些情况下,Kinect虽然和鼠标相似,但是某些方面差别很大。
骨骼节点进入或者离开UI上的可视化元素这一点和鼠标移入移出行为类似。
换句话说,关节点的悬停行为和鼠标光标一样。
但是,类似鼠标点击和鼠标按钮的按下和弹起这些交互,关节点与UI的交互是没有。
在后面的文章中,可以看到使用手可以模拟点击操作。
在Kinect中相对于实现鼠标移入和移出操作来说,对鼠标点击这种支持相对来说较弱。
Kinect和触摸板也没有太多相同的地方。
触摸输入可以通过名为Touch或者TouchDevice的类来访问。
单点的触摸输入和鼠标输入类似,然而,多点触控是和Kinect类似的。
鼠标和UI之间只有一个交互点(光标)但是触摸设备可以有多个触控点。
就像Kinect可以有多个游戏者一样。
从每一个游戏者身上可以捕捉到20个关节点输入信息。
Kinect能够提供的信息更多,因为我们知道每一个输入点是属于游戏者身体的那个部位。
而触控输入设备,应用程序不知道有多少个用户正在触摸屏幕。
如果一个程序接收到了10个输入点,无法判断这10个点是一个人的10个手指还是10个人的一个手指触发的。
虽然触控设备支持多点触控,但这仍然是一种类似鼠标或者手写板的二维的输入。
然而,触控输入设备除了有X,Y点坐标外,还有触控接触面积这个字段。
毕竟,用户用手指按在屏幕上没有鼠标光标那样精确,触控接触面积通常大于1个像素。
当然,他们之间也有相似点。
Kinect输入显然严格地符合WPF 所支持的任何输入设备的要求。
除了有其它输入设备类似的输入方式外,他有独特的和用户进行交互的方式和图形用户界面。
核心上,鼠标,触控板和手写板只传递一个像素点位置嘻嘻你。
输入系统确定该点在可见元素上下文中的像素点位置,然后这些相关元素响应这个位置信息,然后进行响应操作。
期望是在未来Kinect能够完整的整合进WPF。
在WPF4.0中,触控设备作为一个单独的模块。
最开始触控设备被作为微软的Surface 引入。
Surface SDK包括一系列的WPF控件,诸如SurfaceButton,SurfaceCheckBox,和SurfaceListBox。
如果你想按钮能够响应触摸事件,最好使用SurfaceButton控件。
能够想象到,如果Kinect被完整的整合进WPF,可能会有一个称之为SkeletonDevice的类。
他和Kinect SDK中的SkeletonFrame 对象类似。
每一个Skeleton对象会有一个称之为GetJointPoint的方法,他和MouseDevice的GetPositon和TouchDevice的GetTouchPoint类似。