您当前所在位置: > 实用问答

kinect v2.0手势识别教程

时间:2019-06-22 18:32:55  来源:  作者:网络

手部追踪在技术上和手势识别不同,但是它和手势识别中用到的一些基本方法是一样的。在开发一个具体的手势控件之前,我们先建立一个可重用的追踪手部运动的类库以方便我们后续开发。这个手部追踪类库包含一个以动态光标显示的可视化反馈机制。手部追踪和手势控件之间的交互高度松耦合。

步骤分解

  1. 1

    首先在Visual Studio中创建一个WPF控件类库项目。然后添加四个类: KinectCursorEventArgs.cs,KinectInput.cs,CusrorAdorner.cs和KinectCursorManager.cs这四个类之间通过相互调用来基于用户手所在的位置来完成光标位置的管理。KinectInput类包含了一些事件,这些事件可以在KinectCursorManager和一些控件之间共享。KinectCursorEventArgs提供了一个属性集合,能够用来在事件触发者和监听者之间传递数据。KinectCursorManager用来管理从Kinect传感器中获取的骨骼数据流,然后将其转换到WPF坐标系统,提供关于转换到屏幕位置的可视化反馈,并寻找屏幕上的控件,将事件传递到这些控件上。最后CursorAdorner.cs类包含了代表手的图标的可视化元素。

         KinectCursorEventArgs继承自RoutedEventArgs类,它包含四个属性:X、Y、Z和Cursor。X、Y、Z是一个小数,代表待转换的用户手所在位置的宽度,高度和深度值。Cursor用来存储CursorAdorner类的实例,后面将会讨论,下面的代码展示了KinectCursorEventArgs类的基本结构,其中包含了一些重载的构造器。

  2. 2

     RoutedEventArgs基类有一个构造函数能够接收RoutedEvent作为参数。这是一个有点特别的签名,WPF中的UIElement使用这种特殊的语法触发事件。下面的代码是KinectCursorEventArgs类对这一签名的实现,以及其他一些重载方法。

  3. 3

     接下来,要在KinectInput类中创建事件来将消息从KinectCursorManager中传递到可视化控件中去。这些事件传递的数据类型为KinectCursorEventArgs类型。

        在KinectInput类中添加一个KinectCursorEventHandler的代理类型:(1) 添加一个静态的routed event声明。(2) 添加KinectCursorEnter,KinectCursorLeave,KinectCursorMove,KinectCursorActive和KinectCursorDeactivated事件的add和remove方法。下面的代码展示了三个和cursor相关的事件,其他的如KinectCursorActivated和KinectCursorDeactivated事件和这个结构相同:

  4. 4

     注意到以上代码中没有声明任何GUI编程中的Click事件。这是因为在设计控件类库时,Kinect中并没有点击事件,相反Kinect中两个重要的行为是enter和leave。手势图标可能会移入和移出某一个可视化控件的有效区域。如果要实现普通GUI控件的点击效果的话,必须在Kinect中对这一事件进行模拟,因为Kinect原生并不支持点击这一行为。

        CursorAdorner类用来保存用户手势图标可视化元素,它继承自WPF的Adorner类型。之所以使用这个类型是因为它有一个特点就是总是在其他元素之上绘制,这在我们的项目中非常有用,因为我们不希望我们的光标会被其他元素遮挡住。代码如下所示,我们默认的adorner对象将绘制一个默认的可视化元素来代表光标,当然也可以传递一个自定义的可视化元素。

  5. 5

     因为继承自Adorner基类,我们需要重写某些基类的方法,下面的代码展示了基类中的方法如何和CreateCursorAdorner方法中实例化的_visualChildren和_cursorCanvas字段进行绑定。

  6. 6

    CursorAdorner对象也负责找到手所在的正确的位置,该对象的UpdateCursor方法如下,方法接受X,Y坐标位置作为参数。然后方法在X,Y上加一个偏移量以使得图像的中心在X,Y之上,而不是在图像的边上。另外,我们提供了该方法的一个重载,该重载告诉光标对象一个特殊的坐标会传进去,所有的普通方法调用UpdateCursor将会被忽略。当我们在磁性按钮中想忽略基本的手部追踪给用户更好的手势体验时很有用。

  7. 7

    为了实现KinectCursorManager类,我们需要几个帮助方法,代码如下,GetElementAtScreenPoint方法告诉我们哪个WPF对象位于X,Y坐标下面,在这个高度松散的结构中,GetElementAtScreenPoint方法是主要的引擎,用来从KinectCurosrManager传递消息到自定义控件,并接受这些事件。另外,我们使用两个方法来确定我们想要追踪的骨骼数据以及我们想要追踪的手。

  8. 8

        KinectCursorManager应该是一个单例类。这样设计是能够使得代码实例化起来简单。任何和KinectCursorManager工作的控件在KinectCursorManager没有实例化的情况下可以独立的进行KinectCursorManager的实例化。这意味着任何开发者使用这些控件不需要了解KinectCursorManager对象本身。相反,开发者能够简单的将控件拖动到应用程序中,控件负责实例化KinectCursorManager对象。为了使得这种自服务功能能和KinectCursorMange类一起使用,我们需要创建一个重载的Create方法来将应用程序的主窗体类传进来。下面的代码展示了重载的构造函数以及特殊的单例模式的实现方法。

  9. 9

    下面的代码展示了KinectCursorManager如何和窗体上的可视化元素进行交互。当用户的手位于应用程序可视化元素之上时,KinectCursorManager对象始终保持对当前手所在的可视化元素以及之前手所在的可视化元素的追踪。当这一点发生改变时,KinectCursorManager会触发之前控件的leave事件和当前控件的enter事件。我们也保持对KinectSensor对象的追踪,并触发activated和deactivated事件。

  10. 10

    最后需要两个核心的方法来管理KinectCursorManger类。SkeletonFrameReady方法与之前一样,用来从Kinect获取骨骼数据帧时触发的事件。在这个项目中,SkeletonFrameReady方法负责获取合适的骨骼数据,然后获取合适的手部关节点数据。然后将手部关节点数据传到UpdateCusror方法中,UpdateCursor方法执行一系列方法将Kinect骨骼空间坐标系转化到WPF的坐标系统中,Kinect SDK中MapSkeletonPointToDepth方法提供了这一功能。SkeletonToDepthImage方法返回的X,Y值,然后转换到应用程序中实际的宽和高。和X,Y不一样,Z值进行了不同的缩放操作。简单的从Kinect深度摄像机中获取的毫米数据。代码如下,一旦这些坐标系定义好了之后,将他们传递到HandleCursorEvents方法然后CursorAdorner对象将会给用户以反馈。相关代码如下:

  11. 11

    至此,我们已经简单实现了一些基础结构,这些仅仅是实现了将用户手部的运动显示在屏幕上。现在我们要创建一个基类来监听光标对象的事件,首先创建一个KinectButton对象,该对象继承自WPF Button类型。定义三个之前在KinectInput中定义好的事件,同时创建这些事件的添加删除方法,代码如下:

  12. 12

      在KinectButton的构造函数中,首先检查当前控件是否运行在IDE或者一个实际的应用程序中。如果没有在设计器中,如果KinectCursorManager对象不存在,我们实例化KinectCursorManager对象。通过这种方式,我们可以在同一个窗体上添加多个Kinect 按钮。这些按钮自动创建KinectCursorManager的实例而不用开发者去创建。下面的代码展示了如何实现这一功能。KinectCursorManager类中的HandleCursorEvents方法负责处理这些事件。

  13. 13

    下面的代码中,KinectCursorEnter事件中触发ClickEvent,将其改造成了一个标准的点击事件。使得KinectButton能够在鼠标移入时触发Click事件。Kinect中应用程序的交互术语还是使用之前GUI交互界面中的术语,这使得读者能够更容易理解。更重要的是,也能够使得开发者更容易理解,因为我们之前有很多使用按钮来构造用户界面的经验。当然终极的目标是舍弃这些各种各样的控件,改而使用纯粹的手势交互界面,但是按钮在现阶段的交互界面中还是很重要的。另外,这样也能够使用按钮来布局图形用户界面,只需要将普通的按钮换成Kinect按钮就可以了。

  14. 14

    这种控件有一个最大的问题,在大多数基于Kinect的应用程序中你看不到这个问题,那就是,你不能区分开是有意的还是无意的点击。在传统的基于鼠标的GUI应用中也有类似的倾向,每一次将鼠标移动到按钮上不用点击就会激活按钮。这种用户界面很容易不能使用,这也提醒了一个潜在的值得注意的问题,那就是将按钮从图形用户界面中移植到其他界面中可能存在的问题。悬浮按钮是微软试图解决这一特殊问题的一个尝试。

    END
