gpt4 book ai didi

gesture-recognition - 基于骨架运动的 Kinect 3D 手势识别 - 存在哪些库?

转载 作者:行者123 更新时间:2023-12-04 08:00:10 24 4
gpt4 key购买 nike

Kinect 有哪些手势识别库(如果有)?现在我正在使用 OpenNI 来记录骨架运动,但我不确定如何从它触发离散 Action 。

我的问题可能与姿势检测一样简单,但也可能与基于时间的运动一样复杂(即检测他们何时将手绕圈移动),具体取决于其难度。我看到的姿势检测示例非常临时 - 这是因为通用算法很难做到吗?

最佳答案

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;
}

您可以增强此代码以检测向右和向左滑动。我在上面的示例中也没有包括时间计算 - 您需要查看第一个和最后一个点的时间并确定滑动是否在一定时间内完成。

关于gesture-recognition - 基于骨架运动的 Kinect 3D 手势识别 - 存在哪些库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5234094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com