虚拟现实和增强现实应用程序可能依赖于用户提供的手势输入来调用特定的命令和动作。深度和视觉摄像头可以允许手部追踪应用能够识别和分层各种手势命令。在不受编程控制器限制的情况下,手势命令可以提供几乎无限的直观输入。
图1是佩戴头戴式显示设备105并站在房间110的真实物理环境中的用户100的示意图。房间110包括许多物理对象和表面,例如墙壁114、116和118、门120、沙发122、书架124和咖啡桌126。
头显105中的传感器可以启用自然用户界面(NUI)控制,例如当用户的手160在头戴式显示设备105的朝外成像传感器的视场165(虚线)内时,可以基于手160执行的手势输入。
通过这种方式,用户100可以与虚拟内容交互,而无需握住控制器或其他输入设备,从而使用户100可以用任意一只手与真实世界和/或虚拟世界对象交互。
如图所示,朝外成像传感器(165)的视场可能比头戴式显示设备(150)的视场更大,所以即使用户100看不到特定对象,其都可以对其进行成像。这可以支持用户100在自己的视场之外执行手势,并且依然将所执行的手势用作NUI控件。
不过,在将增强现实设备的使用限制在特定场所时,执行明显的手势命令可能会出现问题。但为了AR设备在更多公共场所(例如公共交通、会议、体育赛事)中得到广泛使用,用户可能更希望设备能够以社会可接受的方式进行操作。因此,NUI控件需要更精细的手势。
在名为“Single-handed microgesture inputs”的专利申请中,微软就介绍了一种单手微手势输入。简单来说,微软提出的发明可允许用户只执行小幅度的手指动作即可完成输入操作,而不是大幅度的动作。例如,可以将一根手指当作操作平面,然后用另一只手进行左右光标平移。
在一个示例中,评估手的拇指尖与同一只手上手指关节的关系。评估相对位置(例如,接近度)和时间方面(例如,位置处的停留时间),并用于选择和激活提供功能的指定目标。在一个示例中,可以向用户提供一个或多个视觉启示以帮助选择目标。所述系统允许将多个目标分配给手的每个手指,从而实现诸如滚动、深入菜单层次结构和其他功能操作。
头显200可以搭载手势识别机216和眼动追踪机218。手势识别机216配置为至少处理来自深度成像设备212的深度视频和/或来自朝外二维图像摄像头210的图像数据,以识别深度视频中的一个或多个人体对象,计算所识别对象的各种几何(例如,骨骼)特征,并从几何特征中收集各种姿势或手势信息,以用作NUI。
在一个非限制性实施例中,手势识别机216识别深度视频中一个或多个人体对象的至少一部分。通过适当的深度图像处理,可以将深度图的给定轨迹识别为属于人类主体。在更具体的实施例中,可以识别属于人类对象的像素,并且可以从这些像素导出人类的广义几何模型。
手势识别机216可以以任何合适的方式标记像素。作为一个示例,可以训练人工神经网络以使用适当的索引/标签对每个像素进行分类。这样,可以通过计算识别手或其他身体部位的不同特征。
手势识别机216可以逐帧跟踪不同的身体部位,从而允许识别不同的手势。例如,可以逐帧追踪手指的三维位置,从而允许识别诸如手指位置、手指角度、手指速度、手指加速度、手指到手指的接近度等参数。
用户眼睛的位置可由眼动追踪机218和/或手势识别机216确定。眼动追踪机218可以从朝内摄像头214接收图像数据。在一个示例中,朝内摄像头214包括两个或多个摄像头。例如,眼动追踪机218可以基于用户眼睛的中心点、用户瞳孔的中心点来确定用户眼睛的位置,和/或手势识别机器216可以基于虚拟骨骼的头部关节的位置来估计眼睛的位置。
图3显示了用于单手微手势输入的示例方法300。方法300可以由计算设备执行,例如头戴式显示设备(例如,本文中关于图11描述的头戴式显示设备105和200和/或计算系统1100)。
方法300将主要针对增强现实应用进行描述,但也可应用于虚拟现实应用、混合现实应用、非沉浸式应用以及具有配置为跟踪手运动和/或以其他方式接收手势输入的自然用户界面的任何其他系统、环境和应用。
在305,方法300包括接收用户手的手跟踪数据。手部跟踪数据可以从接收到的深度信息、接收到的RGB图像数据、接收到的平面IR图像数据等导出。
数据可以以多个不同的连续帧的形式接收。接收到的手部跟踪数据可以包括在多个不同帧的每一帧处针对多个不同手部特征中的每一个的特征位置。接收到的手部追踪数据可以包括用户的一只手或双手的数据。
在一个实施例中,手势识别机可配置为分析与用户相对应的深度图的像素,以确定每个像素对应于用户身体的哪个部分。为此,可以使用各种不同的身体部位分配技术。
在一个示例中,可以为具有适当人物索引的深度贴图的每个像素分配身体部位索引。身体部位索引可包括离散标识符、置信值和/或身体部位概率分布,其指示像素可能对应的身体部位。
在一个实施例中,机器学习可用于为每个像素分配身体部位索引和/或身体部位概率分布。机器学习方法参考从先前训练的已知姿势集合中学习到的信息来分析用户。
在一个实施例中,用于追踪特征位置(例如关节)的虚拟骨架或其他数据结构可以适合于对应于用户的深度和/或彩色视频的像素。图4A示出了示例虚拟骨架400。
虚拟骨骼包括在多个关节410处枢转耦合的多个骨骼段405。在一个实施例中,身体部位名称可分配给每个骨骼段和/或每个关节。在图4A中,每个骨骼段405的身体部位名称由附加字母表示:A表示头部,B表示锁骨,C表示上臂,D表示前臂……。
同样,每个关节410的身体部位名称由附加字母表示:a表示颈部,B表示肩部,C表示肘部,D表示手腕……。
通过任何合适的最小化方法,可以调整骨骼段的长度以及关节的位置和旋转角度,以符合深度映射的各种轮廓。通过这种方式,为每个关节指定了各种参数。虚拟骨架可以采用数据结构的形式,包括每个关节的任何、部分或所有这些参数。
所述过程可定义成像人体对象的位置和姿势。骨骼拟合算法可以将深度数据与其他信息结合使用,例如彩色图像数据和/或指示一个像素轨迹如何相对于另一个像素轨迹移动的动力学数据。以上述方式,虚拟骨架可以适合于深度视频帧序列中的每一帧。通过分析各种骨骼关节和/或节段的位置变化,可以确定相应的运动,例如成像用户的姿势或动作。
无论用于提取特征的方法是什么,一旦识别,可以在每帧的基础上跨深度和/或图像数据的帧追踪每个特征。多个不同的手特征可以包括多个手指特征、多个指尖特征、多个拇指特征、多个关节特征、多个手腕特征、多个手掌特征、多个背部特征等。
在一个示例中,接收用户第一只手的手部追踪数据包括接收环境的深度数据、将虚拟骨骼拟合到接收到的深度数据的点云、将手关节指定给虚拟骨骼,以及在连续的深度图像上跟踪指定手关节的位置。
返回图3,在310,方法300可选地包括激活响应于识别来自用户的激活命令的单手微手势输入。激活命令可以是基于手势、语音命令、注视点命令等。这类激活命令可以由用户自定义,或者可以为用户自定义。手势和手姿势命令可以在成像设备的视场内执行,但不一定在用户的视场内。
在315,将一组微手势目标沿用户手的第一个手指的长度分配到多个位置,每个微手势目标包括一个或多个软件功能。换句话说,一旦激活了微手势输入,就可以分割第一个手指,并且两个或多个手指段中的每一个都分配了一个微手势目标。因此,这样分配的第一个手指的每个位置都掩盖一个可操作且可交互的目标。
可通过将拇指尖置于手指位置附近,将拇指尖保持在手指位置附近一段时间,然后选择相应的目标来选择每个分配的目标。因此,微手势控制的交互点与用户的手和/或某些手指上的特定关节和节段紧密相连。
这样,当用户沿着手指的长度滑动拇指尖时,第一个手指可以有效地充当控制器。如本文所用,“第一指”可指用户手上的食指、中指、无名指、小指或任何多指手指中的任何一个。第一个手指可以通过用户、应用程序和/或系统偏好预先指定用于微手势输入,或者可以由用户选择用于微手势输入。
作为示例,图5示出了分配给沿用户手指500的位置的微手势目标的示例。手指500可分为多个不同部分,以建立多个不同的位置。然后,可以为手指500上的每个位置分配一个微手势目标,例如,指尖502分配目标522,远节指骨504分配目标524,远节指间关节506分配目标526,中节指骨508分配目标528,近节指间关节510分配目标530……。每个微手势目标可能与一个独特的功能相关联。
回到图3,在320,方法300包括向用户提供视觉启示,视觉启示包括两个或多个分配的微手势目标的指示器。这样,可以向用户提供视觉指示器,当用户沿着第一个手指移动拇指尖时,指示器通知用户正在接近哪个位置,从而可以选择哪个目标。
图6示了用户使用拇指尖和中指执行微手势。手670显示在显示视场650和成像视场660内。第一视觉启示680显示有三个微手势目标指示器(680a、680b、680c)。
在这个示例中,基于沿第一手指长度的相应位置,以顺序呈现微手势目标的指示器,例如,指示器680a对应于指尖处的目标,指示器680b对应于远端指间关节处的目标,并且指示器680c对应于近端指间关节处的目标。
特别是,新手用户可以依靠第一启示来学习在哪里停止、在哪里滚动等。然而,熟手用户可以直观地理解目标关联位置沿手指的位置,并且可以不依赖于这种视觉启示。因此,可以基于用户随时间重复选择微手势目标来逐步减少第一启示的外观。
一旦建立了肌肉记忆,就可以在没有这种视觉反馈的情况下执行微手势。事实上,微手势可以在用户的视场之外执行,但需要位于传感器视场之内。
回到图3,在325,方法300包括基于手势识别机的输出的动作,手势识别机配置为分析接收到的手跟踪数据。在330,方法300包括确定用户手的拇指尖相对于沿第一手指长度的多个位置的位置。可以使用手部追踪手技术来确定拇指尖的位置。
一旦识别出第一根手指,就可以简化手的追踪。例如,第一手指可以提供用于追踪拇指尖位置的参考框架,减少通常在自由空间中发生的漂移,并使手势识别引擎更容易识别拇指尖相对于沿第一个手指长度的多个位置的位置。可以从图像数据中提取对成像设备可见的两个已知对象,并且仅分析手指特征的子集,从而允许手势识别引擎追踪拇指尖的细粒度连续运动。
在335,响应于确定拇指尖在沿第一指长度的第一位置处第一指的阈值距离内,增加对应的第一微手势目标的指示器。在一个实施例中,拇指尖和第一指之间的阈值距离可以为零,表示拇指尖和第一指彼此直接接触。这样,用户和手势识别机都提供有一个锚,其用来确定拇指尖相对于第一个手指的运动。
如图8A中800所示,第一手指810分配三个位置(812、814和816,由虚线描绘),每个位置分配一个微手势目标(822、824、826)。拇指尖830示为在第一位置812处的手指810的阈值距离内。视觉启示840包括与三个微手势目标中的每一个相关联的三个指示器。
指示器842对应于第一位置812和微手势目标822,指示器844对应于第二位置814和微手势目标824,指示器846对应于第三位置816和微手势目标826。当拇指尖830位于第一位置812时,指示器842高亮显示,向用户指示相应的微手势目标822当前正作为选择的目标。
返回图3,在340,基于拇指尖在第一位置的持续时间进一步增加第一微手势目标的指示器。这如图8B中850所示。当拇指尖830停留在第一位置812时,指示器842展开,向用户指示当前能够选择相应的微手势目标822。
在345,方法300包括响应于检测到确认动作,执行相应的微手势目标。确认动作包括在第一位置的停留时间大于阈值。这样,时间阈值可以作为预激活阶段,从而选择相应的微手势目标。在图8A和8B的示例中,这可包括在阈值持续时间内将拇指尖830保持在第一位置812。
如图9A中900所示,拇指尖830从第一位置812(如图8A和8B所示)移动到第二位置814。因此,指示灯844高亮显示,向用户指示相应的微手势目标824当前正作为选择的目标,而指示灯842已返回到基线视觉状态。在图9B中的950处,当拇指尖830位于第二位置814时,指示器844展开,向用户指示当前能够选择相应的微手势目标824。
图10示出了通过单手微手势输入进行的示例控制。图10示出了佩戴头戴式显示设备1005并站在房间1010的真实物理环境中的用户1000。
房间1010包括物理对象,例如书架1015和门1020。可以将第二组微手势目标分配给沿用户左手第一指长度的多个位置。基于手势识别机的输出,可以相对于沿用户左手第一指长度的多个位置来确定用户左手拇指尖的位置。响应于检测到确认动作,可以执行分配给第二只手上相应的微手势目标的动作。
第一视觉启示1080和第二视觉启示1082与手1070相关联,而第三视觉启示1085和第二视觉启示1087与手1075相关联。在这个示例中,用户1000使用微手势控制来操纵全息立方体1032,手1070控制全息立方体1032的旋转,手1075控制全息立方体1032的大小。
用户1000同时可以使用分配给每只手的中指的其他手指或开关控制集,以提供指南针控制(向前、向后、左、右)、多维旋转,并以其他方式控制全息立方体1032在空间中的位置和方向。在两只不同的手上组合微手势可以允许同时在两个维度上滚动,分离航向/精细滚动控件等。
另外,每只手的拇指可以提供额外的输入信息以及手指的位置和接近程度。在一个示例中,将拇指移动到手指的前面和/或后面可以解释为附加命令。另外或者,相对于手指的拇指角度可以是输入。此类输入可用于激活或确认选定目标、生成额外控制值、充当操纵杆按钮等。
名为“Single-handed microgesture inputs”的专利申请最初在2022年1月提交,并在日前由美国专利商标局公布。