相关下载

玩家评论

自家潮牌疑似印有涉“港独”手势,余文乐又双叒道歉了…_网友

原标题:自家潮牌疑似印有涉“港独”手势,余文乐又双叒道歉了… 【文/观察者网 阮佳琪】 3月2日,香港艺人余文乐自制服饰品牌宣布公开新款,其中一件衣详情>>

阅读: 4
日期: 2020-03-03
Oculus发布官方“手势追踪”设计指南_Quest

原标题:Oculus发布官方“手势追踪”设计指南 2月24日青亭网报道,虽然Oculus已经推出了面向Quest的手势追踪SDK,但是目前第三方手势应用暂时不能上架O详情>>

阅读: 6
日期: 2020-02-24
学习手势、体验翻滚,新京报小记者走进交通安全教育基地

原标题:学习手势、体验翻滚,新京报小记者走进交通安全教育基地 基地讲解员董荣利带领小记者学习交警执勤手势。宁文郡 摄 新京报讯 “122日全国交详情>>

阅读: 7
日期: 2019-12-01
网传“OK手势报警法”不实

原标题:网传“OK手势报警法”不实 原标题:网传“OK手势报警法”不实 近日,一段短视频在多个网络平台流传。视频中,一女孩被挟持后,偷偷比划出一个类似详情>>

