kinect 应用2可以在室外应用吗

首先说明这是unity kinect的一个商业插件 使鼡的是2.5版本的

有两种方式可以在unity工程里使用姿势检测

第一种很简单就是使用KinectManager只是一个在例子场景主摄像机上的组件。有被称为“用户通鼡姿势(Player Common Gestures)”的列表这里你可以放置任何在整个游戏中需要对每个人检测的姿势并且可以快速测试。

  1. UserLost() 当用户消失的时候invoked 这个可以被用来清理或者释放资源但你不需要特意停止在之前加上的姿势识别  
  2. GestureInProgress() 当姿势初始状态被检测的时候invoked,但是姿势并没有完成或者取消这个可以被用来报告姿势的进程或者姿势按照预期的精确完成状况,例如人物的走路或者跑步姿势  
  3. GestureGompleted() 姿势被完成的时候invoked你可以在这里使用姿势识别,和决定是否需要重新设置新的姿势(比如重启检测)  
  4. GestureCancelled() 如果姿势别取消时候invoked姿势的取消是由姿势检测路径来决定的,如果没有在规定时間内按照姿势检测路径完成姿势那么这个姿势就会取消,你也可以在这里设定是否需要重新设置新的姿势(比如重启检测)  

Psi 举起双手高於肩膀一秒

Stop 右手放下左手缓慢贴住身侧(腰以下)或者左右调换

ZoomOut 一开始左右手合并放在前面,然后向不同方向分开

ZoomIn 一开始两手相距0.7米以仩并放在前面然后慢慢合并

Wheel 左右手在前面相距肩膀宽度距离,软后抓住假想方向盘转动

CheckForGesture里面有一个很长的Switch,它处理了在第一步中定义嘚每个姿势你需要加上新的case来加上你的姿势,并改进姿势描述3可以找个例子先看下 比如RaiseLeftHand那个4如你所见每个姿势都有自己内部的switch,它们昰用来检测和改变姿势现在的状态的每个姿势很像一个有着0,1,2,3的姿势状态机器,现在的状态和其他数据都存贮了一个内部的GestureData类型结构体這个结构体被创建用来识别每个需要被识别的姿势5这个内部的姿势状态在一开始都是0,这个状态下代码需要检测姿势是否开始,它需要檢测和存贮关节的位置通常是左右手的,如果关节位置匹配一个姿势的起步位置它就增加这个状态的值,在下一个状态它就检测关節是否在规定的时间内达到需要的位置。(这个事件通常是1到1.5秒)如果关节在规定时间内达到了目标位置(或者目标距离)姿势会被认為是完成了,否则就是取消了然后姿势状态会被重设为0,然后重新开始检测

}

SDK,就要做一些相应的修改完整的方案如下(这个也为什么上面说后期打算自己封装一个类似这样组件DLL):

1、安装Uinty3D我使用的Unity3D版本是3.5,上官网下载(需要注册才能用,我推薦大家去付点钱我是自己找的破解码,声明不支持这样的行为大家懂就好)。

3、在Unity3D工程中如果需要使用和kinect交互,那么就需要在这个笁程中导入卡耐基梅隆的kinectWrapper.unitypackage百度怎么用大家都懂吧(需要用kinect SDK版本是1.6以上版本(1,7以上版本还没试过替换是否可以,理论上应该也可以)就要丅载KinectWrapperPackage替换文件并替换导入包中的KinectInterop.cs和KinectSensor.cs这两个文件即可) 好啦!目前准备工作都ok了!

1.导入包之后,所有我们需要的资源都会出现在project面板中具體来说是以下的一些资源:

2.Scenes KinectExample – 示例场景,这个例子向你展示了如何通过在每一个kinect 应用可以追踪的骨骼点上放置小球来产生骨骼运动

kinect 应用KinectModelControllerV2 – 需要将这个脚本拖放到你想要应用kinect控制的模型上。为了让模型能够跟上人的节奏你需要将模型上控制模型动作的关键骨骼拖放到这个腳本暴漏的合适的变量中 ,

也就是将模型中的骨骼与kincet识别到的人的骨骼绑定起来另外这个脚本暴漏的变量中,还有一个变量时标识模型昰受哪个玩家控制 KinectPointController – 需要将这个脚本拖放到场景中的游戏物体上。

但是这个游戏物体不是模型而是由一系列分别代表头部、肩部、手等人体部位的点组成。你需要将游戏物体中的这些关键点都拖放到这个脚本暴漏的外部变量中这样就可以使用kinect控制游戏物体了!

KinectSensor – 从Kinect设備中取得数据。需要替换这个文件使用特用版本的SDK.

1、设置KinectPrefab前面提到过了如果在Unity中和Kinect交互,KinectPrefab这个游戏物体是必不可少的 这个物体需要存茬于你的场景中的某处。所以当你切换场景时它仍旧存在着,因此你不必在每个场景中都实例一个Kinect_Prefab

2、控制游戏中的角色为了控制场景Φ的角色的移动,你需要将KinectModelControllerV2这个脚本拖拽到场景中的模型上并绑定骨骼; 当然你为了控制一系列的游戏物体,你需要将KinectPointController拖拽这些物体上

下面分别说明这个脚本的使用(这两个脚本需要自己更具情况去定制)。

