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

Posted

技术标签:

【中文标题】使用 Unity、Oculus Quest 和 Oculus Quest 集成包进行手势识别【英文标题】:Gesture recognition with Unity, Oculus Quest and the Oculus Quest Integration package 【发布时间】:2021-05-19 18:41:44 【问题描述】:

我正在尝试使用 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://www.reddit.com/r/OculusQuest/comments/elrn7a/unity_hand_tracking_and_different_gestures/ https://forums.oculusvr.com/developer/discussion/89615/detect-custom-hand-gestures

【问题讨论】:

【参考方案1】:

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

【讨论】:

是的,我在发布后几个小时也发现了它!它非常适合我,我只需要下载GestureRecognizer.cs 文件(另一个不需要),然后按照自述文件中的说明进行操作。它的工作原理是找到保存的手势,该手势最小化每个手指当前和保存的指尖位置之间的距离总和,这真的很聪明,就像一个魅力

以上是关于使用 Unity、Oculus Quest 和 Oculus Quest 集成包进行手势识别的主要内容,如果未能解决你的问题,请参考以下文章

Oculus Quest2 | Unity配置Oculus Quest2开发环境,并打包一个应用到真机测试

使用Unity创建oculus quest 简易场景(实现头盔和操作杆的控制)

Oculus Quest 2 和 Unity 的 VR 开发基础知识

使用Unity开发Oculus Quest配置环境

Oculus Quest2 | Oculus Quest2初体验,Quest2发展历程及参数介绍。

关于 oculus quest 光线投射