有没有适用于Kinect的手势识别库?目前我正在使用OpenNI记录骨架运动,但不确定如何从中触发离散动作。
我的问题可能只是姿势检测,但也可能像时间基础运动一样复杂(即检测他们何时在画圆形)。我看到的姿势检测示例非常临时 - 这是因为通用算法很难做对吗?
我的问题可能只是姿势检测,但也可能像时间基础运动一样复杂(即检测他们何时在画圆形)。我看到的姿势检测示例非常临时 - 这是因为通用算法很难做对吗?
static bool DetectSwipe(Point3D[] points)
{
int LineSize = 10; // number of points in the array to look at
int MinXDelta = 300; // required horizontal distance
int MaxYDelta = 100; // max mount of vertical variation
float x1 = points[0].X;
float y1 = points[0].Y;
float x2 = points[last].X;
float y2 = points[last].Y;
if (Math.Abs(x1 - x2) < MinXDelta)
return false;
if (y1 - y2 > MaxYDelta)
return false;
for (int i = 1; i < LineSize - 2; i++)
{
if (Math.Abs((points[i].Y - y1)) > MaxYDelta)
return false;
float result =
(y1 - y1) * points[i].X +
(x2 - x1) * points[i].Y +
(x1 * y2 - x2 * y1);
if (result > Math.Abs(result))
{
return false;
}
}
return true;
}
你可以改进这段代码,以便检测右滑和左滑。上面的示例中也没有包含时间计算 - 你需要查看第一个和最后一个点的时间,并确定在一定时间内是否完成了滑动。
我正在为Kinect开发一个独立的骨架检测代码。http://code42tiger.blogspot.com
我计划免费发布它,但是我还有很长的路要走才能完美地完成它。我想知道如果您只需要手部位置跟踪,您甚至可以不使用OpenNI或任何其他库来编写它。如果您需要简单的提示,请阅读以下内容。
1)背景去除(在我的博客中解释) 2)斑点检测(选择要跟踪的人,也在博客中解释) 3)手部跟踪(现在当您将用户单独放在数据中时,您可以通过考虑离身体最远的点轻松找到手部。) 4)跟踪手部位置以检测手势。(一些计算每隔几帧跟踪手部将给出运动的几何形状)
这应该可以工作(如果不完美)75%的时间。除非用户试图找到算法的错误,否则它应该适用于普通用户。
Softkinetic 看起来很有前途,但是 SDK 目前还不是免费提供的。