C# 运动姿态分析

C# 运动姿态分析,c#,wpf,visual-studio-2010,kinect,C#,Wpf,Visual Studio 2010,Kinect,我正在使用官方的kinect SDK开发kinect应用程序 我想要的结果 1) 能够识别尸体已经挥舞了5秒。如果有,就做点什么 2) 能够识别单腿倾斜5秒。如果有,就做点什么 有人知道怎么做吗?我正在做一个WPF应用程序 我想举一些例子。我对Kinect相当陌生 提前感谢您的帮助 Kinect为您提供了它正在跟踪的骨骼,其余的都由您来完成。基本上,您需要为所需的每个手势创建一个定义,并在每次激发SkeletonFrameReady事件时针对Skeleton运行该定义。这并不容易 定义手势 定义

我正在使用官方的kinect SDK开发kinect应用程序

我想要的结果 1) 能够识别尸体已经挥舞了5秒。如果有,就做点什么 2) 能够识别单腿倾斜5秒。如果有,就做点什么

有人知道怎么做吗?我正在做一个WPF应用程序

我想举一些例子。我对Kinect相当陌生


提前感谢您的帮助

Kinect为您提供了它正在跟踪的骨骼,其余的都由您来完成。基本上,您需要为所需的每个手势创建一个定义,并在每次激发SkeletonFrameReady事件时针对Skeleton运行该定义。这并不容易

定义手势

定义手势可能非常困难。最简单(最容易)的手势是在一个时间点发生的,因此不依赖于肢体的过去位置。例如,如果要检测用户的手何时举过头顶,可以在每个帧上进行检查。更复杂的手势需要考虑一段时间。对于你的挥手姿势,你无法从一个画面中分辨出一个人是在挥手还是只是把手举在面前

所以现在你需要能够存储过去的相关信息,但是什么信息是相关的呢?您是否应该保存最后30帧的存储并对其运行算法?30帧只能获得一秒钟的信息。。大概60帧?还是你的5秒,300帧?人类的移动速度没有那么快,所以也许你可以每五帧使用一次,这会使你的5秒回到60帧。更好的办法是从帧中挑选相关信息。对于挥舞手势,手的当前速度、移动时间、移动距离等都是有用的信息

在你弄清楚如何获取和存储与你的手势相关的所有信息后,你如何将这些数字转化为定义?挥舞可能需要一定的最低速度、方向(左/右而不是上/下)或持续时间。但是,这个持续时间不是您感兴趣的5秒持续时间。该持续时间是假设用户正在挥手所需的绝对最小时间。如上所述,您无法从一帧中确定波。你不应该从2,3,或5中确定一个波,因为那是不够的时间。如果我的手抽搐了一秒钟,你会认为那是一个波浪吗?可能有一个最佳点,大多数人都会同意,从左向右的运动构成了一个波,但我肯定不知道如何在算法中定义它

要求用户在一段时间内做某个手势还有另一个问题。不管你写的定义有多好,这五秒钟内并不是每一帧都是波浪。如果你可以很容易地确定某人是否将手举过头顶5秒钟(因为它可以在单帧的基础上确定),那么对于复杂的手势,要做到这一点就困难多了。虽然挥手并没有那么复杂,但它仍然显示出这个问题。当你的手在波浪两侧改变方向时,它会停止移动一小部分秒。你还在挥手吗?如果你的回答是肯定的,挥手要慢一些,这样你就可以在两边稍微停顿一下。这种停顿还会被认为是一种波动吗?很有可能,在5秒钟的手势中的某个时刻,定义将无法检测到波浪。所以现在你需要考虑对手势持续时间的宽大处理。。如果挥手动作在最后五秒钟中有95%的时间出现,这足够好吗?90%? 80%

我想说的是,手势识别没有简单的方法。你必须仔细考虑这个手势,并确定某种定义,将一组关节位置(骨骼数据)转换成一个手势。您需要跟踪过去帧中的相关数据,但要意识到手势定义可能并不完美

考虑用户

既然我已经说了为什么五秒波很难被探测到,请允许我至少给出我的想法:不要。你不应该强迫用户在设定的时间段内重复一个基于动作的手势(五秒钟)。这是令人惊讶的疲劳,只是不是人们期望/希望从计算机。点击是瞬间的;我们一点击,就会收到回复。并没有人愿意在打开扫雷艇之前,按住“咔嗒”键5秒钟。在一段时间内重复一个手势是可以的,如果它持续执行一些动作,比如使用手势在列表中循环-用户将理解他们必须继续做手势才能在列表中移动得更远。这甚至使手势更容易检测,因为你不需要最后5秒钟的信息,你只需要足够的信息来知道用户现在是否在做手势

如果您希望用户在设定的时间内保持一个手势,请将其设置为静止手势(将手放在某个位置x秒比挥手容易得多)。这也是一个非常好的主意,给一些视觉反馈,说计时器已经启动。如果用户弄错了手势(错误的手、错误的位置等),并最终在那里站了5或10秒钟等待事情发生,他们将不会高兴,但这并不是问题的一部分

从Kinect手势开始

从小处做起。。真的很小。首先,确保您了解SkeletonData类的学习方法。在每个骨架上跟踪20个关节,每个关节都有一个TrackingState。如果Kinect正在计算关节的位置,则此跟踪状态将显示Kinect是否能够实际看到关节(已跟踪)