阅读: 7
日期: 2019-09-06
谷歌安卓10正式发布:新增黑暗模式、手势导航等重要更新

原标题:谷歌安卓10正式发布:新增黑暗模式、手势导航等重要更新 9月3日,谷歌正式推出安卓10系统(Android 10),新增了黑暗模式、手势导航等重磅功能。这详情>>

阅读: 13
日期: 2019-09-04
“110报警手势”热传警方:不靠谱!或耽误自救时机

原标题:“110报警手势”热传 警方:不靠谱!或耽误自救时机 近日,一段短视频在抖音等多个网络平台流传。视频中,一女孩被挟持后,偷偷比划出一个类似“OK”详情>>

阅读: 5
日期: 2019-09-03
手势VR游戏《Aperture Hand Lab》诞生的背后

原标题:手势VR游戏《Aperture Hand Lab》诞生的背后 还记得此前为了展示Valve Index手柄的五指追踪功能,Valve与Cloudhead合作开发的《传送门》衍生VR详情>>

阅读: 10
日期: 2019-08-18
Apple提交AR/VR头显新专利支持眼动跟踪及手势运动

  VR之家消息:Apple最近申请了一项MR头显设备专利,该设备将提供用虚拟内容增强的用户环境的3D虚拟视图。 Apple于3月份首次提交了此专利申请,但该申请仅在上周公布。  App详情>>

阅读: 11
日期: 2019-07-24
情侣拍照新手势,记得码住照着拍啊~

情侣拍照新手势,记得码住照着拍啊~ 详情>>

阅读: 27
日期: 2019-07-08
手机QQ如何设置手势密码 手势密码保护手机QQ

