Kinect 有哪些手势识别库(如果有)?现在我正在使用 OpenNI 记录骨骼运动,但不确定如何从该运动到触发离散动作。
我的问题可能像姿势检测一样简单,但也可能像基于时间的运动一样复杂(即检测他们何时将手绕圈移动),具体取决于其难度。我见过的姿势检测示例非常特殊 - 这是因为通用算法很难正确执行吗?
NITE 库(在 OpenNI 之上)具有用于检测滑动和其他手势的类,但就我个人而言,我在 C# 中同时使用基本 OpenNI 和 NITE 库时遇到了麻烦(我一直遇到 AccessViolationExceptions)。如果您正在编写托管代码,则 XnVNITE.net.dll 具有滑动检测功能。安装 NITE 后,可以在 PrimeSense/NITE 文件夹下找到它。
如果您不需要骨架和用户识别,还可以使用 ManagedNite.dll 库,它是 PrimeSense NITE 安装附带的冗余库。 ManagedNite.dll 还具有手部/手势识别功能,但没有骨架/用户检测功能。
否则,您当然可以按照您的建议检测自己的基于时间的滑动手势。您应该能够使用如下函数检测一系列手点是否沿直线行进:
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;
}
您可以增强此代码以检测左右滑动。我在上面的示例中也没有包含时间计算 - 您需要查看第一个点和最后一个点的时间,并确定滑动是否在一定时间内完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)