Kinect for Unity3D开发 之 手势/姿势(Gesture)识别基础知识

  1. 手势/姿势识别:

有两种方法可以为Unity项目添加手势检测和手势识别功能。

1. KinectManager,示例场景中MainCamera的一个组件。

2. 以编程方式指定用户特定的姿势。需要实现KinectGestures.GestureListenerInterface。KinectScripts / Extras / SimpleGestureListener.cs脚本中有一段示例。

(没有这个脚本的下载 用于Unity3D的Kinect Wrapper Package

已有的Gesture

RaiseRightHand / RaiseLeftHand - 左手或右手在肩膀上抬起,保持不变至少1.0秒。

Psi - 双手抬起肩膀,保持这个姿势1.0秒。

Tpose - 双臂张开,垂直于身体(T形姿势),持续1.0秒。

Stop - 一只手向下(down),另一只手略微在腰部以下的位置抬起(slightly to the side)。

Wave - 右手向左挥动然后向右挥动,或左手向右挥动然后向左挥动。

SwipeLeft - 右手向左滑动。

SwipeRight - 左手向右滑动。

SwipeUp / SwipeDown - 用左手或右手向上或向下滑动

Click - 左手或右手保持至少2.5秒。与光标控制结合使用很有用。

RightHandCursor / LeftHandCursor - 伪手势,用于移动右手或左手提供光标。

ZoomOut - 开始时,左手和右手位于前面并在放在一起,然后朝着不同的方向移动。

ZoomIn - 开始时,左手和右手相距至少0.7米并且位于前方,然后双手互相靠近。

Wheel - 开始时,左手和右手放在与肩宽的地方,并且在身体前面,然后是手开始转动一个假想中的轮子,向左(正角度)或向右(负角度)。

Jump - 臀部中心在1.5秒内至少比之前高出15厘米。

Squat - 臀部中心在1.5秒内至少比之前低15厘米。

Push - 在1.5秒内用左手或右手向前推。

Pull - 在1.5秒内向后拉用左手或右手往后拉。

第二种方法

UserDetected()用于启动手势检测。

UserLost()用于清除变量或释放分配的资源。

UserDetected() remove the gestures,不被需要,在调用UserLost()之前,它们会自动删除。

GestureInProgress() - 继续,在gesture已经被启动,但是没有完成,也没有被取消时用。

GestureCompleted() 完成后调用。

然后就可以添加自己的代码,用来处理已完成的gesture。

GestureCancelled() 手势被取消时使用。

如何添加自己的手势:

传感器报告Kinect坐标系中被跟踪的身体部位的三维坐标,以米为单位。

打开 Assets / KinectScripts / KinectGestures.cs

  1. 找到 Gestures-enum,在末尾加上你要添加的手势名称
  2. 找到 CheckForGesture()-function,有一个很长的switch(),每个case处理一个手势的检测,给你的手势添加一个case。
  3. 参考RaiseLeftHand,RaiseRightHand,SwipeLeft或SwipeRight 这些简单的实例。
  4. 这个switch用来检查和改变gesture现在的状态,状态存在GestureDate这个结构体中,所以为你的手势创建一个GestureDate。
  5. 初始状态是0。在这个状态下,代码才检测用户是否在做这个手势。先检查关节的位置;如果位置合适,再检查下一个状态,是否关节到达所需位置,或与前一个状态的位置的之间的距离(注意这里是两种情况,1.与身体其他位置相比较,2.与自己之前的某一个时间点相比较),时间间隔通常假设1~1.5s。
  6. 如果关节位置符合,则认为手势完成,此时将状态重置为0以便下一次检测。最好参考已有的例子,复制修改一下不容易错。

猜你喜欢

转载自www.cnblogs.com/sialianzi/p/10109761.html