控制器:KinectPointController: 在场景中创建一个空物体对象作为你想要控制的容器。 将其他的物体拖拽到刚刚创建的空物体中并放置到相同的位置。使刚才创建的空物体成为这些物体的父节点

拖拽你想利用Kinect控制的每┅个物体到Inspector面板对应的合适的变量中。 设置Player变量(代表玩家)和Mask变量(代表哪些骨骼收到监控)

选择场景中的模型。找到模型中的暴漏变量Sw(它代表Skeleton Wrapper). 并将当前场景中的Kinect_Prefab拖拽给Sw这个变量 详细展开你的模型,让模型的每一块骨骼在hierarchy面板中可见

一个接一个地把模型中的骨骼拖拽到脚本Φ暴漏的对应的变量中.确保每一个骨骼都对应到了正确的变量上。

当模型中所有的骨骼都放置好了之后改变暴漏的Player变量的值,这个变量表明该模型是受哪个玩家控制 0代表第一个玩家,1 代表第二个玩家 接下来要设置暴漏的Mask变量的值。

设置合适的值以决定是所有的骨骼嘟受Kinect控制,还是仅仅一部分骨骼受Kinect控制.如果这些受Kinect控制的骨骼都不是你想要的你可以自己写一个控制模型的脚本来代替KinectModelControllerV2。

当游戏玩家在控制模型时如果你想要该模型同时播放自带的动画,那么你需要在暴漏的变量中选中animated选项并设置BlendWeight变量的值,来决定模型受自带模型动畫和Kinect驱动动作的最终混合效果

该变量取值范围为0到1之间。

保证Kinect设备连接成功指示灯为绿色上面安装包安装配置好,最后运行事例

注意圖片的左下角的数字证明连接成功 ,连接成功的时候Kinect设备还会自己调整角度(最左边的指示灯会有红色)并且模型会随着你动而动

欢迎夶家期待第二篇将写一个3D人物模型,随着身体指示产生转身和前进与跑步 先上一张图(第二篇会上相关的脚本代码,由于unity脚本主要是c#囷js所以我采用c#写的脚本。

第一篇我是基于卡耐基梅隆kinectWrapper.unitypackage中间件,利用上面的自带例子经过自己的摸索终于成功了,可以看现在大部汾用卡耐基梅隆和OpenNI来作为unity与kinect交互,还一种就是自己封装交互组件经过这段时间研究后,自己封装了一个dll大概实现的功能:kinect摄像头角度設置,RGB流Depth流,玩家位数绑定骨骼数据获取等!后期计划把鼠标加进去,骨骼绑定功能进一步优化想利用这个dll组件实现3D试衣镜这样的虛拟场景,不仅包括体感游戏!最终可以满足绝大部分的开发情况!

     卡耐基梅隆和OpenNI现在基本上对于高于Kinect1.7和Unity3D4.0支持不是很好特别是openni官网都没囿支持更新了,对于高版本支持更是不好卡耐基梅隆还是稍微好点,不缺配置也比较麻烦还需要修改里面的代码!对于不太熟悉kinect同学們更是不好上手!自己封装组件,不断傻瓜化了更是知根知底!当然不是说自己是什么高手,只要把原理清楚了大家写一个也不是什麼问题!

     好了,简单交代一下我开发环境:win8 + KinectSDK1.7 + Unity4.3.1(最新版本)哥熬了一个通宵破解了想了解我这个例子的前提同学们必须对Unity3D比较熟悉,可以建立场景以及人物!对c#也要有了解

上图为利用unity3D建立简单的人物场景!上述的场景都是基于unity自带的素材建立的。  接下来该写人物事件驱动大概的功能就是向前、向左、向右、向后走动。代码如下:

然后将上面的setHeroState添加到Updata函数后然后将脚本绑定到人物模型即可。这篇就不讲解洎己封装的组件dll也不是这一篇就能讲清楚的,后续的文章中会慢慢剖析讲解!

下面就上图给大家看看体感控制效果截图:

上图中包含RBG流 、Depth流以及手势控制人物正在前行行走!也欢迎大家期待第三篇会给大家展示一款较为成熟的体感作品!  再次感谢OSC各位基友的鼓励!谢谢夶家!

 声明:这篇代码量也不大,主要目前我也是在摸索阶段unity工程量也大,不好把整个贴上来!后期代码量会逐步加大干货并且包括視频链接地址!

}
0

  这是本博客的第一篇翻译文档筆者已经苦逼的竭尽全力的在翻译了,但无奈英语水平也是很有限有不对或者不妥当不准确的地方必然会有,还恳请大家留言或者邮件峩以批评指正我会虚心接受。谢谢大家

       对于此类API,很多过去从事工作与托管API有关联的开发者应该觉得熟悉我们知道这是我们能够获嘚的最快的开发环境之一,并且很多正在发展的商店在这一领域现在拥有许多的资本投入Kinect和其传感器的所有功能都可以在此API中被应用。

紸:Native API是指以二进制方式函式库(DLL)直接开放的应用程式开发接口,可以直接由C/C++来呼叫存取使用

 许多Kinect应用程序需要玩家像在写原生C++代码┅样火力全开。我们很高兴能够分享Kinect原生API的这种迭代方法这类API的形式和结构与托管API集合相同,但它允许开发者的程序能够达到C++代码运行嘚最大速度这类API和/u/article/details/

}

我要回帖

更多关于 kinect 应用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信