使用 Unity、Oculus Quest 和 Oculus Quest 集成包进行手势识别

问题描述

我正在尝试使用 Unity 和 Unity Oculus 集成包为 Oculus Quest 实现手势识别。

我已经阅读了 Oculus 开发者网站上的“Hand Tracking in Unity”文档,但他们只谈到获取当前手指的捏合度,这不是我想要的:
https://developer.oculus.com/documentation/unity/unity-handtracking/

我想过让每个手指弯曲(例如,值在 0 到 1 之间),然后训练具有 5 个特征的 k-NN 模型,然后能够识别最近的手势。但是我已经搜索了几个小时并没有找到任何关于获取手指位置的信息,我唯一发现的就是捏捏。

通过查看 OVRSkeleton.cs 文件(来自 Oculus 集成包),我已经能够获得每个骨骼的当前变换(因此位置为向量,旋转为四元数),但是我真的不知道如何计算或估计手指弯曲(或任何对执行手势识别有用的东西)

OVRSkeleton skeleton = GetComponent<OVRSkeleton>();
skeleton.Bones[(int) OVRPlugin.BoneId.Hand_Index1].Transform.position
skeleton.Bones[(int) OVRPlugin.BoneId.Hand_Index1].Transform.rotation

骨骼 ID 列表在 "Hand Tracking in Unity" documentation page 中。

其实我要实现的东西好像和这个包一模一样: https://assetstore.unity.com/packages/tools/integration/vr-hand-gesture-recognizer-oculus-quest-hand-tracking-168685

任何有关如何计算手指屈曲度的帮助、想法或评论,或任何其他实现手势识别的解决方案,将不胜感激!

谢谢

到目前为止我探索过的一些东西/链接

解决方法

https://github.com/jorgejgnz/HandTrackingGestureRecorder 是我目前正在尝试的东西,文档没有说它有依赖关系,但显然它有,而且我还没有让它工作。 您可以在运行时访问骨骼旋转并将它们与记录的手势进行比较。我认为它比机器学习更接近“模板匹配”,测量两个姿势之间的误差。