现在手机QQ作为聊天软件,大家都在使用,手机QQ默认是可以直接打开,只要之前登陆就可以.所以一旦手机流落在别人手里,里面的聊天记录将暴露无遗,所以需要添加手势密码,增加一详情>>

阅读: 27
日期: 2019-07-02
VRgineers发布170ºFOV新头显:支持手势追踪,售价5800美元

  VR之家消息:XTAL是捷克VR初创公司VRgineers推出了其新款头显,这款头显是VRHero 5K Plus的升级版。XTAL外形更轻便小巧,比前代产品减轻了12%的重量。开发商通过减少重量、详情>>

阅读: 20
日期: 2019-07-01
QQ如何设置手势密码

QQ给我们带来了很多朋友也带来了很多方便,聊天电话视频都不在话下,当然聊天记录中也会有自己的小秘密,如何在朋友借手机时保护自己的隐私呢,那就得设置QQ的手势密码了。攻略对象详情>>

阅读: 36
日期: 2019-06-29
QQ邮箱怎么设置手势密码

QQ邮箱的手势密码怎么设置攻略对象QQ邮箱手机步骤分解1在手机上打开QQ邮箱2在QQ邮箱的主页面点击右上方的三个点3然后选择【设置】选项4在【设置】中找到【手势密码】一栏点详情>>

阅读: 9
日期: 2019-06-27
蚂蚁聚宝手势密码怎么设置?修改or取消手势密码

蚂蚁聚宝和其他应用一样的,当你在应用里不选择退出的话,默认使用记住密码方式自动登录,这从某种程度上来说是安全的。正是因为蚂蚁聚宝也是记住密码自动登录的,为了账户安全真的详情>>

阅读: 13
日期: 2019-06-26
怎么设置笔记本的触控板手势

windows也可以实现双指滚动等一些功能。我们需要一个软件synaptics触控板驱动。攻略对象windows笔记本synaptics pointing device driver步骤分解1安装软件我就不演示了。链详情>>

阅读: 342
日期: 2019-06-26
教你photoshop制作点赞手势图标

教你photoshop制作点赞手势图标攻略对象电脑一台Photoshop软件步骤分解1新建文件,给背景填充你喜欢的颜色2观察我们自己的左手,选择钢笔工具勾勒出来手撑的轮廓,去描边,设置填充详情>>

阅读: 2
日期: 2019-06-25
如何在word中插入手势图标

我们在word中,可以通过特殊的字符工具,插入一些手势的图标。攻略对象符号图标步骤分解1进入word的编辑界面,准备一张稿纸。2点击插入工具,在工具中点击符号。3点击符号的图标以详情>>

阅读: 5
日期: 2019-06-25
主播小苍晒自拍,一个手势引来资深老网友热议:怀疑你在暗示

原标题:主播小苍晒自拍,一个手势引来资深老网友热议:怀疑你在暗示 相信很多人对小苍都有一定的了解吧,不得不说真的是一位自带传说的女主播,也是一位电竞职业选手以详情>>

阅读: 51
日期: 2019-06-04
《次元大作战》今日全平台首发创造性手势揭开MOBA新时代

  今日《次元大作战》1月12日正式全平台首发!游戏是一款集结了众多动漫英雄的二次元手势MOBA手游!MOBA手势操作变革之作!已受到六十万玩家广泛好评!  划时代意义详情>>

阅读: 2
日期: 2019-04-15
装了tera手势插件后怎么打开控制中心

Game234问答中心有网友提出了一个比较有代表性的问题【装了tera手势插件后怎么打开控制中心】,小编觉得可能对其他网友也有帮助,所以将此问答整理出来了,希望对您有帮助。小编为您搜罗的答案1个人推荐详情>>

阅读: 3
日期: 2019-04-14
抖音《有点甜》手势舞教程

《有点甜》这首歌是大家很喜欢的一首歌,在抖音上经常可以听到。《有点甜》的手势舞也是非常的甜的。下面详情>>

阅读: 4
日期: 2019-04-13
抖音时间可不可以永远停在这个毕业季手势舞教程

游戏类型:其他软件文件大小:4.6M软件语言:简体中文运营:未知软件授权:免费版应用平台:WinXP/Vista/Win7/Win8/Win10安全认证:抖音时间可不可以永远停在这个毕业季手势舞详情>>

阅读: 2
日期: 2019-04-03
抖音《太多》手势舞教程

最近很火的《太多》手势舞大家都会了吗?下面Game234游戏门户网游戏小编就为大家带来手势舞视频教详情>>

阅读: 6
日期: 2019-03-27
抖音《黎明前的黑暗》手势舞教程

《黎明前的黑暗》手势舞最近在网络上很火,大家都会了吗?下面Game234游戏门户网游戏小编就为大家详情>>

阅读: 22
日期: 2019-03-22
抖音《渡我不渡她》手势舞教程

抖音《渡我不渡她》手势舞最近在网络上非常的火,还不会的朋友们,下面Game234游戏门户网游戏小编详情>>

阅读: 10
日期: 2019-03-22
QQ比心手势怎么弄 QQ比心手势在哪

新版qq怎么发比心?QQ比心手势是最新推出的功能,这个功能相当的萌,有点可爱,详情>>

阅读: 0
日期: 2019-03-21
红米note7全面屏手势怎么用

红米note7全面屏手势怎么用?还不是很了解的玩家们,下面Game234游戏门户网游戏小编就为大家详情>>

阅读: 12
日期: 2019-03-21
红米note7pro怎么开启放大手势?

红米note7pro怎么开启放大手势?还不知道方法的朋友们,下面Game234游戏门户网游戏小编就详情>>

阅读: 1
日期: 2019-03-21
Oculus Rift S的摄像头可能在未来支持手势识别

OculusCTO约翰·卡马克在OculusConnect5上的评论和推特表明了即将发布的OculusRiftS的摄像头可能会支持手势识别。不详情>>

阅读: 9
日期: 2019-02-28
手势技能开辟胜利之路:勇者世界

在远古的数千万年前,被龙王选中的勇者们与破坏神详情>>

阅读: 4
日期: 2019-01-21
Clay AIR与Qualcomm 合作推出VR/AR手势交互技术

手部跟踪能够让您的手直接接触更逼真的虚拟现实(VR)体验。ClayAIRInc.开发了与硬件无关的手势识别软件来增强手势跟踪。ClayAIR宣布与QualcommTechnol详情>>

阅读: 13
日期: 2018-12-24
火影忍者ol结印手势教学 结印手势大揭秘 (2)

火影忍者ol结印手势教学 结印手势大揭秘 (2)时间:2016-01-22 16:22:00 来源:聚侠网 作者: ... 详情>>

阅读: 16
日期: 2018-11-30
火影忍者手游结印训练开启 集齐手势赢奖励

火影忍者手游开放了最新的活动,玩家可以在游戏中收集各种手势,并通过结印来完成训练获取奖励。... 详情>>

阅读: 5
日期: 2018-11-30
Faker活动现场照图集:招牌手势为你点赞

 SKT官推放出了Faker和Wolf参加Twitch活动的现场照片,李哥拍照的手势永远都不会变……万年点赞手。Wolf的手势也很经典了。  详情>>

阅读: 0
日期: 2018-11-17
绝地求生刺激战场跳舞手势攻略 跳舞手势怎么做?

绝地求生刺激战场新版本跳舞手势怎么做,在绝地求生...这里是非常可以的,后续表情是需要抽奖或者是金币购买... 详情>>

阅读: 4
日期: 2018-11-13
《辐射76》微交易可购买商品公开 包含人物表情手势

  在《辐射76》游戏中玩家可以利用获得的货币Atoms在原子商店买游戏商品,近日,Bethesda展示了部分可在原子商店里购买的物品,一起来看看详情>>

阅读: 5
日期: 2018-11-04
精彩推荐