首页> 中国专利> 用于重复检测和分析的信号分析

用于重复检测和分析的信号分析

摘要

本文描述的技术使用信号分析来检测和分析在3D图像中采集的重复性用户动作。重复性动作可以是用户运动。一个实施例包括分析跟踪执行重复性动作的用户的图像数据以确定与该重复性动作相关联的参数的数据点。不同数据点针对不同时间点。形成跟踪该重复性动作的参数相比时间的参数信号。将参数信号分为界定段,所述界定段将重复性动作的一个重复根据重复性动作的其它重复描绘出。使用信号处理技术分析参数信号中的重复。可使用曲线拟合和/或自相关来分析重复。

著录项

  • 公开/公告号CN105228709A

    专利类型发明专利

  • 公开/公告日2016-01-06

    原文格式PDF

  • 申请/专利权人 微软技术许可有限责任公司;

    申请/专利号CN201480015396.5

  • 发明设计人 J.R.胡夫;D.G.肯尼特;A.爱哈马德;

    申请日2014-03-13

  • 分类号A63F13/20;A63F13/42;A63F13/213;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人刘鹏

  • 地址 美国华盛顿州

  • 入库时间 2023-12-18 13:28:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-05-29

    授权

    授权

  • 2016-02-03

    实质审查的生效 IPC(主分类):A63F13/20 申请日:20140313

    实质审查的生效

  • 2016-01-06

    公开

    公开

说明书

背景技术

计算机视觉已被用于分析来自真实世界的图像以用于各种目的。一个示例是提供用于电子设备的自然用户界面(“NUI”)。在一个NUI技术中,采集并且分析用户的3D图像以识别某些姿态或姿势。因此,用户可作出姿势来提供输入以控制诸如计算机游戏或多媒体应用之类的应用。

一些应用要求对用户的动作的更精确理解和分析。对于一些应用,可能期望的是分析和评估用户的动作。用于识别姿势和姿态的常规技术对于这样的应用不是适当的。

发明内容

本文公开的是用于使用信号分析来检测和分析在3D图像中采集的重复性用户动作的系统和方法。重复性动作将是用户运动。

一个实施例包括一种分析重复性动作的方法,其包括以下。访问跟踪执行重复性动作的用户的图像数据。分析图像数据以确定参数的数据点。不同数据点针对不同时间点。形成跟踪重复性动作的参数相比时间的参数信号。将参数信号分为重复性动作的重复。使用信号处理技术分析参数信号中的重复中的第一重复。

一个实施例包括一种系统,其包括采集跟踪用户的3D图像数据的采集设备,和与采集设备通信的处理器。处理器被配置为分析3D图像数据以确定参数的数据点。不同的数据点针对不同时间点。处理器被配置为形成跟踪重复性动作的参数相比时间的参数信号。处理器被配置为将参数信号分为界定段,所述界定段将参数信号分为重复性动作的重复。处理器被配置为使用数字信号处理技术分析参数信号中的重复中的第一重复。

一个实施例包括一种计算机可读存储设备,其包括用于将处理器编程为访问跟踪用户运动的图像数据并且分析图像数据以确定跟踪用户运动的重复性动作的参数的数据点的处理器可读代码。不同的数据点针对不同时间点。处理器可读代码进一步用于将处理器编程为形成跟踪重复性动作的参数相比时间的参数信号。处理器可读代码进一步用于将处理器编程为将参数信号分为界定段,所述界定段将重复性动作的一个重复根据重复性动作的其它重复描绘出。处理器可读代码进一步用于将处理器编程为使用数字信号处理技术分析参数信号中的第一重复。

该发明内容被提供来介绍以简化形式的在下文在具体实施方式中被进一步描述的概念的选择。该发明内容并不打算标识要求保护的主题的关键特征或必要特征,其也不打算用作确定要求保护的主题的范围的辅助。此外,要求保护的主题并不限于解决在本公开的任何部分中提到的任何或所有缺点的实施方式。

附图说明

图1A和1B图示跟踪用户的跟踪系统的示例实施例。

图2图示可用作跟踪系统的部分的采集设备的示例实施例。

图3A是分析用户动作的进程的一个实施例的流程图。

图3B是运行时引擎的一个实施例的图。

图3C是基于什么动作正被分析在运行时引擎中选择代码的进程的一个实施例的流程图。

图3D是示出运行时引擎的深度识别器的一个实施例的进一步细节的图。

图3E是示出运行时引擎的移动识别器的一个实施例的进一步细节的图。

图3F是示出运行时引擎的位置分析的一个实施例的进一步细节的图。

图3G是示出运行时引擎的时间/动作分析的一个实施例的进一步细节的图。

图3H是示出运行时引擎的深度分析的一个实施例的进一步细节的图。

图4A图示示例性深度图像。

图4B描绘在示例性深度图像中的示例性数据。

图5A示出通过骨架识别引擎生成的示例身体模型的非限制视觉表示。

图5B示出如从正面观看的骨架模型。

图5C示出如从歪斜视图观看的骨架模型。

图6A是运行时引擎的一个实施例的图。

图6B是基于身体模型确定人的质心的进程的一个实施例的流程图。

图7A是基于身体模型确定惯性张量的进程的一个实施例的流程图。

图7B是确定身体部位质心状态矢量中的元素的进程的一个实施例的流程图。

图7C是确定在整个身体部位质心状态矢量中的元素的进程的一个实施例的流程图。

图8A是确定引起质心状态矢量的改变将需要的力的一个实施例的流程图。

图8B是使用基于全身的冲激的约束求解的肌肉力/扭矩计算的一个实施例的流程图。

图9A是分析由正被采集系统跟踪的用户执行的重复的进程的一个实施例的流程图。

图9B示出一个示例参数信号的表示。

图9C示出一个示例导数信号。

图10A是拟合曲线到已界定(bracketed)重复以确定时序参数的进程的一个实施例的流程图。

图10B示出到对应于一个界定段(bracket)的参数信号的一部分的示例曲线拟合。

图11A是用于使用信号处理以分析参数信号的进程的一个实施例的流程图。

图11B示出自相关的一个实施例的示例。

图12图示在图2中介绍的运行时引擎的示例实施例。

图13A和13B图示根据特定实施例的被用于概括用于确定基于深度的质心位置、基于深度的惯性张量、基于深度的象限质心位置和基于深度的象限惯性张量的方法的高阶流程图。

图14A示出表示对应于执行分腿跳的(深度图像的)用户的多个像素的剪影,该图被用于图示示例性的基于深度的质心位置和示例性的基于深度的象限质心位置。

图14B示出表示对应于执行俯卧撑的(深度图像的)用户的多个像素的剪影,该图被用于图示示例性的基于深度的质心位置和示例性的基于深度的象限质心位置。

图15图示被用于概括如何可基于根据参考图13A-13B描述的实施例确定的信息更新应用的高阶流程图。

图16图示可用于跟踪用户行为并且基于用户行为更新应用的计算系统的示例实施例。

图17图示可用于跟踪用户行为并且基于跟踪的用户行为更新应用的计算系统的另一个示例实施例。

图18图示图2中介绍的运行时引擎的示例实施例。

图19图示被用于概括用于基于深度图像确定指示用户的身体的角度和/或曲率的信息的方法的高阶流程图。

图20A-20C示出表示对应于执行不同瑜伽姿态或运动的(深度图像的)用户的多个像素的剪影,所述图被用于解释如何可基于深度图像确定指示用户的身体的角度和曲率的信息。

图21是根据一实施例的,用于提供图19中的步骤之一的附加细节的高阶流程图。

图22图示用于概括如何可根据参考图19-21描述的实施例确定的信息来更新应用的高阶流程图。

图23A-23F示出表示对应于执行瑜伽姿态或其它运动的(深度图像的)用户的多个像素的剪影,所述图被用于解释如何可标识用户的极端并且如何可确定平均极端位置(还被称为极端团块(blob)的平均位置)。

图24图示了用于概括用于基于深度图像标识用户的平均极端位置的方法的高阶流程图。

图25是根据一实施例的,用于提供图24中的步骤中的一些的附加细节的高阶流程图。

图26示出表示对应于在站立位置的(深度图像的)用户的多个像素的剪影连同基于深度图像确定的平均极端位置。

图27用于解释可将深度图像内的用户分为象限并且可针对每个象限确定平均极端位置。

图28示出表示对应于前屈的(深度图像)的用户的多个像素的剪影,该图被用于解释如何可基于深度图像确定平均前极端位置。

图29图示用于概括如何可基于根据参考图23A-28描述的实施例确定的信息更新应用的高阶流程图。

具体实施方式

本文描述的实施例使用深度图像来分析用户动作。一个实施例包括一种用于分析3D图像中的用户动作的运行时引擎。运行时引擎能够根据动作是什么来使用不同技术来分析用户的动作。运行时引擎可选择根据骨架跟踪数据的技术和/或替代地使用图像分割数据的技术来确定用户是否在执行正确的动作。运行时引擎可基于正执行什么动作来确定如何执行对用户的执行的位置分析或时间/动作分析。

在一个实施例中,分析重复性动作,如用户运动。系统可使用的一个跟踪技术是骨架跟踪。然而,系统不限于骨架跟踪。

根据一个实施例,描述了一种系统和方法,其跟踪用户动作并且提供关于用户的动作的反馈。例如,用户可被要求执行俯卧撑。系统可跟踪用户的动作并且分析俯卧撑以确定用户是否正确执行俯卧撑。系统可通知用户,他们的臀部过高,他们的肘部在俯卧撑的顶部不完全挺直,他们在一些俯卧撑上未完全下来等。系统还可根据用户的执行的评估来确定用户的适当运动例程。

跟踪正执行动作(其可能是重复的)(例如运动)的用户是具有挑战的。一个挑战是开发能够向正执行动作(例如但不限于运动)的用户提供反馈所需的精度。根据一些实施例,对于跟踪系统令人期望的是能够识别用户动作的微妙差别。作为一个示例,可令人期望的是确定当他们下蹲时用户臀部的角度的微妙差别,当用户举重时在身体的右侧和左侧之间的微妙差别,在重量分布上的微妙差别等。作为一些另外示例,可令人期望的是确定是否用户正真实执行俯卧撑,或仅仅举起他们的肩膀和上部躯体离开地板。对于常规跟踪技术,识别这样的微妙差别可能是非常困难的。

另一挑战是在一些情况下工作良好的跟踪技术在其他情况下未工作良好。例如,当用户在站立时可工作良好的跟踪技术可能在用户在地板上时遇到问题。当用户在地板上时可工作良好的跟踪技术当被用于跟踪正站立的用户时可能具有缺陷。而且,对于一些移动(例如一些运动),用户可能对于运动的部分是站立的,并且对于运动的另一部分是至少部分在地板上的。

在一个实施例中,基于身体模型确定一个或多个质心状态矢量。身体模型可具有关节和几何形状。例如,可使用圆柱体来表示用户的手臂的上部分。另一圆柱体可用于表示用户的手臂的下部分。可使用其他几何形状。在一个实施例中,几何形状是围绕中心轴对称的。

质心状态矢量可包括例如质心位置、质心速度、质心加速度、角速度、身体部位或整个身体的取向、角加速度、惯性张量和角动量。可针对个体身体部位或针对作为整体的身体来确定质心状态矢量。可使用(多个)质心状态矢量来分析用户的动作。例如,可使用这样的信息来跟踪执行某些运动(例如蹲、弓步、俯卧撑、跳或分腿跳)的用户,从而可控制用户的化身(avatar),可对用户评分,和/或可提供反馈给用户。在应用指令用户执行某些身体运动的情况下,应用可确定用户是否以正确的形态执行运动,并且在他们还未的情况下,可向用户提供给关于用户可如何改进他们的形态的反馈。

在一个实施例中,使用质心状态矢量来分析用户的移动。在一个实施例中,确定为了导致在质心状态矢量的改变,身体部位将需要施加的力。例如,当用户在运动时,他们的脚需要施加一定力以便他们跳跃、扭转等。可基于脚是与地面的约束的假定来计算脚力。

在一个实施例中,系统通过将身体视为布偶来计算肌肉力/扭矩,该布偶具有由惯性张量计算使用的形状规定的身体部位和由身体的配置规定的约束。例如,上臂是一个身体部位,下臂是另一个,并且两者通过位于肘部的约束来连接。附加地,如果脚被发现与地面接触,则针对处于这样的接触的每个脚添加约束。

在一个实施例中,使用信号分析来分析重复性动作(例如运动)的用户执行。当随着时间绘制与重复性动作相关联的参数(例如质心)时,该图可以与信号相似。在训练(例如体质训练)的情况下,很多这些信号具有它们特有“脉冲”外观,其中值从一个位置移位,在某一方向上移动,然后在“重复”的末尾回到原始位置。一个实施例包括标定这些序列的重复标定和粗略界定(bracketing)系统。

在一个实施例中,系统形成跟踪与用户的动作相关联的一些参数的“参数信号”。系统可采用参数信号的导数以形成“导数信号”。导数信号可帮助标识参数信号中的重复。系统可向参数信号应用各种信号处理技术(例如曲线拟合、自相关等)来分析重复。

在讨论质心状态矢量的进一步细节并且使用信号分析之前将讨论示例系统。图1A和1B图示跟踪系统的示例实施例,而用户118执行健身锻炼。在示例实施例中,跟踪系统100可用于识别、分析和/或跟踪人目标(如用户118)或跟踪系统100的范围内的其它对象。如图1A中示出的,跟踪系统100包括计算系统112和采集设备120。如将在下文附加详细描述的,采集设备120可用于获得可由计算系统112使用的深度图像和彩色图像(也被称为RGB图像)以标识一个或多个用户或其它对象,以及跟踪动作和/或其它用户行为。被跟踪的动作和/或其它用户行为可用于分析用户的身体移动并且提供反馈给用户。例如,用户可被指令执行俯卧撑,而系统跟踪用户的形态。系统可提供反馈给用户来帮助他们校正他们的形态。系统可标识用于改进的区域,并且建立用户的锻炼计划。

在一个实施例中,跟踪用户可被用于提供自然用户界面(NUI)。NUI可用于允许用户更新应用。因此,用户可通过使用用户的身体和/或在用户周围的对象的移动,而不是(或附加地)使用控制器、遥控器、键盘、鼠标等)来操作应用的游戏角色或其它方面。例如,视频游戏系统可基于对象的新位置来更新显示在视频游戏中的图像的位置,或基于用户的动作更新化身。因此,化身可跟踪用户的实际移动。系统可在化身旁边渲染另一个人,例如健身教练、运动明星等。因此,用户可想象它们与某人一起锻炼或被某人带教。

计算系统112可以是计算机、游戏系统或控制台等。根据示例实施例,计算系统112可包括硬件组件和/或软件组件,使得计算系统112可用于执行应用,例如游戏应用、非游戏应用等。在一个实施例中,计算系统112可包括处理器,例如标准化处理器、专门处理器、微处理器等,其可执行存储在处理器可读存储介质上的指令以用于执行本文描述的进程。

采集设备120可以是例如摄像机,其可用于视觉地监视一个或多个用户(例如用户118),使得由一个或多个用户执行的姿势和/或移动可被采集、分析和跟踪。由此,可生成质心状态矢量。

根据一个实施例,跟踪系统100可连接到可提供游戏或应用视频和/或音频给用户(例如用户118)的视听设备116(例如电视机、监视器、高清电视(HDTV)等。例如,计算系统112可包括可提供与游戏应用、非游戏应用等相关联的视听信号的视频适配器(例如图形卡)和/或音频适配器(例如声卡)。视听设备116可接收来自计算系统112的视听信号并且可然后输出与视听信号相关联的游戏或应用视像和/或音频给用户118。根据一个实施例,视听设备116可经由例如S-Video电缆、同轴电缆、HDMI电缆、DVI电缆、VGA电缆、分量视频电缆等连接到计算系统112。

如在图1A和1B中示出的,跟踪系统100可用于识别、分析和/或跟踪人目标(例如用户118)。例如,跟踪系统100确定描述用户的动作的各种参数同时例如执行运动例程。示例参数包括但不限于质心状态矢量。在一个实施例中,该状态矢量可基于身体模型来确定。

作为另一示例,可使用采集设备120来跟踪用户118,使得用户118的姿势和/或移动可被采集以动画操纵化身或屏幕上角色,和/或可被解释为可用于影响由计算系统112执行的应用的控制。因此,根据一个实施例,用户118可移动他或她的身体来控制应用和/或动画操纵化身或屏幕上角色。

在图1A和1B中描绘的示例中,在计算系统112上执行的应用可以是用户118执行的运动例程。例如,计算系统112可使用视听设备116来向用户118提供健身训练师138的视觉表示。计算系统112还可使用视听设备116来提供用户118可利用他或她的移动来控制的玩家化身140的视觉表示。例如,如在图1B中示出的,用户118可在物理空间中移动他们的手臂以引起玩家化身140在游戏空间中移动它的手臂。因此,根据示例实施例,计算系统112和采集设备120识别和分析用户118在物理空间中的手臂移动,使得可分析用户的形态。系统可向用户提供他们执行该动作多好的反馈。

在示例实施例中,人目标(例如用户118)可具有物体。在这样的实施例中,电子游戏的用户可持有该物体,使得可分析玩家和物体的动作。例如,可跟踪和分析玩家挥动网球球拍的动作以确定用户的形态是否良好。还可跟踪用户未持有的物体,例如由用户(或不同用户)抛出、推动或滚动的物体以及自我推进的物体。除了网球外,还可实施其他游戏。

根据其它示例实施例,跟踪系统100可进一步用于将目标移动解释为操作系统和/或在游戏的领域之外的应用控制。例如,操作系统和/或应用的视觉上任何可控制方面可由目标(例如用户118)的移动来控制。

图2图示了可在跟踪系统100中使用的采集设备120的示例实施例。根据示例实施例,采集设备120可被配置为经由任何适当技术(包括例如飞行时间、结构化光、立体图像等)采集具有包括深度图像(其可包括深度值)的深度信息的视频。根据一个实施例,采集设备120可将深度信息组织为“Z层”,或可与从深度摄像机沿着其视线延伸的Z轴垂直的层。

如在图2中示出的,采集设备120可包括图像摄像机组件222。根据示例实施例,图像摄像机组件222可以是可采集场景的深度图像的深度摄像机。深度图像可包括所采集的场景的二维(2-D)像素区域,其中2-D像素区域中的每个像素可表示深度值(例如距离摄像机的在采集场景中的对象的以例如厘米、毫米等为单位的距离)。

如在图2中示出的,根据示例实施例,图像摄像机组件22可包括可用于采集场景的深度图像的红外(IR)光组件224、三维(3-D)摄像机226和RGB摄像机228。例如,在飞行时间分析中,采集设备120的IR光组件224可发射红外光到场景上并且可然后使用传感器(未示出)来使用例如3-D摄像机226和/或RGB摄像机228检测来自场景中的一个或多个目标和对象的表面的反向散射光。在一些实施例中,可使用脉冲式红外光,使得可测量在传出光脉冲和对应的传入光脉冲之间的时间并使用其来确定从采集设备120到场景中的目标或对象上的特定位置的物理距离。附加地,在其他示例实施例中,传出光波的相位可与传入光波的相位比较以确定相移。可然后使用相移来确定从采集设备到目标或对象上的特定位置的物理距离。

根据另一示例实施例,可使用飞行时间分析来经由各种技术(包括例如快门光脉冲成像)通过分析光的反射光束随着时间的强度来间接确定从采集设备120到目标或对象上的特定位置的物理距离。

在另一示例实施例中,采集设备120可使用结构化光来采集深度信息。在这样的分析中,可经由例如IR光组件224将图案化光(即被显示为已知图案,例如网格图案、条带图案或不同图案的光)投影到场景上。在撞击场景中的一个或多个目标或对象的表面后,作为响应,图案可变得变形。可通过例如3-D摄像机226和/或RGB摄像机228来采集图案的如此变形,并且可然后分析图案的如此变形以确定从采集设备到目标或对象上的特定位置的物理距离。在一些实施方式中,从摄像机226和228移位IR光组件224,从而可使用三角测量来确定距离摄像机226和228的距离。在一些实施方式中,采集设备120将包括用以感测IR光的专用IR传感器。

根据另一实施例,采集设备120可包括两个或多个物理分离摄像机,其可从不同角度观看场景以获得可被解析以生成深度信息的视觉立体数据。还可使用其它类型的深度图像传感器来建立深度图像。

采集设备120可还包括麦克风230。麦克风230可包括可接收和转换声音到电信号的换能器或传感器。根据一个实施例,麦克风230可用于减小目标识别、分析和跟踪系统100中的采集设备120和计算系统112之间的反馈。附加地,麦克风230可用于接收音频信号,用户还可提供该音频信号来控制可由计算系统112执行的应用,例如游戏应用、非游戏应用等。

在示例实施例中,采集设备120可还包括处理器232,处理器232可与图像摄像机组件222操作性通信。处理器232可包括可执行包括例如用于接收深度图像、生成适当数据格式(例如帧)和传输数据到计算系统112的指令的指令的标准化处理器、专门处理器、微处理器等。

采集设备120可还包括存储器组件234,存储器组件234可存储可由处理器232执行的指令、由3-D摄像机和/或RGB摄像机采集的图像或图像帧、或任何其他适当信息、图像等。根据示例实施例,存储器组件234可包括随机存取存储器(RAM)、只读存储器(ROM)、高速缓存、闪存、硬盘或任何其他适当存储组件。如在图2中示出的,在一个实施例中,存储器组件234可以是与图像采集组件222和处理器232通信的单独组件。根据另一实施例,存储器组件234可以集成在处理器232和/或图像采集组件222中。

如在图2中示出的,采集设备120可以经由通信链路236与计算系统212通信。通信链路236可以是包括例如USB连接、火线连接、以太网电缆连接等的有线连接和/或例如无线802.11b、g、a或n连接的无线连接。根据一个实施例,计算系统112可提供时钟给采集设备120,时钟可被用于确定何时经由通信链路236采集例如场景。附加地,采集设备120经由通信链路236向计算系统112提供由例如3-D摄像机226和/或RGB摄像机228采集的深度图像和彩色图像。在一个实施例中,深度图像和彩色图像以每秒30帧被传输。计算系统112可然后使用模型、深度信息和采集的图像来例如控制应用(例如游戏或字处理器)和/或动画操纵化身或屏幕上角色。

计算系统112包括姿势库240、结构数据242、运行时引擎244、骨架识别引擎和应用246。运行时引擎244可执行深度图像处理和对象报告。运行时引擎244可使用深度图像来跟踪对象(例如用户和其它对象)的动作。为了辅助对对象的跟踪,运行时引擎244可使用姿势库240、结构数据242和骨架识别引擎192。在一个实施例中,运行时引擎244分析由系统100跟踪的用户的动作。这可以是一些重复性动作,例如运动。

结构数据242包括关于可被跟踪的对象的结构信息。例如,可存储人的骨架模型来帮助理解用户的移动并且识别身体部位。还可存储关于无生命对象的结构信息来帮助识别那些对象并且帮助理解移动。

姿势库240可包括姿势滤波器的集合,每个姿势滤波器包括涉及可由骨架模型执行(随着用户移动)的姿势的信息。以骨架模型和与其相关联的移动的形式的由摄像机226、228和采集设备120采集的数据可与姿势库240中的姿势滤波器比较,来标识何时用户(如由骨架模型表示的)已经执行一个或多个姿势。那些姿势可以与关联于运动的姿态相关联。

姿势库240可与除了骨架跟踪之外的技术一起使用。这样的其它技术的示例包括图像分割技术。图18-29提供图像分割技术的实施例的细节。然而,可使用其他图像分割技术。

在一个实施例中,姿势可与用户执行的各种运动相关联。例如,姿势可以是在运动期间执行的姿态或移动。例如,可存在与俯卧撑相关联的三个姿态:俯卧(例如面朝下)位置、伸出手臂的向上位置和低俯卧位置。系统可寻找该序列以确定用户是否执行俯卧撑。

在一个实施例中,姿势可以与应用的各个控制相关联。因此,计算系统112可使用姿势库240来解释骨骼模型的移动并且基于移动控制应用246。因此,可由运行时引擎244和应用246使用姿势库。

应用246可以是健身程序、视频游戏、生产力应用等。在一个实施例中,运行时引擎244将向应用246报告检测的每个对象的标识和针对每个帧的对象的位置。应用246将使用该信息来更新显示器中的化身或其它图像的位置或移动。

运行时引擎

一些常规跟踪技术依赖单个或几个技术来识别姿势和/或姿态。姿势的一个示例是用户出拳。例如,常规系统可查看四肢的位置和/或四肢之间的角度。系统可寻找用户的手/拳轻微到身体之外,接着是手/拳从身体完全伸展,来检测用户出拳。只要关节角度符合于角度范围内,这可表明左臂被举起。常规姿态匹配系统可将多个姿态串在一起。例如,如果系统确定用户的手靠近身体,接着用户的手从身体伸展开,系统将假定用户执行拳击。

然而,这样的常规技术可能不适合用于跟踪和评估用于应用(包括但不限于监测和评估正运动的用户)的用户动作。这样的系统可跟踪和评估宽范围的用户动作。在一些情况中,被跟踪的各种动作可导致需要应用不同技术。例如,对于跟踪和评估(直线弓步)的系统,系统可能需要跟踪形态,以及跟踪用户如何移动穿过空间。对于跟踪和评估俯卧撑的系统,系统可能需要跟踪形态,以及跟踪节拍。然而,用户移动穿过空间的方式可能不如对于跟踪和评估俯卧撑那么重要。在一个实施例中,系统执行的分析的类型取决于用户正在执行什么动作(例如运动)。

评估用户的动作的执行的一个方式是跟踪参数(例如他们的质心)。系统可跟踪质心如何移动穿过空间,以便评估他们如何执行给定动作。

图3A是分析用户动作的进程300的一个实施例的流程图。进程300可以在例如图1A、图1B和/或2的系统中实践。在一个实施例中,进程300的步骤由运行时引擎244执行。在一个实施例中,进程300分析包括一串姿态的姿势。该姿势可以是身体运动,例如仰卧起坐、俯卧撑等。然而,姿势不限于身体运动。

在一个实施例中,进程300用于向正运动或执行一些其他姿势的用户提供反馈。系统100可执行引导用户通过健身例程的应用。该应用可指令用户执行运动,例如执行“俯卧撑”、“仰卧起坐”、“下蹲”等。

在步骤302,接收(多个)深度图像。在一个实施例中,采集设备120提供深度图像给计算系统112。深度图像可以被处理以生成骨架跟踪数据,以及图像分割数据。

在步骤304,确定移动。该移动可以通过一系列姿态限定。例如,俯卧撑是移动的一个示例。该移动可包括一系列姿态。该移动还可被称为姿势。在一个实施例中,运行时引擎244通过分析(多个)深度图像确定用户做出什么移动。术语“分析深度图像”意指包括分析从深度图像得出的数据,例如但不限于骨架跟踪数据和图像分割数据。在步骤306,做出用户是否做出正确移动的确定。作为一个示例,系统100确定用户是否执行俯卧撑。如果不,系统100可在步骤310向用户提供反馈:未检测到正确移动。在一个实施例中,使用深度识别器(图3B,358)和/或移动识别器(图3B,360)来分析用户是否做出正确移动。深度识别器358和移动识别器(360)在下文讨论。

假定做出正确移动,在步骤308分析移动。作为一个示例,系统100确定当执行“俯卧撑”或一些其他运动时用户的形态是否良好。在一个实施例中,系统100将运动的一个重复与其他重复进行比较来确定变化。因此,系统100能够确定用户的形态是否改变,这可表明疲劳。

在一个实施例中,运行时引擎244具有位置分析(图3B、346)时间/动作分析(图3B、366)和深度分析(图3B、368)来分析用户的执行。位置分析364、时间/动作分析366和深度分析368在下文讨论。

在步骤310,系统100基于移动的分析来提供反馈。例如,系统100可通知用户当执行运动时用户的位置/移动不匀称。作为特定示例,系统100可通知用户他们的重量过多在他们的脚的前部分上。

图3B是运行时引擎244的一个实施例的图。运行时引擎244可用于实施进程300。运行时引擎244可输入现场图像数据354以及回放图像数据352两者。现场图像数据354和回放图像数据352可都包括RGB数据、深度数据和骨架跟踪(ST)数据。在一个实施例中,ST数据通过骨架识别引擎192来生成。

可使骨架跟踪(ST)数据通过ST滤波器、ST归一化和/或ST约束356。ST滤波器可以平滑掉带噪声的(例如抖动的)关节位置。滤波器的示例包括但不限于时间滤波器、指数滤波器和卡尔曼滤波器。ST归一化可保持如四肢长度之类的参数随着时间恒定。这可被称为骨骼长度归一化。ST约束可以对骨架数据做出调整以校正解剖学上不可能的位置。例如,系统100可具有对于特定关节允许的角度范围,使得如果角度在该范围之外,则调整其以落入允许角度内。滤波器可帮助改进精度以稍后用于运行时引擎。在一个实施例中,骨架识别引擎192包含ST滤波器、ST归一化和/或ST约束356。

方框356还包括深度数据和图像分割数据。在一个实施例中,深度数据通过深度图像中的每个像素的z值来表征。每个像素可以与x位置和y位置相关联。图像分割数据可以从深度数据得到。

接着分割进程,深度图像中的每个像素可具有与其相关联的分割值。像素位置可通过x位置值(即水平值)和y位置值(即垂直值)来指示。像素深度可通过z位置值(还被称为深度值)来指示,z位置值指示在用于获得深度图像的采集设备(例如120)和由像素表示的用户(或玩家)的部分之间的距离。分割值用于指示像素是否对应于具体用户,或不对应于用户。结合图4A进一步讨论分割。还结合图18讨论深度图像分割。在一个实施例中,方框356部分与图18的深度图像分割1852一起实施。

深度识别器358和移动识别器360可都执行姿势和姿态识别。深度识别器358和移动识别器360是“姿态识别器”的两个示例。深度识别器358和移动识别器360可都用于通过例如识别一系列姿态来确定用户是否执行正确的移动。例如,它们可用于确定用户是否执行了俯卧撑、仰卧起坐等。深度识别器358和移动识别器360不一定评估用户多好地执行了动作。然而,深度识别器358和/或移动识别器360可执行用户多好地执行了动作的一些分析。例如,深度识别器358和/或移动识别器360可执行哪些身体部位不在适当位置的一些分析。

可工作良好以执行当用户在站立时的姿势和姿态识别的技术可能在用户在地板上时没工作这么好。在一个实施例中,系统100根据用户相对于地板的位置来确定是否使用深度识别器358和/或移动识别器360。例如,系统100可当人站立并且出拳时使用移动识别器360,但是当用户执行俯卧撑时使用深度识别器358。

移动识别器360可当用户不在地板上时主要执行姿势和姿态识别。相比于纯深度图像数据,移动识别器360可更依赖于骨架数据。在一个实施例中,移动识别器360检查ST关节相对于彼此和身体的角度、位置和旋转。在一个实施例中,移动识别器360检查用户的脊柱的角度和旋转。这可包括横向弯曲。

如提到的,移动识别器360和/或深度识别器358可被用于确定用户是否执行了正确移动(由测试362表示)。在一个实施例中,系统100确定用户是否执行了一组姿态。例如,对于俯卧撑,系统100寻找对应于俯卧撑的不同位置的姿态。俯卧撑的三个姿态的示例是对应于用户在俯卧(例如面朝下)位置开始下降到地面,然后伸展他们的手臂到上位置,并且然后返回到下位置的那些姿态。在该示例中,深度识别器可用于确定当用户在(或接近)地板时用户是否做俯卧撑。

系统100可针对一些姿态使用深度识别器358或移动识别器360。系统100可使用深度识别器358和移动识别器360两者来确定用户是否执行其他姿态。这提供在识别姿态中的大灵活性和精度。

位置分析364、时间/动作分析366和/或深度分析368可用于评估用户的形态,假定系统100确定用户执行正确的动作。

位置分析364可基于在一个时间点处的身体部位的位置来评估用户的形态。在一个实施例中,位置分析364比较身体部位和/或关节相对于彼此和/或相对于地板的位置。作为一个示例,位置分析364可用于针对当前运动,确定用户的臀部是否相对于脚处于正确的位置。

时间/动作分析366可基于身体部位随着时间的位置来评估用户的形态。在一个实施例中,时间/动作分析366查看在多个帧内的位置分析以确保用户的形态是正确的。这可用于确定用户如何随着时间移动穿过空间。作为一个示例,时间/动作分析366可用于确定用户的膝盖在下蹲期间是否弯曲。

时间/动作分析366可寻找节拍,例如用户正多快地移动。例如,一些动作可具有特有的2-1-2节拍,这指的是执行动作的不同节段的时间的相对长度。例如,俯卧撑可倾向于通过2个时间单位的向上、1个时间单位的在顶部静止和再两个时间单位的回到下面来表征。

时间/动作分析366还可检查用户随着时间如何移动的曲线。在一个实施例中,系统确定例如用户的质心之类的参数。可随着时间跟踪该参数的该位置。系统100然后通过分析曲线的形状来评定用户的形态。可跟踪很多其它参数。

当骨架跟踪数据不可用或可能不适当时深度分析368可依赖于深度图像数据。作为一个示例,当用户在运动的至少一部分期间在地板上时可使用深度分析368。当用户在地板上时,可能难以生成ST数据。

评定372向用户提供关于他们的动作执行的反馈。例如,反馈可以是当执行俯卧撑时用户的背和腿未形成直线,或当执行直线弓步时用户的右膝未在适当线上移动,这可表明内转的问题。用户可被给予如何校正该问题的进一步反馈,例如保持他们的核心肌肉更紧。进一步反馈可以是用户可能在他们的右膝或腿中具有弱点的警告等。

还描绘锻炼计划374、服务器/DB376和附加反馈378。鉴于用户的执行的评定,以及如用户的目的、年龄等其他因素,锻炼计划374可向用户提供被推荐遵循的详细锻炼。

服务器DB376用于存储玩家反馈、执行和结果。该数据可然后用于分析和报告随着时间的进展(或缺少进展)并且反馈回到锻炼计划374或甚至提供更多微妙差别到给予用户的反馈。例如,如果运行时引擎244在多个对话中知道用户对于弓步具有问题,但是现在显示大的进步,则反馈可以是沿着“做得好,我已真正看到随着时间的进步”的路线的某些东西。该相同数据/遥测数据可由应用开发者使用以确定哪些运动太难,或姿势是否过于严格并且人们未被正确检测。

附加反馈378可被用于生成随着时间的反馈,用于成就或挑战,用于与其他玩家的排行榜比较等。

可添加实施用于执行用户的动作的分析的新技术的新模块到运行时引擎,而不必改变分析其他动作的方式。例如,比如说,在运行时引擎244已被配置为评估100个不同运动之后,期望几个更多运动被用于分析。可以是,新工具可期望用于分析新运动。新工具可被容易添加到运行时引擎的模块化设计中,而不影响如何分析其他运动。这大大简化了运行时引擎的设计、测试和开发。

图3C是基于什么姿势(例如什么身体运动)正被分析选择在运行时引擎244中的代码的进程311的一个实施例的流程图。在步骤312,做出关于应当使用什么技术来分析姿势的确定。在一个实施例中,运行时引擎244可访问定义了给定用户被要求执行的运动而应当执行什么代码(例如什么指令应当在处理器上执行)的存储信息。注意,步骤312可基于姿势内的特定姿态来做出该确定。因此,可以使用不同技术分析给定姿势的不同姿态。

在一个实施例中,运行时引擎244访问来自姿势数据库240的姿势的描述来确定应当使用什么技术。姿势的描述可包括用于姿势的一系列姿态。姿态中的每个可规定应当使用什么识别器358、360或计算来识别或分析该姿态。计算可以是在位置分析364、时间/动作分析366和深度分析368中的不同计算。计算还可以是在深度识别器358和移动识别器360中的不同计算。因此,用于识别和/或分析姿势的技术可以被量身定制用于特定姿势。

在一个实施例中,步骤312包括确定使用什么技术来确定用户是否正在执行正确的移动。这可包括确定是否使用基于骨架跟踪数据检测移动的运行时引擎244中的第一姿态识别器(例如,深度识别器358)或基于图像分割数据检测移动的运行时引擎244中的第二姿态识别器(例如,移动识别器360)。可基于人相对于地板的位置做出该确定。例如,如果执行人主要站立的特定身体运动,则可使用使用骨架跟踪数据的技术。然而,如果执行人主要在地板上的特定身体运动,则可使用使用图像分割数据的技术。

在一个实施例中,步骤312包括基于正被运行时引擎分析的特定运动来确定哪些计算用于执行在运行时引擎244中的时间/动作分析。例如,可选择在位置分析模块364内的代码,使得基于什么身体运动正被执行来采用用于分析用户的动作的期望技术。

在一个实施例中,步骤312包括基于正被运行时引擎分析的特定运动来确定哪些计算用于执行运行时引擎244中的时间/动作分析。例如,可选择在时间/动作分析模块366内的代码,使得基于什么身体运动正被执行来采用用于分析用户的动作的期望技术。

在一个实施例中,步骤312包括基于正被运行时引擎分析的特定运动来确定哪些计算用于执行运行时引擎244中的深度分析。例如,可选择在深度分析模块368内的代码,使得基于什么身体运动正被执行来采用用于分析用户的动作的期望技术。

在一个实施例中,步骤312包括确定是否使用使用骨架跟踪数据的计算或使用图像分割数据的计算来执行姿势的分析。例如,与使用使用骨架跟踪数据的技术相反,系统可选择使用深度分析368相比执行位置和/或时间/动作分析的技术。

在步骤314,输入深度图像数据到运行时引擎244中。深度图像数据可包括深度图像中的每个像素的深度值。深度图像数据可以被处理以生成骨架跟踪数据,以及图像分割数据。

在步骤316,运行时引擎244执行实施所选择技术的代码。在一个实施例中,运行时引擎244具有用于实施不同技术以分析姿势的代码。可选择不同代码来实施用于分析用户的动作的不同技术。作为一个示例,如果运动是诸如其中用户在(或靠近)地板的俯卧撑或仰卧起坐之类的运动时,运行时引擎244可使用深度识别器358。然而,如果运动是诸如从地板离开的直线弓步之类的运动时,运行时引擎244可使用移动识别器360。因此,步骤316可包括在运行时引擎244内执行不同代码部分以分析不同运动。

注意,可混合各种技术。例如,当分析用户的执行时,可与使用图像分割数据的计算技术一起使用使用骨架跟踪数据的计算技术。图3D-3H提供深度识别器358、移动识别器360、位置分析364、时间/动作分析366和深度分析368的实施例的进一步细节。在步骤316,系统100可基于正被分析的姿势(例如身体运动),选择使用这些模块中的哪些和/或使用这些模块内的什么计算。

图3D是示出运行时引擎244的深度识别器358的一个实施例的另外细节的图。深度识别器358具有深度/图像分割作为输入。结合图3B的方框356讨论了深度/图像分割。在一个实施例中,从图18的运行时引擎中的一个或多个模块获得深度图像分割信息。作为一个示例,深度图像分割1852可提供输入到深度识别器358。图18中的其它模块还可提供输入到深度识别器358。

深度识别器358还可访问姿势数据库240。这是有效或可用的所有姿势的数据库。在一个实施例中,姿势由包括开始姿态、结束姿态和若干中间姿态的若干状态构成。每个状态具有相关联姿态。对于每个状态,除了姿态,状态节点包含被用于识别和/或分析姿态的识别器(例如358、360)、分析模块(例如364、366、368)和/或计算(例如在358、360、364、366、368内的代码)的列表。状态节点还可包含反馈滤波器类型(和相关联数据)。下文关于图3F-3H讨论了反馈滤波器。姿态不一定必须是静止的。

深度识别器358具有深度识别器模块402,其使用深度/图像分割作为输入来运行(步骤404)。这些是用于识别姿势、确定用户的位置或移动是否与存储在姿势姿态节点中的数据匹配的算法、库和计算。

可由深度识别器模块402使用各种不同技术。这些技术包括但不限于基于深度的质心(例如图12、254)、基于深度的惯性张量(例如图12、256)、基于深度缓冲的象限质心计算(例如图13B)、经由剪影顶曲线拟合的基于深度缓冲的身体角度弯曲(例如图18、1854、1856、1858)、侧/正图团块确定、用于从深度缓冲移除接近地板点以消除到地面的剪影渗出的地板移除技术。在一个实施例中,运行时引擎244基于什么姿势正被分析来确定使用这些技术中的哪些。这是基于正被分析的姿势来选择执行的计算的一个示例。因此,图3C的步骤312可包括基于正被分析的姿势来选择这些计算中的一个。

深度识别器358在步骤404执行深度识别器模块402以确定是否识别各个移动。以下讨论将针对其中移动是特定的身体运动(例如仰卧起坐、俯卧撑、弓步等)的实施例。然而,深度识别器358可用于识别除了身体运动之外的移动。

如果姿态被识别(步骤414),则控制传到步骤422以确定这是否是该身体运动的最后姿态。如果其是,则姿势通过识别标准(步骤420)。如果其不是最后姿态(步骤422=否),则控制传到步骤412以得到将被识别/检测的下一姿态。这可在步骤410从姿势数据库240获得。控制然后传到步骤404以再一次执行识别器模块402。

如果姿态未被识别(步骤414=否),则做出该姿态是否是关键的确定(步骤416)。如果该姿态不是关键的,则控制传到步骤412以获得对于该身体运动将被识别的下一姿态。如果该姿态是关键的(步骤416=是),则控制传到步骤418以记录姿势无法通过识别标准。

深度识别器358的输出是是否检测到正确的移动,由决策方框362表示。

图3E是示出运行时引擎244的移动识别器360的一个实施例的进一步细节的图。移动识别器360具有ST滤波器、ST归一化和ST约束作为输入。这还可以被称为骨架跟踪信息。下文讨论的图5A-5C提供了生成骨架跟踪信息的一个实施例的进一步细节。移动识别器360还可访问姿势数据库240。

移动识别器360包括移动识别器模块442。这些是用于识别姿态、确定用户位置或移动是否与姿势姿态节点中存储的数据匹配的算法、库和计算。可通过移动识别器模块442使用各种不同技术。那些技术包括但不限于与阈值范围的ST关节位置和旋转比较、基于身体模型的质心和惯性张量计算(例如图6A、650)、使用质心状态矢量的基于身体模型的脚力计算(例如图8A)、使用基于全身冲激的约束求解的肌肉力/扭矩计算(例如图8B)、运动重复标定和粗略界定(例如图9A)、对重复的曲线拟合以确定重复时序(例如图10A)、DSP自相关和信号相减以标识重复到重复的节拍和重复到重复类似性(例如图11A)。在一个实施例中,运行时引擎244基于正分析什么姿势来确定使用这些技术中的哪些。这是基于正被分析的姿势来选择执行的计算的一个示例。因此,图3C的步骤312可包括基于正被分析的姿势选择这些计算之一。

移动识别器360在步骤444执行运动识别器模块442以确定是否识别各个移动。以下讨论将针对其中移动是特定身体运动(例如仰卧起坐、俯卧撑、弓步等)的实施例。然而,移动识别器360可用于识别除了身体运动之外的移动。

如果姿态被识别(步骤414),则控制传到步骤422以确定这是否是该身体运动的最后姿态。如果其是,则姿势通过识别标准(步骤420)。如果其不是最后姿态(步骤422=否),则控制传到步骤412以得到将被识别/检测的下一姿态。这可在步骤410从姿势数据库240获得。控制然后传到步骤404以再一次执行识别器。

如果姿态未被识别(步骤414=否),则做出该姿态是否是关键的确定(步骤416)。如果该姿态不是关键的,则控制传到步骤412以获得对于该身体运动将被识别的下一姿态。如果该姿态是关键的(步骤416=是),则控制传到步骤418以记录姿势无法通过识别标准。

移动识别器360的输出是是否检测到正确的移动,由决策方框362表示。

图3F是示出运行时引擎244的位置分析364的一个实施例的进一步细节的图。位置分析364具有ST滤波器、ST归一化、ST约束和深度/图像分割356(其将结合图3B的方框356来讨论)作为输入。

而且输入是当前姿势姿态452。当前姿势姿态452指的是可从姿势数据库240获得的姿势或姿态之一。姿势可提供将被检测的反馈情况的列表,以及标识哪些计算用于分析以及将被馈送给这些计算以触发它们的参数。如上文提到的,姿势可以由包括开始姿态、结束姿态和若干中间姿态的若干状态构成。每个状态可具有相关联姿态。对于每个状态(除了姿态之外),状态节点可包含反馈滤波器类型(和相关联数据)和反馈分析类型的列表。

在获得姿态数据(步骤454)之后,访问滤波器数据(步骤456)。如提到的,该滤波器数据可以在姿势数据中规定。在步骤458,确定将要执行的分析的类型以及相关参数。再次,姿势数据可规定反馈和分析类型。

在步骤460,执行位置分析。位置分析的示例包括但不限于,四肢和身体是否在某一阈值内的某一位置,手是否在臀部上,手是否在臀部的某一距离内,关节是否在某一角度范围内等。

可在步骤460中使用的技术包括但不限于,与阈值范围的ST关节位置和旋转比较,基于身体模型的质心和惯性张量计算(例如图6A、650),使用质心状态矢量的基于身体模型的脚力计算(例如图6A、660;图8A)、运动重复标定和粗略界定(例如图9A)和对重复的曲线拟合以确定重复时序(例如图10A)。在一个实施例中,运行时引擎244基于正分析什么姿势来确定使用这些技术中的哪些。这是基于正被分析的姿势来选择执行的计算的一个示例。因此,图3C的步骤312可包括基于正被分析的姿势选择这些计算之一。

步骤460确定是否满足条件(步骤462)。如果满足反馈情况的条件,则存在进一步滤波(步骤464)以清除可通过假的肯定性结果(positve)生成、要求较高精度或仅被视为应当在非常特别情况中触发的一些东西的反馈的选项。滤波器的一些示例是:如果系统100看到在<y>个姿势中反馈情况触发<x>次,如果系统100看到在一排中相同反馈情况触发<x>次等,则仅向用户给出反馈。

如果步骤466确定在应用反馈后将生成反馈,则生成反馈(步骤468)。对用户的反馈是检测姿势的关键部分。可针对任何类型的体验(例如身体健身、体育、动作游戏等)提供反馈。除了确定用户是否成功执行了姿势之外,系统还向用户提供反馈。这可能是仅仅为肯定性加强(“做得好!”、“完美的摆动!”),或更复杂形式的校正反馈(“手在臀部上”、“你倾斜过于向前”、“努力摆动你的手臂更高以击打球”、或“你需要蹲得更低”)。还可生成否定性反馈(“你未完成俯卧撑”、“你的节拍太慢”、“你的轻击力量过大”等)。

可使用深度识别器358和/或移动识别器360的结果来帮助生成反馈。注意,这些结构不限于用户是否执行正确移动。相反,深度识别器358和/或移动识别器360可提供帮助通知包括但不限于之前段落的示例的反馈的结果。

图3G是示出运行时引擎244的时间/动作分析366的一个实施例的进一步细节的图。时间/动作分析366具有ST滤波器、ST归一化、ST约束、深度/图像分割356作为输入。因为时间/动作分析366的一些元素类似于位置分析364的那些,所以它们将不被详细讨论。

而且到时间/动作分析366的输入是当前姿势姿态452。在获得姿态数据(步骤454)之后,访问滤波器数据(步骤456)。

在步骤470,执行时间/动作分析。分析可以是基于节拍(例如用户在某一节奏或足够长地击中或保持姿态?)、基于移动(例如,理解臀部和膝盖在特殊姿势期间移动的方式可能指示当不期望时的内转)。可执行其他类型的时间/动作分析。

可在步骤470使用的技术包括但不限于,使用质心状态矢量的基于身体模型的脚力分析(例如图8A)、使用基于全身冲激的约束求解的肌肉力/扭矩计算(例如图8B)、DSP自相关和信号相减以标识重复到重复的节拍和重复到重复类似性(例如图11A)。在一个实施例中,运行时引擎244基于正分析什么姿势来确定使用这些技术中的哪些。这是基于正被分析的姿势来选择执行的计算的一个示例。

步骤470确定是否满足条件(步骤462),如果满足反馈情况的条件,则存在进一步滤波(步骤464)以清除可通过假的肯定性结果生成、要求较高精度或仅被视为应当在非常特别情况中触发的一些东西的反馈的选项。

如果步骤466确定在施加反馈后将生成反馈,则生成反馈(步骤468)。可使用深度识别器358和/或移动识别器360的结果来帮助生成反馈。

图3H是示出运行时引擎244的深度分析368的一个实施例的进一步细节的图。深度分析368具有ST滤波器、ST归一化、ST约束、深度/图像分割356作为输入。因为深度分析368的一些元素类似于位置分析364的那些,所以它们将不被详细讨论。

而且到深度分析368的输入是当前姿势姿态452。在获得姿态数据(步骤454)之后,访问滤波器数据(步骤456)。

在步骤480,执行深度分析。分析可以是基于节拍、基于位置、基于移动的等。这样的分析的示例结合位置分析364和时间/动作分析366进行了讨论。

可在步骤480中使用的技术包括但不限于基于深度的质心(例如图12、254)、基于深度的惯性张量(例如图12、256)、基于深度缓冲的象限质心计算(例如图13B)、经由剪影顶曲线拟合的基于深度缓冲的身体角度弯曲(例如图18、1854、1856、1858)和侧/前团块确定。在一个实施例中,运行时引擎244基于正分析什么姿势来确定使用这些技术中的哪些。这是基于正被分析的姿势来选择执行的计算的一个示例。因此,图3C的步骤312可包括基于被分析的姿势来选择这些计算之一。

步骤480确定是否满足条件(步骤462),如果满足反馈情况的条件,则存在进一步滤波(步骤464)以清除可通过假的肯定性结果生成、要求较高精度或仅被视为应当在非常特别情况中触发的一些东西的反馈的选项。

如果步骤466确定在施加反馈后将生成反馈,则生成反馈(步骤468)。可使用深度识别器358和/或移动识别器360的结果来帮助生成反馈。

图4A图示可在计算系统112处从采集设备120接收的深度图像的示例实施例。根据示例实施例,深度图像可以是通过上文关于图18描述的例如采集设备120的3-D摄像机226和/或RGB摄像机228采集的场景的图像和/或帧。如在图4A中示出的,深度图像可包括对应于例如用户(例如上文关于图1A和1B描述的用户118)的人类目标和一个或多个非人类目标(例如采集场景中的墙壁、桌子、监视器或类似物)。如上所述,深度图像可包括多个观察的像素,其中每个观察的像素具有与其相关联的观察深度值。例如,深度图像可包括采集的场景的二维(2-D)像素区域,其中在2-D像素区域中的特定x值和y值处的每个像素可具有采集的场景中的目标或对象与采集设备的例如以例如厘米、毫米等为单位的长度或距离的深度值。换言之,深度图像可针对深度图像中的每个像素规定像素位置和像素深度。在分割进程(例如通过运行时引擎244执行)之后,深度图像中的每个像素还可具有与其相关联的分割值。像素位置可通过x位置值(即水平值)和y位置值(即垂直值)来指示。像素深度可通过z位置值(还被称为深度值)来指示,这指示在用于获得深度图像的采集设备(例如120)与通过该像素表示的用户的部分之间的距离。分割值用于指示像素是否对应于具体用户,或不对应于用户。

在一个实施例中,深度图像可是彩色化的或灰度级的,使得深度图像的像素的不同颜色或阴影对应于和/或视觉地描绘目标与采集设备120的不同距离。在接收图像之后,可从深度图像移除和/或平滑化一个或多个高方差和/或带噪声的深度值;可以填充和/或重构丢失和/或移除的深度信息的部分;和/或可以对接收的深度图像执行任何其他适当处理。

图4B提供深度图像(不对应于与图4A相同的示例)的另一视图/表示。图4B的视图将每个像素的深度数据示为表示目标到用于该像素的采集设备120的距离的整数。图4B的示例深度图像示出24×24像素;然而,很可能,将使用更大分辨率的深度图像。

图5A示出通过骨架识别引擎192生成的示例身体模型70的非限制视觉表示。身体模型70是建模的目标(例如来自图1A和1B的用户118)的机器表示。身体模型70可包括一个或多个数据结构,该数据结构包括在游戏或其它应用/操作系统的语言中共同定义建模目标的一组变量。

目标的模型可以被不同地配置,而不背离本公开的范围。在一些示例中,身体模型可包括将目标表示为包括刚性和/或可变形形状或身体部位的三维模型的一个或多个数据结构。每个身体部位可被表征为数学原语,其示例包括但不限于,球体、各向异性缩放的球体、圆柱体、各向异性的圆柱体、平滑圆柱体、盒、有斜面的盒、棱柱等。在一个实施例中,身体部位是关于身体部位的轴对称的。

例如,图5A的身体模型70包括身体部位bp1到bp14,其每个表示建模目标的不同部分。每个身体部位是三维形状。例如,bp3是表示建模目标的左手的矩形棱柱,并且bp5是表示建模模型的左上臂的八边形棱柱。身体模型70是示例性的,因为身体模型70可包含任何数量的身体部位,每个身体部位可以是建模目标的对应部位的任何机器可理解的表示。在一个实施例中,身体部位是圆柱体。

包括两个或更多身体部位的身体模型70还可包括一个或多个关节。每个关节可允许一个或多个身体部位相对于一个或多个其他身体部位移动。例如,表示人类目标的模型可包括多个刚性和/或可变形身体部位,其中一些身体部位可表示人类目标的对应解剖身体部位。此外,模型的每个身体部位可包括一个或多个结构构件(即“骨骼”或骨架部分),而关节位于相邻骨骼的交叉点。应当理解的是,一些骨骼可对应于人类目标中的解剖骨骼和/或一些骨骼可不具有在人类目标中的对应解剖骨骼。

骨骼和关节可共同构成骨架模型,其可以是身体模型的构成元件。在一些实施例中,骨架模型可以用于替代另一类型的模型(如图5A的模型70)。骨架模型可包括用于每个身体部位的一个或多个骨架构件和在相邻骨架构件之间的关节。示例骨架模型80和示例骨架模型82分别在图5B和5C中示出。图5B示出如从正面观看的骨架模型80,具有关节j1到j33。图5C示出如从歪斜视图观看的骨架模型82,也具有关节j1到j33。骨架模型可包括更多或更少关节,而不背离本公开的精神。下文解释的本系统的另外实施例使用具有31个关节的骨架模型来操作。

在一个实施例中,系统100添加表示身体部位的几何形状到骨架模型以形成身体模型。注意,不是所有关节都需要被表示在身体模型中。例如,对于手臂,可存在用于上臂的添加在关节j2和j18之间的圆柱体,和用于下臂的添加在关节j18和j20之间的另一圆柱体。在一个实施例中,圆柱体的中心轴链接两个关节。然而,可能不存在添加在关节j20和j22之间的任何形状。换言之,手可能不被表示在身体模型中。

在一个实施例中,添加几何形状到骨架模型以用于以下身体部位:头、上躯干、下躯干、上左臂、下左臂、上右臂、下右臂、上左腿、下左腿、上右腿、下右腿。在一个实施例中,这些都是圆柱体,尽管可使用另一形状。在一个实施例中,这些形状关于形状的轴是对称的。

身体部位的形状可以与多个两个关节相关联。例如,上躯干身体部位的形状可以与j1、j2、j5、j6等相关联。

上述身体部位模型和骨架模型是可用作建模的目标的机器表示的模型的类型的非限制示例。其它模型也在本公开的范围内。例如,一些模型可包括多边形网格、贴片、非均匀有理B样条、细分表面、或其它高阶表面。模型还可包括表面纹理和/或其它信息以更精确表示衣服、头发和/或建模目标的其它方面。模型可以可选地包括关于当前姿态、一个或多个过去姿态和/或模型物理学的信息。应当理解的是,可被摆成姿态的各种不同模型与本文描述的目标识别、分析和跟踪系统兼容。

用于生成在采集设备120的视场(FOV)内的一个或多个用户的骨架模型的软件管线是已知的。一个这样的系统在例如题为“SystemForFast,ProbabilisticSkeletalTracking”、2010年9月7日提交的美国专利公开2012/0056800中公开。

基于身体模型的质心状态矢量

图6A是运行时引擎244的一个实施例的图。运行时引擎244包括基于身体模型的质心状态矢量计算650、约束建模和求解660和信号分析670。在一个实施例中,基于身体模型的质心状态矢量计算650计算身体部位质心状态矢量和整个身体质心状态矢量。这些状态矢量中的一个或多个元素被提供给约束建模和求解660以及给信号分析670。将在下文更详细描述这些元素中的每个。

取决于正在跟踪什么用户行为,有时将有用的是能够确定和跟踪用户的质心。可针对个体身体部位,以及针对整个身体来跟踪质心。在一个实施例中,基于个体身体部位的质心来确定用户的整个身体质心。在一个实施例中,身体部位被建模为几何形状。在一个实施例中,几何形状是关于几何形状的轴对称的。例如,几何形状可以是圆柱体、椭圆体、球体等。

还可有用的是跟踪惯性张量。可以针对个体身体部位,以及针对整个身体来跟踪惯性张量。在一个实施例中,基于个体身体部位的惯性张量来确定用户的整个身体惯性张量。

在一个实施例中,确定身体部位质心状态矢量。身体部位质心状态矢量可包括但不限于,身体部位的质心位置、身体部位的质心速度、身体部位的质心加速度、身体部位的取向、身体部位的角速度、身体部位的角加速度、身体部位的惯性张量和身体部位的角动量。质心状态矢量可包括前述或附加元素的任何子集。注意,为了讨论的目的,质心状态矢量可包含其值不随着时间改变的元素。例如,身体部位的惯性张量可随着时间维持恒定(尽管身体部位的取向可以改变)。

在一个实施例中,确定整个身体质心状态矢量。整个身体质心状态矢量可包括但不限于,整个身体的质心位置、整个身体的质心速度、整个身体的质心加速度、整个身体的取向、整个身体的角速度、整个身体的角加速度、整个身体的惯性张量和整个身体的角动量。整个身体质心状态矢量可包括前述或附加元素的任何子集。在一个实施例中,至少部分基于个体身体部位的质心状态矢量的一个或多个元素来确定整个身体质心状态矢量。

这样的个体身体部位和整个身体质心状态矢量信息可用于跟踪和评估执行某些运动(例如下蹲、弓步、俯卧撑、跳跃、或分腿跳)的用户,从而可控制用户的化身,可给用户评分和/或可提供反馈给用户。作为一个特定示例,当用户正执行下蹲时,他们的整个身体质心应当上下移动,而不具有横向动作。

还可有用的是,知道身体部位如何相对于彼此移动。例如,在一个实施例中,当用户在举重时弯曲他们的手臂时,系统100确定下臂如何相对于上臂移动。该分析可考虑身体部位的动作,而不考虑动作的起因。这有时被称为运动学。前述个体身体部位质心状态矢量信息中的一些可被使用。

还可有用的是,知道要求在用户的身体内的什么力和/或扭矩以导致系统100观察到的用户的动作。在一个示例中,使用逆动力学来确定施加什么力和/或扭矩来导致观察的动作。这可以是在身体模型中的关节处的力和/或扭矩。作为一个示例,系统100可确定当用户执行某个动作(例如当出拳、执行弓步或下蹲等时)要求什么脚力。在一定程度上,身体模型中的关节处的力和/或扭矩可与用户的肌肉施加的力相关。可使用前述个体身体部位和整个身体质心状态矢量信息中的至少一些。

在一个实施例中,通过分析身体模型来针对个人确定质心。这可以是例如图5A、5B和/或5C的示例的身体模型,或从图5A、5B和/或5C的示例导出的身体模型。因此,这可以基于骨架跟踪。图6B是基于身体模型确定人的质心的进程600的一个实施例的流程图。在一个实施例中,进程600经由加权平均方法计算质心。进程600可通过基于身体模型的质心状态矢量计算650来执行。

在步骤602,接收深度图像。图4A和4B是深度图像的一个示例,但是步骤602不限于该示例。

在步骤604,从深度图像形成身体模型。在一个实施例中,这包括形成具有关节的骨架模型。在一个实施例中,当形成身体模型时使用骨架识别引擎192。附加地,可在两个关节之间添加某一几何形状。在一个实施例中,几何形状是关于几何形状的轴对称的。例如,几何形状可以是圆柱体、椭圆体、球体等。作为一个示例,在关节j2和j18之间添加圆柱体(见图5A)以表示用户的上臂。每个身体部位可被分配3D空间中的位置。

不要求的是,每个身体部位被给予相同形状。每个身体部位还可被分配尺寸参数。因此,对于圆柱体,身体部位可被分配高度和半径。可使用其他形状,例如但不限于椭圆体、锥体和块。

每个身体部位还可被给予质量(mi),以下是用于一个示例的身体部位及其相应质量的示例列表。

可存在更多或更少的身体部位。不要求对不同身体部位的相对质量分布对于每个用户是相同的。例如,男性用户可具有与女性用户不同的质量分布。可使用各种技术来确定用户的总质量(M)。在一个实施例中,系统要求,用户输入他们的质量以及可能的其它信息,例如年龄、性别等。在一个实施例中,系统基于例如用户的总体积的分析和关于密度的假定来估计总质量。总体积可从深度图像来确定。关于密度的假定可以基于例如体积的相对分布(例如用户具有大腰部)之类的各种因素。

在步骤606,针对每个身体部位计算质心(Pi)。可基于用于对身体部位建模的形状来计算质心。用于确定各种形状的质心的公式是本领域已知的。步骤606可确定质心的3D位置。在一个实施例中,这是(x,y,z)坐标。然而,可使用另一坐标系统(例如圆柱体的、球体的)。

在步骤608,基于个体身体部位的质心来计算人作为整体的质心。等式1可用于确定人作为整体的质心。

        等式1

在等式1中,P是最终质心位置,M是质量的和,n是身体部位的数量,mi是特定身体部位的质量,并且Pi是身体部位的质心的位置(在三维中)。可通过例如确定质心位置的基于身体模型的质心状态矢量计算650来使用上述等式。

根据一个实施例,除了基于身体模型确定质心之外,还可基于身体模型确定惯性张量。局部惯性张量的计算可根据身体部位的形状和身体部位的取向两者。可经由身体部位的方向(例如上臂从肩膀指向肘部)来确定取向,并且通过使用对称的身体部位(例如圆柱体)来促进取向。

图7A是基于身体模型确定惯性张量的进程700的一个实施例的流程图。进程700可以用于确定每个身体部位的惯性张量,以及人作为整体的惯性张量。进程700可以通过图6A的运行时引擎244的基于身体部位的质心状态矢量计算650来执行。

在步骤702,针对每个身体部位确定惯性张量Ib。这在本文称为“基本惯性张量”。在一个实施例中,身体部位具有圆柱体的形状。具有半径r和高度h的固体圆柱体的惯性张量可以被确定为:

在该示例中,利用具有沿着圆柱体的长度的z轴的参考系来计算惯性张量。这仅仅是一个示例;可使用很多其它形状。

在步骤704,确定每个身体部位的取向。在一个实施例中,这基于骨架跟踪数据来确定。例如,可基于关节j2和j18的3D坐标来定义上臂的身体部位的取向(见图5B)。在其中身体部位被建模为圆柱体的示例中,这可以是圆柱体的中心轴。各个身体部位的中心轴(或取向)将最可能不相互平行。

在一个实施例中,平行轴定理被用于从个体身体部位惯性张量计算整个身体惯性张量。平行轴定理可被用于在整个身体的参考系中再用公式表示身体部位的惯性张量。换言之,平行轴定理可被用于依照整个身体的参考系来表示身体部位的惯性张量。如熟知的,平行轴定理包含使用两个平行轴。第一轴是用于整个身体,其在目标参考系中。第一轴穿过整个身体的质心。第二轴是穿过身体部位的质心并且平行于第一轴的轴。轴的选择是任意的,只要两个轴是平行的。即,针对第一和第二轴可作出很多不同选择。当使用精选的身体部位时,惯性张量表示起来非常简单。如上文指示的,当在所选择的参考系中测量时,身体部位惯性张量可以是对角矩阵。然而,身体部位参考系罕有与整个身体参考系相同。因此,可以执行旋转来使身体部位惯性张量旋转,使得其是整个身体的参考系。在步骤706,旋转每个身体部位的惯性张量到目标(整个身体)参考系。注意,选择选择导致对角矩阵的身体部位的局部参考系简化了计算,但是不是要求的。旋转技术可以被实现为如等式2中那样:

        (等式2)

在等式2中,O是从局部空间到目标惯性参考系的旋转矩阵,Ib是基本惯性张量,并且OT是旋转矩阵O的转置。旋转矩阵将惯性张量从一个系“旋转”到另一个。该种类的旋转矩阵的示例可在动画中找到,其中旋转矩阵是用于基于正在进行什么基本骨架对顶点进行定位的旋转缩放平移系统的部分。类似种类的3×3旋转矩阵可以用于使用等式2将惯性张量从一个参考系旋转到另一个。

在步骤708,针对作为整体的人来确定惯性张量。步骤708可以被视为在针对所有身体部位完成步骤706之后将所有身体部位的惯性张量加总在一起。在一个实施例中,这是得到针对整个身体的最终3×3惯性张量的每元素总和。这可使用等式3来计算。

        (等式3)

在等式3中,I是总体惯性张量。Ii是身体部位的局部惯性张量(在与I相同的参考系中),mi是身体部位的质量,n是身体部位的数量,Ri是从身体部位质心到整个身体质心(P)的矢量,并且E是单位矩阵。“.”算子是点算子(RiTRi),并且“T”上标是矢量的转置。

在一个实施例中,使用惯性张量来分析用户如何执行动作。例如,用户可执行两个跳跃,其中他们的质心达到相同高度。然而,在一个情况下,用户可以是伸长的,并且在其它情况下,用户可以蜷伏在一起多少成为更像是球状形状。系统100可基于整个身体惯性张量容易地标定在这两个情况之间的甚至微妙差别。惯性张量的很多其它用途是可能的。

除了身体部位的质心和惯性张量之外,在一个实施例中计算身体部位的其它质心状态矢量元素。身体部位的质心状态矢量可包括以下中的一个或多个:身体部位的质心位置、身体部位的质心速度、身体部位的质心加速度、身体部位的角速度、身体部位的角加速度、身体部位的惯性张量,以及身体部位的角动量。

图7B是确定身体部位质心状态矢量中的元素的进程的一个实施例的流程图。可通过基于身体模型的质心状态矢量计算650来执行该进程。在步骤722,访问在不同时间点的身体模型。这可以是针对两个接连帧。

在步骤724,确定每个身体部位的质心的速度。在一个实施例中,通过比较两个时间点的质心的位置来确定质心速度。这可以是针对图像数据的两个接连帧。然而,质心速度可以基于质心的位置的多于两个的数据点。在一个实施例中,步骤724使用来自两个不同时间点的来自步骤606的数据。

在步骤726,确定每个身体部位的质心的加速度。在一个实施例中,通过比较两个时间点的质心的速度来确定质心的加速度。这可以是针对图像数据的两个接连帧。然而,质心加速度可以基于质心的速度的多于两个数据点。在一个实施例中,在步骤726中使用来自步骤724的速度数据(针对两个不同时间点)。

在步骤728,确定每个身体部位的角速度。在一个实施例中,每个身体部位被建模为具有轴的形状。该形状可以关于该轴对称。例如,身体部位可以是具有轴的圆柱体,该轴是通过其两个底部的中心形成的线。基于在两个时间点的身体部位的位置之间的差别,可以利用熟知公式计算角速度。可以相对于除了轴之外的参考点来确定角速度。而且,不要求形状是关于用作用于确定角速度的参考的轴对称的。步骤728可使用来自两个不同时间点的身体模型的数据。

在步骤730,确定每个身体部位的角加速度在一个实施例中,基于在两个时间点的身体部位的角速度之间的差别来确定该身体部位的角速度。步骤730可使用两个不同时间点的来自步骤728的数据。然而,可使用其他技术。在实施例中,根据等式4确定每个身体部位的角加速度。

        等式4

在步骤732,确定每个身体部位的角动量(Li)。在一个实施例中,基于在步骤702确定的身体部位的惯性张量(Ii)和在步骤726确定的角速度来确定身体部位的角动量。可根据等式5确定个体身体部位的角动量(Li)。

        等式5

除了整个身体的质心和惯性张量之外,在一个实施例中计算整个身体的其他质心状态矢量元素。整个身体的质心状态矢量可包括以下中的一个或多个:整个身体的质心位置、整个身体的质心速度、整个身体的质心加速度、整个身体的取向、整个身体的角速度、整个身体的角加速度、整个身体的惯性张量,以及整个身体的角动量。整个身体的质心状态矢量可包括前述或附加元素的任何子集。

图7C是确定在整个身体质心状态矢量中的元素的进程的一个实施例的流程图。可通过图6A的基于身体模型的质心状态矢量计算650来执行该进程。在步骤744,确定整个身体的质心的速度。在一个实施例中,通过比较两个时间点的质心的位置来确定质心速度。在一个实施例中,可在步骤744中使用在步骤608中确定的(针对两个时间点)的整个身体的质心位置。如熟知的,可通过距离的差别相比时间的差别来计算速度。

在步骤746,确定整个身体的质心的加速度。在一个实施例中,通过比较两个时间点的质心的速度来确定质心的加速度。在一个实施例中,在步骤746中使用来自步骤744的速度数据(针对两个不同时间点)。

在步骤748,确定整个身体的角动量(L)。在一个实施例中,基于在图7B的步骤732中确定的每个身体部位的角动量(Li)和每个身体部位的角动量对总角动量的非旋转贡献(Lnri)来确定整个身体的角动量。在图7B的步骤732中讨论每个身体部位的角动量(Li)的计算。

在一个实施例中,通过将身体部位视为具有身体部位的质量并且以其质心的速度移动的颗粒来计算身体部位对总角动量的非旋转贡献(Lnri)。可使用用于计算围绕点(在该情况下,该点是整个身体的质心)的一组颗粒的角动量的标准公式(见等式6A)。

        等式6A

在等式6A中,Lnr是所有的身体部位对整个身体角动量的非旋转贡献的总和,ri是身体部位的质心相对于整个身体质心的位置的位置,mi是身体部位的质量,并且vi是身体部位相对于整个身体质心的线速度的线速度,并且“x”是叉积算子。可从步骤744获得整个身体的质心的速度。可从图7B的步骤724获得身体部位的质心的速度。

每个身体部位的各个角动量(Li)被相加并且添加到在等式6A中确定的所有的身体部位对整个身体角动量的非旋转贡献的总和(Lnr)以得到总角动量。

        等式6B

在步骤750,确定整个身体的角速度(ω)。在一个实施例中,从在步骤748确定的整个身体的角动量和整个身体的惯性张量的倒数来计算整个身体的角速度(ω)。在图7A的步骤708中确定了整个身体的惯性张量。

在步骤752,确定人作为整体的角加速度(α)。在一个实施例中,根据等式7来确定整个身体的角加速度(α),其中可根据步骤750确定ω。在一个实施例中,使用针对不同时间点的来自步骤750的数据。

        等式7

质心和惯性张量以及质心状态矢量中的其它元素可用于分析用户的移动。在一个实施例中,确定身体部位将需要施加以便导致质心状态矢量的改变的力。例如,当用户在运动时,他们的脚需要施加一定力以便他们跳跃、扭动等。这些力将重量移位以及将身体扭转/扭动起来所需的脚力作为因素考虑(例如你出那个拳有多费力,以及需要多少脚力来保持脚不滑动?)。

可基于脚约束在地面的假定来计算脚力。换言之,系统100确定要求什么脚力来以所观察的方式改变质心状态矢量。在一个实施例中,做出身体是刚性身体的假定。

图8A是确定引起质心状态矢量的改变将需要的力的一个实施例的流程图。在一个实施例中,质心状态矢量是整个身体质心状态矢量。在一个实施例中,该力是脚力。

在步骤802,确定在一个时间点的整个身体的质心状态矢量。这可以是针对图像数据的单个帧。在一个实施例中,进程使用位置、取向、速度和角速度来计算力(例如脚力)。位置可以是如在图6B的步骤608中确定的整个身体质心位置。整个身体的取向可以在图7A中当确定整个身体的惯性张量时确定。速度可以是如在图7C的步骤744中确定的整个身体质心速度。角速度可以是如在图7C的步骤748中确定的整个身体角速度。整个身体质心状态矢量可包括前述或附加元素的任何子集。

在步骤804,确定在稍后时间点的整个身体质心状态矢量。这可以是针对图像数据的下一帧。在步骤806,确定在两个整个身体质心状态矢量之间的差别。

在步骤808,确定改变整个身体质心状态矢量所要求的脚力。步骤808可以通过在图6A中描绘的运行时引擎中的约束建模和求解660来执行。

在一个实施例中,将身体视为刚性身体,而脚是在地面上的约束点。脚可以是在刚性身体和地面之间的约束点。可从身体模型确定脚的位置。例如,脚位置可以是角关节或一些其他点的3D坐标。

在一个实施例中,做出脚不滑动假定。然而,可使用除脚之外的其他元素用于约束。很多技术可能用于求解具有一个或多个约束的刚性身体问题。用于求解具有一个或多个约束的刚性身体问题的技术在本领域中是已知的。作为一个示例,可使用高斯-赛德尔方法。

图8A的进程提供精确脚(或其它元素)力生成,以及跟踪瞬时效应的能力。例如,如果用户下蹲,则脚力随着用户开始“下降”变得更轻,然后变得更重以“刹住”下降从而用户的质心停止。将角速度并入计算并且角速度从帧到帧的改变(例如,在两个时间点之间)处理系统的旋转部分。在一个实施例中,这是整个身体角速度。该技术可以比仅示出“静态”力的脚力生成技术更加精确,如在当用户不在移动时支撑用户所需的力中。

在一个实施例中,系统100通过将身体视为布偶来计算肌肉力/扭矩,所述布偶具有由惯性张量计算使用的形状规定的身体部位,和由身体的配置规定的约束。例如,上臂是一个身体部位,下臂是另一个,并且两者通过位于肘部的约束来连接。此外,如果脚被发现与地面接触,则针对在这样的接触中的每个脚添加约束。

图8B是使用基于全身冲激的约束求解的肌肉力/扭矩计算的一个实施例的流程图。在步骤852,针对一时间点确定身体部位质心状态矢量。这可以是针对图像数据的单个帧。在一个实施例中,身体部位质心状态矢量包括位置、取向、速度和角速度。可针对每个身体部位确定该矢量。

可在图6B的步骤606中确定身体部位质心位置。可从身体部位的轴的取向确定该取向。例如,如果身体部位被建模为圆柱体,则取向可基于圆柱体的中心轴。该速度可以是如在图7B的步骤724中确定的身体部位质心速度。角速度可以是如在图7B的步骤728中确定的身体部位角速度。身体部位质心状态矢量可包括前述或附加元素的任何子集。

在步骤854,针对另一时间点重复步骤852。在步骤856,确定在两个身体部位质心状态矢量之间的差别。

在步骤858,将身体建模为一组关节约束。在步骤860,系统100计算约束力和/或扭矩以移动身体部位来导致在两个最近帧之间的身体部位质心状态矢量的改变。实际上,步骤860确定要求什么伪肌肉来实现整个身体动作。步骤858和860可以通过约束建模和求解660来执行。

步骤860可包括计算全身求解,从而在身体的一侧上完成的动作可影响另一侧。这可以被称为“在一般文献中的逆动力学”。逆动力学得到的是在动作发生时跟踪整个身体的瞬时力/扭矩的能力。例如,由于关于相等和相反力的牛顿定律,如果你挥舞出你的手臂以拳击,则你的身体必须反扭矩以保持其在适当位置。如果你弯曲你的手臂,其要求扭矩。但是你的肩膀必须反扭矩,对抗肘部扭矩,并且你的躯干必须针对肩膀调整,一直到脚。然后,力去到其它方向,意味着最终肘部扭矩必须将肩膀正在做什么等作为因素考虑。这以系统范围求解而告终。

在一个实施例中,使用高斯-赛德尔方法来求解约束。例如,一次可求解一个约束。可然后将结果应用到总体系统。然后,求解下一约束并且将结果应用到总体系统。在求解所有约束之后,可重复进程直到结果收敛。

在一个实施例中,使用基于冲激的技术来求解约束。再次,可以自己孤立地求解每个约束。保持两个身体部位在一起或保持它们以防拉开所需的冲激可以基于惯性张量、质心来计算。

步骤860的结果是在约束下的力/扭矩的集合,其可表示“肌肉”和“关节力”。

用于重复检测和分析的信号分析

当随着时间绘制与重复性动作相关联的参数(例如质心、左肘速度等)时,图可以与信号类似。在训练(例如身体健身训练)的情况下,很多这些信号具有它们特有的“脉冲”外观,其中值从一个位置移位,在某一方向移动,然后在“重复”的末尾回到原始位置。一个实施例包括标定这些序列的重复标定和粗略界定系统。

在一个实施例中,系统100执行信号的重平滑,并且然后切换到导数领域(例如位置变成速度等)。完成“重平滑”以消除信号中的较高频率数据(例如噪声),并且平滑掉导数,其否则可能由于这样的高频率数据而混乱摆动。存在很多标准技术来应用该平滑,例如低通滤波器、移动平均等。

导数领域中的信号可以是正弦。系统100然后分析伪正弦信号。根据一个实施例,通过确保正弦的“上”部分是正弦的“下”部分的显著部分,并且通过确保重复足够长并且具有足够位移,系统100可鲁棒地标定“重复”并且对每个重复的开始/结束时间进行界定。

图9A是分析正被采集系统跟踪的用户执行的重复的进程900的一个实施例的流程图。进程900可以通过图6A的运行时引擎244的信号分析670来执行。

在步骤902,采集深度图像数据的帧。深度图像数据可以跟踪执行某一重复性动作(例如执行身体运动)的用户。为了讨论起见,将讨论执行若干下蹲的用户的示例。

在步骤904,分析图像数据以确定参数的数据点。可跟踪多个不同类型的参数。可跟踪质心状态矢量成分中的任一个。在一个实施例中,随着时间跟踪质心的位置。这可以是整个人的质心或身体部位之一的质心。在一个实施例中,质心状态矢量是基于身体部位的分析。在一个实施例中,质心状态矢量是基于深度图像的分析(将在下文讨论)。因此,图12的基于深度的质心254和/或基于深度的惯性张量256可提供可随着时间被跟踪的参数。

然而,参数不限于本文描述的质心状态矢量成分。作为另一示例,可跟踪在用户的身体模型上的位置。例如,可跟踪关节之一。作为另一示例,可跟踪在用户的剪影上的位置。什么参数得到跟踪的选择可取决于正被分析的姿势(例如身体运动)。可在姿势数据库240中规定针对特定姿势将跟踪的参数。

在步骤906,形成随着时间跟踪数据点的参数信号。参数信号可跟踪由用户执行的重复性动作。图9B示出一个示例参数信号930的表示。图9B中的信号绘出感兴趣参数的位置相比时间。在该情况下参数可以是整个身体质心的位置。在该示例中,位置可以是z坐标。换言之,这可相对于地板跟踪用户的质心。这可能针对基于身体部位的分析的质心状态矢量、基于深度图像的分析(例如基于像素的)的质心状态矢量,或某一其它质心状态矢量。

参数信号930覆盖例如由降低身体同时弯曲腿、然后上升回来构成的下蹲动作的两个重复。在一个实施例中,做出假定:基于重复的训练由以一姿态开始,做些什么并且然后回到开始姿态构成。该序列可被称为重复。

在图9B的示例中,参数信号930跟踪参数随着时间的一个维度。然而,参数信号930可跟踪参数随着时间的两个或三个维度。例如,质心的位置的参数可具有三个维度。在该情况下,可随着时间跟踪维度中的一个、两个或三个。在一个实施例中,参数信号930跟踪该参数的位置相比时间。

参数信号930可跟踪除了位置相比时间之外的一些东西。例如,参数信号930可跟踪速度相比时间、加速度相比时间、角速度相比时间、角加速度相比时间和角动量相比时间。

在步骤908,将参数信号930分为重复性动作的重复。在一个实施例中,将参数信号930分为界定段(bracket),每个界定段包含一重复。界定段可将重复性动作的一个重复根据重复性动作的其它重复描绘出。

在一个实施例中,步骤908包括得出来自步骤906的参数信号930的导数。图9C示出一个示例导数信号940。在该示例中,导数信号940具有中性/下/上/下/中性型式。另一可能型式是中性/上/下/上/中性。再其它的型式是可能的。在这两个示例中,导数信号940去到零线的一侧,然后在回到中性位置之前去到另一侧。在该示例中,导数信号940中对应于重复的部分可类似正弦函数;然而,导数信号940(或其部分)不要求类似正弦函数。

如上文提到的,在一个实施例中,参数信号930跟踪该参数的位置相比时间。在该情况下,导数信号940可跟踪该参数的速度相比时间。在一个实施例中,系统100跟踪质心的位置相比时间,以及质心的速度相比时间。因此,参数信号930可根据位置数据形成,并且导数信号940可根据速度数据形成。

在一个实施例中,从位置数据形成速度数据。例如,可从两个(或更多)时间点的位置数据确定在一个时间点的速度数据。在一个实施例中,通过得到在两个时间点的位置数据之间的差别并且除以时间差来确定速度数据。然而,可使用多于两个时间点。因此,取参数信号930的“导数”可基于在参数信号930的两个数据点之间的差别来执行。

在图9C中标记时间点t0、t1和t2,以显示可如何对导数信号940进行界定。在一个实施例中,每个界定段包含一个重复。从t0-t1的第一界定段对应于包含第一重复的第一界定段。从t1-t2的第二界定段对应于包含第二重复的第二界定段。可然后将时间与参数信号930相关来以类似方式对参数信号930进行界定。

返回参考参数信号930,由于各种理由,(例如总体用户移动、数据不精确),脉冲的终点(例如接近t1)可能不接近开始(例如接近t0)。例如,在执行第一下蹲之后的z位置可能低于在执行第一下蹲之前的z位置。这可使得难以精确确定何时完成每个重复,以及分析用户的形态。

一个实施例的导数方法克服了该问题,因为导数信号940将在参数稳定时返回到零(或接近零)。例如,当用户停止上或下移动时,(质心、骨架关节、剪影上的点等的)z位置暂时稳定。在该示例中,导数信号940变为负,然后在返回零(或接近其)之前变为正。当导数信号940这么做时,系统100能够精确对重复进行界定。

系统100还可具有一些健全性检查。例如,系统100可确保重复具有最小/最大时间。系统100还可确保导数信号940的从零的偏差对于两侧是足够的(例如正侧是负侧的显著部分)。

在步骤910,系统100使用信号处理技术分析参数信号930中的重复。在一个实施例中,步骤910包括进一步细化重复的开始或结束的位置。在一个实施例中,进一步细化重复的开始或结束的位置包括将曲线拟合到参数信号930中对应于重复的一部分。在一个实施例中,进一步细化重复的开始或结束的位置包括将参数信号930中对应于重复的一部分与参数信号930自相关。

在一个实施例中,步骤910包括评估在参数信号930中采集的重复的用户的执行。在一个实施例中,评估用户的执行是基于在拟合曲线和参数信号930之间的差别。在一个实施例中,评估用户的执行包括将参数信号930中限定一个重复的一部分从参数信号930中限定另一重复的另一部分减去。

对重复进行曲线拟合以确定重复时序

一旦系统100使得重复被界定,系统100可将曲线拟合到在已界定的重复的开始/结束之间的参数信号930。利用曲线拟合的结果,系统100可提取关于重复的进一步有用信息,例如重复时间(例如,下蹲花费多久)。示例曲线包括但不限于,余弦、余弦脉冲、具有在脉冲的中间的扁平部分的余弦脉冲,和样条拟合(线性和三次)。

针对非常拟合系统100所拟合的曲线的类型的重复,使用曲线拟合优化技术提供非常精确的重复时序信息。系统100还可经由曲线多接近地拟合到参数曲线930来确定玩家多好地完成该重复。

图10A是将曲线拟合到已界定的重复以确定时序参数的进程1000的一个实施例的流程图。进程1000可通过图6A的运行时引擎244的信号分析来执行。在步骤1002,将曲线拟合到参数信号930中对应于一个界定段的一部分。图10B示出拟合到参数信号930中对应于一个界定段的一部分的示例曲线1030。在该示例中,曲线1030具有五个部分。存在直到重复开始的第一扁平部分,当重复开始时开始的第一余弦部分,在重复的底部处的第二扁平部分,当重复返回时开始的第二余弦部分,和在重复终止后的第三扁平部分。可使用不同类型的曲线1030。曲线1030的类型可取决于用户动作的类型(例如,运动的类型)。

步骤1004用于确定重复的时序参数。曲线拟合促进从拟合曲线提取有用数据,因为分析数学函数经常比分析参数信号930简单得多。例如,如果系统100将半余弦波拟合到参数信号930,则系统100可使用余弦开始/结束时间来确定重复何时开始/结束。因此,在一个实施例中,系统100查看曲线1030上的特定点来确定重复的时序参数。在一个实施例中,系统100寻找在曲线1030的扁平部分与曲线1030的上升/下降部分之间的接合点来确定重复的时序参数(例如重复开始/结束时间)。然而,开始/结束时间可被定义在除了这样的接合点之外的点。

这是如何有用的示例可经由俯卧撑训练示出。在俯卧撑训练中,存在三个部分。人下降,保持下位置,然后向上回来。通过跟踪用户的位置(例如,肩膀的高度),系统100可使用拟合的曲线来确定重复的时序。在该情况下曲线可以是扁平底部的余弦曲线。这仅仅是半余弦波,而余弦的底部(在该情况下)具有任意长的扁平区域。当曲线拟合例程完成时,系统100可分析地测量其向下移动花费的时间(半余弦波的第一半),确定玩家在底部(扁平部分)多久和玩家花费多久返回向上(半余弦波的第二半)。

在一个实施例中,确定拟合曲线和参数信号930之间的差别,以便确定用户执行重复多么好。在可选步骤1006,确定在拟合曲线1030和参数信号930之间的差别。在可选步骤1008,系统100基于那些差别评估用户对重复的执行。

DSP自相关和信号相减

在一个实施例中,使用信号处理(例如,数字信号处理(DSP))技术来分析在一系列重复上的参数信号930。在一个实施例中,使用快速傅里叶变换(FFT)自相关技术来确定两个重复何时发生,通过取参数信号930中包含一个重复的一部分并且将其沿着参数信号930相关。结果得到的自相关的峰值可以是参数信号930中最佳匹配重复的位置(通常序列中的下一重复)。结果可以是非常精确的重复到重复的时序值,其指示何时重复A在时序方面与重复B最佳拟合。

在一个实施例中,系统100从参数信号930中定义另一重复的另一部分减去参数信号930中定义一个重复的一部分,使用该时间变化量来看重复多么不同。这提供了用于分析人从重复到重复执行得如何的附加工具。

图11A是用于使用信号处理来分析参数信号930的进程1100的一个实施例的流程图。进程1100可以通过图6A的运行时引擎244的信号分析来执行。在步骤1102,执行参数信号930的一部分与参数信号930的自相关。在一个实施例中,将参数信号930的已界定部分与参数信号930的某一部分自相关。参数信号930的该部分的长度可以是几个界定段,很多界定段,一些其他单元等。例如,系统110可拾取时间帧,例如10秒,并且将一个界定段(具有一个重复)与整个范围自相关。在一个实施例中,系统100使用基于快速傅里叶变换(FFT)的自相关技术来寻找参数信号930类似于其自身的地方。

在步骤1104,系统100基于自相关的一个实施例的结果定义在参数信号930中的重复的位置。例如,可使用峰值来定位重复。图11B示出自相关的示例。示出示例参数信号930,连同参数信号930的已界定部分1120一起。已界定部分1120可从参数信号930直接取得。可通过图9A的进程来定义已界定部分1120的范围。可将已界定部分1120自相关到参数信号930的任何部分(例如过去,当前和/或未来)。

示例自相关信号1130具有若干峰值1140a-1140e。这些峰值1140可用于精确确定在重复之间的时间间隙。这些峰值1140还可用于定义重复的精确位置。最高峰值1140将通常对应于其中已界定部分被与自身相比的部分。

在可选步骤1106,从参数信号930中对应于另一重复的另一部分减去参数信号930中对应于一个重复的一个部分。可通过在步骤1104确定的重复的精确位置来辅助该步骤的精度。

步骤1106中的两个部分不一定包括整个界定段,尽管这是一种可能性。在一个实施例中,确定重复的开始和/或结束的精确位置(例如,通过使用图10A的步骤1004)来确定应当使用什么部分。

在可选步骤1108,系统100基于在两个重复之间的差别来确定用户多好得执行重复。例如,如果用户变得疲劳,重复的形状可从一个重复改变到下一个。如果参数信号930对于两个重复是相同的,则结果将是扁平线。可分析从扁平线的偏差。

在一个实施例中,不是将参数信号930的已界定部分与参数信号930的其他部分自相关,而是将已界定部分与保存的参数信号930自相关。保存的参数信号930可以针对特定动作的理想形态。

基于深度图像的质心和惯性张量

图12图示图2中介绍的运行时引擎244的示例实施例。参考图12,运行时引擎244被显示为包括深度图像分割模块252、基于深度的质心模块254、基于深度的惯性张量模块256和缩放器258。在实施例中,深度图像分割模块252被配置为检测在深度图像中的一个或多个用户(例如人类目标),并且将分割值与每个像素关联。这样的分割值用于指示哪些像素对应于用户。例如,1的分割值可被分配给对应于第一用户的所有像素,2的分割值可被分配给对应于第二用户的所有像素,并且任意预定值(例如,255)可被分配给不对应于用户的像素。还可能的是,分割值可被分配给除了用户之外的在深度图像内标识的对象,例如但不限于网球拍、跳绳、球、地板等。在实施例中,作为由深度图像分割模块252执行的分割进程的结果,深度图像中的每个像素将具有与该像素相关联的四个值,包括:x位置值(即水平值);y位置值(即垂直值);z位置值(即深度值);和分割值,其刚在上文解释。换言之,在分割之后,深度图像可指定多个像素对应于用户,其中这样的像素还可被称为基于深度的用户剪影。附加地,深度图像可针对对应于用户的像素中的每一个,指定像素位置和像素深度。像素位置可以由x位置值(即水平值)和y位置值(即垂直值)来指示。像素深度可由z位置值(还称为深度值)来指示,其指示在用于获得深度图像的采集设备(例如120)与由像素表示的用户的部分之间的距离。

再参考图12,在实施例中,使用基于深度的质心模块254来确定对应于用户的多个像素的基于深度的质心位置,其计及在由像素表示的用户的部分与用于获得深度图像的采集设备之间的距离。下文参考图7A-8B描述了涉及确定基于深度的质心位置的附加细节。在实施例中,基于深度的惯性张量模块256用于基于所确定的对应于用户的多个像素的基于深度的质心位置来确定对应于用户的多个像素的基于深度的惯性张量。下文参考图7A-8B来描述涉及确定基于深度的惯性张量的附加细节。如附加地详细描述的,参考图13A-14B,缩放器258可用于使用对应于用户的多个像素具有预定质量(例如,75kg)的假定来对确定的基于深度的惯性张量进行缩放。

如上文解释的,采集设备120提供RGB图像(还称为彩色图像)和深度图像到计算系统112。深度图像可以是多个观察的像素,其中每个观察的像素具有观察的深度值。例如,深度图像可包括采集的场景的二维(2-D)像素区域,其中2-D像素区域中的每个像素可具有深度值,例如在采集场景中的对象距采集设备的以例如厘米、毫米等为单位的长度或距离。

如上文提到的,经常使用骨架跟踪(ST)技术来检测用户的动作或其它用户行为。本文描述的某些实施例依赖于深度图像来检测用户行为。可使用基于深度基本图像检测的这样的用户行为来替代或补充用于检测用户行为的ST技术。相应地,在以附加地详细讨论这样的实施例之前,将首先有用的是提供深度图像的附加细节。在一个实施例中,移动识别器360使用ST技术。在一个实施例中,深度识别器358使用深度图像来检测用户行为。

根据正跟踪什么用户行为,有时将有用的是能够确定和跟踪用户的质心位置。例如,这样的信息可用于跟踪执行某些运动(例如下蹲、弓步、俯卧撑、跳跃或分腿跳)的用户,从而可控制用户的化身,可对用户进行评分和/或可提供反馈给用户。下文讨论的某些实施例涉及用于基于深度图像确定质心位置的技术,并且因此,这样的位置将在下文被称为基于深度的质心位置。

在一个实施例中,当基于身体部位确定质心时使用等式1。根据实施例,当基于深度图像计算质心时,替代将身体部位插入等式1,使用像素。每个像素对应于三维空间中的位置,可使用标准自然用户界面(NUI)坐标变换来计算该位置。每个像素的“质量”或“重量”是与深度相关的。在实施例中,为了确定像素的质量,求像素的深度值的平方,如下文示出:

        (等式8)

其中“m”是像素的质量,而“d”是像素的深度值。净效应是增大更远像素的“权重”,并且减小较近像素的“权重”。这样的理由是因为摄像机(例如,226)经由视锥观看世界,更远的相同数量的像素比靠近的像素覆盖更多的真实世界“区域”,并且它们覆盖的区域与平方的距离成正比。换句话说,深度图像的像素具有取决于距离的不同有效表面区域。在本文描述的某些实施例中,以补偿该距离的方式计算基于深度的质心位置。在不具有对距离的该补偿的情况下,如果用户的手被保持在摄像机(例如,226)附近,则从摄像机的视角,用户的手可能具有比用户的身体的剩余部分一样大或更大的可见区域。这可导致不精确的质心位置。利用距离补偿,对应于用户的手的像素中的每一个与对应于用户的身体中更远离摄像机的部分的像素相比将被更小地加权,由此使得能够确定精确得多的基于深度的质心位置。

根据实施例,当确定基于深度的质心位置时,仍将使用上文在等式1中示出的常规质心等式,除了n是对应于用户的像素的数量(而不是身体部位的数量),并且质量mi是使用上文的等式8针对每个像素计算的(而不是确定每个身体部位的质量)。R是使用标准NUI坐标变换技术计算的(三维中的)像素的位置。Mmi的总和,即。

完全基于深度图像确定基于深度的质心位置的优点是,甚至当ST技术失败时也能确定基于深度的质心位置。另一优点是一旦在处理管线中可获得深度图像,就可确定基于深度的质心位置,由此减小延迟,因为不需要执行ST技术。

现在将使用图13A的高阶流程图来概括根据一个实施例的、用于确定基于深度的质心位置的方法。更具体地,图13A是描述用于确定对应于用户的多个像素的基于深度的质心位置的进程的一个实施例的流程图,其计及在由像素表示的用户的部分与用于获得深度图像的采集设备之间的距离。在步骤1302,接收深度图像,其中深度图像指定对应于用户的多个像素。可使用位于距用户(例如,118)一定距离的采集设备(例如,120)获得深度图像。更一般地,可通过本文描述的采集设备120中的任何传感器,或本领域已知的其他适当传感器来采集深度图像和彩色图像。在一个实施例中,与彩色图像分开采集深度图像。在一些实施方式中,同时采集深度图像和彩色图像,而在其他实施方式中,顺序地或在不同时间采集它们。在其它实施例中,与彩色图像一起采集深度图像,或将深度图像与彩色图像组合作为一个图像文件,从而每个像素具有R值、G值、B值和Z值(距离)。这样的深度图像和彩色图像可被传输到计算系统112。在一个实施例中,深度图像和彩色图像以每秒30帧来传输。在一些示例中,与彩色图像分开传输深度图像。在其它实施例中,可一起传输深度图像和彩色图像。因为本文描述的实施例主要(或仅)依赖于深度图像的使用,剩余的讨论主要聚焦于深度图像的使用,并且因此不讨论彩色图像。

在步骤1302接收的深度图像还可针对对应于用户的每个像素指定像素位置和像素深度。如上文提到的,可由x位置值(即水平值)和y位置值(即垂直值)来指示像素位置。可由z位置值(还称为深度值)来指示像素深度,该z位置值指示在用于获得深度图像的采集设备(例如,120)和由像素表示的用户的部分之间的距离。为了该描述的目的,假定在步骤1302接收的深度图像已经经受分割进程,其确定哪些像素对应于用户,并且哪些像素不对应于用户。替换地,如果在步骤1302接收的深度图像仍未经过分割进程,则可在步骤1302和1304之间发生分割进程。

在步骤1304,访问深度图像的像素。在步骤1306,存在访问的像素是否对应于将确定基于深度的质心所针对的用户的确定。如果在步骤1306的该确定的答案是“否”,则流程进行到步骤1312。如果在步骤1306的该确定的答案是“是”,则流程进行到步骤1308。在步骤1308,计算像素的质量。如上文参考等式9讨论的,可通过取像素的深度值的平方来计算像素的质量。用于确定像素的质量的替代技术也是可能的并且在实施例的范围内,例如查找表的使用,或计及在用于获得深度图像的采集设备(例如,120)和由像素表示的用户的部分之间的距离的替代等式的使用。在步骤1310,存储(例如在存储器中)计算的或以其它方式确定的像素的质量。

在步骤1312,存在是否有需要被考虑的深度图像的任何更多像素(即至少一个更多像素)的确定。如果在步骤1312的确定的答案是“否”,则流程进行到步骤1314。如果在步骤1312的确定的答案是“是”,则流程返回到步骤1304,并且访问深度图像的另一像素。

在考虑深度图像的所有像素之后,在步骤1314针对对应于用户的多个像素来确定基于深度的质心位置。更具体地,在步骤1314,存在基于对应于用户的每个像素确定的像素质量,来确定考虑了在由像素表示的用户的部分与用于获得深度图像的采集设备之间的距离的对应于用户的多个像素的基于深度的质心位置。上文描述了用于计算基于深度的质心位置的等式,并且因此需要被再次描述。在步骤1314,步骤1310的实例处存储的像素质量可被访问并且应用到前述等式。

根据某些实施例,除了确定基于深度的质心之外,还可基于深度图像确定基于深度的惯性张量。当确定基于深度的惯性张量时,将每个像素视为颗粒,并且相对于确定的基于深度的质心位置来构建基于深度的惯性张量。更具体地,在实施例中,使用以下等式计算基于深度的惯性张量:

        (等式9)

其中I是总体3×3的基于深度的惯性张量,n是对应于用户的像素的数量,mi是对应于用户的特定像素的质量(例如使用上文的等式9计算的),ri是从像素到基于深度的质心位置的三维矢量,E是3×3单位矩阵,“.”是点乘积算子,并且“”是外积算子。

根据某些实施例,然后在玩家的剪影的质量是标准质量(例如75kg)的假定下,缩放基于深度的惯性张量。在具体实施例中,通过将mi加在一起,并且将标准质量除以该总和,来计算缩放器,如在下文等式中示出的那样:

        (等式10)

其中Ms是标准质量(例如75kg)。然后通过该缩放器缩放基于深度的惯性张量,如在下文等式中示出的:

        (等式11)

缩放基于深度的惯性张量的原因是从而对应用(缩放的基于深度的惯性张量被报告给该应用)的更新不被用户的尺寸影响。换言之,缩放使得应用(例如,246)能够与应用如何解释相对瘦的用户的移动或其它行为类似地解释相对强壮的用户的移动或其它行为。缩放基于深度的惯性张量的另一原因是从而对应用(缩放的基于深度的惯性张量被报告给该应用)的更新不被用户被定位为相对于采集设备多么靠近影响。换言之,缩放使得应用(例如,246)能够与应用如何解释被定位为距采集设备相对远的用户的移动或其它行为类似地解释被定位为相对靠近采集设备的用户的移动或其它行为。缩放的基于深度的惯性张量还可被称为基于深度的惯性张量的缩放版本。

在多于一个用户被表示在深度图像中的情况下,可针对每个用户执行图13A(以及下文讨论的图13B)的方法的单独实例。例如,假定深度图像中的第一组像素对应于第一用户,并且同一深度图像中的第二组像素对应于第二用户。这可导致计及在由第一组像素表示的第一用户的部分与用于获得深度图像的采集设备之间的距离的对应于第一用户的多个像素的第一基于深度的质心位置。这还可导致计及在由第二组像素表示的第二用户的部分与用于获得深度图像的采集设备之间的距离的对应于第二用户的多个像素的第二基于深度的质心位置。附加地,这可导致对应于第一用户的多个像素的第一基于深度的惯性张量,和对应于第二用户的多个像素的第二基于深度的惯性张量。

可针对附加深度图像重复参考图13A描述的方法,由此导致针对多个深度图像中的每一个确定的基于深度的质心位置以及基于深度的惯性张量。在多于一个用户被表示在深度图像中的情况下,每次重复该方法,就可针对深度图像中表示的每个用户确定单独的基于深度的质心位置和基于深度的惯性张量。所确定的基于深度的质心位置和基于深度的惯性张量和/或其中的改变可用于跟踪用户行为和用户行为的改变。例如,所确定的基于深度的质心位置和/或基于深度的惯性张量可被报告给应用(例如,246),如在步骤1316和1320处指示的,并且可基于被报告给应用的基于深度的质心位置和/或基于深度的惯性张量来更新应用。如在步骤1319处指示的,可在将其报告给用户之前,缩放基于深度的惯性张量,如上文在等式11的讨论中描述的那样。

在实施例中,基于深度的惯性张量的主轴可被确定并用于标识当用户是伸展(例如站立,在俯卧撑位置中或在平板支撑位置中)时的用户的“长轴”。更具体地,可将基于深度的惯性张量分解为特征向量和特征值。可然后通过标识最短特征值的特征向量来标识用户的“长轴”。例如,当用户在站立时,与最小特征值相关联的特征向量将是直上的。对于另一示例,当用户在俯卧撑或平板支撑位置时,与最小特征值相关联的特征向量将沿着用户的身体线。

对于某些应用,基于深度的质心位置和/或基于深度的惯性张量可向应用提供更新应用的足够信息。对于其他应用,基于深度的质心位置和/或基于深度的惯性张量可向应用提供更新应用的非充足信息。例如,在应用尝试确定用户是否正恰当执行分腿跳类型的运动的情况下,对于应用可能不充足的是仅保持对基于深度的质心位置和/或基于深度的惯性张量的跟踪。

现在参考图13B,如在步骤1322和1324处指示的,根据某些实施例,为了从深度图像收集附加有用信息,将对应于用户的多个像素分为象限,并且针对每个象限确定单独的基于深度的象限质心位置。附加地,如在步骤1328处指示的,可针对每个象限确定单独的基于深度的象限惯性张量。所确定的基于深度的象限质心位置和基于深度的象限惯性张量和/或其中的改变可用于跟踪用户行为和用户行为的改变。更具体地,可向应用(例如,246)报告所确定的基于深度的象限质心位置和/或基于深度的象限惯性张量,如在步骤1326和1330处指示的,并且可基于被报告给应用的基于深度的象限质心位置和/或基于深度的象限惯性张量来更新应用。跟踪基于深度的象限质心位置和/或基于深度的象限惯性张量的改变使得能够跟踪具体身体部位的位置(以及因此动作)的改变和/或用户的质量分布的改变,如可从下文讨论的图14A和14B中认识到的。

在实施例中,当在步骤1324将对应于(深度图像的)用户的多个像素分为象限时,使用在步骤1314确定的基于深度的质心位置用作其中所有四个象限的角落彼此相接的点。以另一方式解释,在步骤1324,可使用在步骤1314确定的在基于深度的质心位置处交叉的两条线将对应于(深度图像的)用户的多个像素分为象限。在实施例中,一个这样的线可以是可以是直上和下并且与在步骤1314确定的基于深度的质心位置交叉的垂直线,并且另一线可以是与该垂直线垂直并且在基于深度的质心位置处与该垂直线交叉的水平线。然而,使用这样的任意绘制的线将对应于(深度图像的)用户的多个像素分为象限并未考虑用户的实际位置。根据替代实施例,另一技术是标识基于深度的惯性张量的主轴,并且选择主轴之一来用作在长度方向上划分对应于(深度图像的)用户的多个像素的线。垂直于主轴中所选择一个主轴(用作前述划分线)的与基于深度的质心位置(在步骤1314处确定的)相交的线可然后被用作在宽度方向上划分对应于(深度图像的)用户的多个像素的线。这些技术可从图14A和14B的以下讨论中进一步认识到。

参考图14A,其中示出的剪影表示对应于深度图像的用户的多个像素。剪影的中间的白色“x”表示针对对应于用户的多个像素确定的基于深度的质心位置。在白色“x”处与剪影交叉的水平和垂直白线图示可用于将对应于用户的多个像素分为象限的线。四个白色“﹢”表示针对相应象限确定的基于深度的象限质心位置。深度图像中表示的用户正在执行分腿跳类型的运动。如果仅针对多个接连深度图像跟踪基于深度的质心位置(由白色“x”表示),则基于深度的质心位置可随着时间上下移动。然而,仅基于上下移动的基于深度的质心位置,将难以确定用户是正在简单地上下跳跃(而不移动他们的手臂和腿,如在正确分腿跳中应当完成的那样),还是正在执行正确的分腿跳。可收集附加的有用信息,其中针对每个象限确定基于深度的象限质心位置,如可从图14A中认识到的。例如,预期的是,当用户执行正确的分腿跳时,每个基于深度的象限质心位置将沿着可预测路径来回移动。可通过确定每个象限的基于深度的象限惯性张量来收集甚至另外有用的信息。例如,可使用基于深度的象限惯性张量来确定用户是否正向着采集设备或远离采集设备移动特定四肢。这些仅是可通过分析基于深度的象限质心位置和/或基于深度的象限惯性张量解译的用户行为的类型的几个示例。阅读该说明书的本领域普通技术人员将认识到,还可基于基于深度的象限质心位置和/或基于深度的象限惯性张量标识无数其它行为。

图14B用于图示为何有利的是使用在步骤1318确定的基于深度的惯性张量的主轴之一作为在长度方向上划分对应于(深度图像的)用户的多个像素的线。参考图14B,其中示出的剪影表示对应于深度图像的用户的多个像素,其中用户在执行俯卧撑类型的运动。在图14B中,从头部延伸到剪影的脚的白线对应于基于基于深度的惯性张量确定的主轴之一。图14B中示出的其它白线(其与上述主轴垂直并且与基于深度的质心位置(在步骤1314确定的)相交)被用作在宽度方向上划分对应于(深度图像的)用户的多个像素的线。针对每个象限确定的示例性基于深度的象限质心位置被图示为白色“﹢”。在图14B中,由像素表示的用户在做俯卧撑,如上文提到的那样。从图14B可认识到,如果使用任意水平和垂直线来将对应于用户的多个线分为象限,则象限中的至少一个可能包括相对少量的像素,从该相对少量的像素将难以收集有用信息。

再参考图14B,将(对应于用户的)多个像素分为象限的两条线之一被用于将两个上象限与两个下象限分开。根据实施方式,并且根据用户的位置,(将两个上象限与两个下象限分开的)该线可以是主轴或垂直于主轴的线。

如上文提到的,深度图像和RGB图像可使用采集设备120获得并且以每秒30帧的速率或某一其它速率被传输到计算系统112。可与RGB图像分开传输深度图像,或两个图像可以一起传输。继续上述示例,可以针对每个深度图像帧来确定上述基于深度的质心位置以及上述基于深度的惯性张量,并且因此可以每秒确定三十个基于深度的质心位置以及三十个基于深度的惯性张量。附加地,对于每个深度图像帧,可确定基于深度的象限质心位置和基于深度的象限惯性张量。可通过上文参考图12讨论的运行时引擎244来执行这样的确定。甚至更具体地,可使用参考图12讨论的基于深度的质心模块254和基于深度的惯性张量模块256来执行这样的确定。

返回参考图2,运行时引擎244可包括其确定给应用246。这样的报告也在上文参考图13A和13B中的步骤1316、1320、1326和730讨论了。现在参考图5,在步骤1502,应用接收指示基于深度的质心位置、基于深度的惯性张量、基于深度的象限质心位置和/或基于深度的象限惯性张量的信息。如在步骤1504示出的,基于这样的信息更新应用。例如,如上文所述,可使用这样的信息跟踪执行某些运动(例如下蹲、弓步、俯卧撑、跳跃或分腿跳)的用户,从而可控制用户的化身,对用户评分和/或可提供反馈给用户。对于更具体的示例,在应用246是指令用户执行某些运动的游戏的情况下,应用246可确定用户是否以正确的形态执行运动,并且在他们没有以正确的形态执行运动时,可提供关于用户可如何改进他们的形态的反馈给用户。

还可能的是,运行时引擎244与姿势库240交互,以将基于深度图像跟踪的动作或其它行为与基于深度的姿势滤波器比较,以确定(由深度图像的像素表示的)用户是否执行了一个或多个姿势。那些姿势可以与应用246的各种控制相关联。因此,计算系统112可使用姿势库240来解释基于深度图像检测的移动并且基于移动来控制应用246。因此,可由运行时引擎244和应用246使用姿势库。

用于获得深度图像的摄像机(例如,226)可能相对于用户所站立或以其他方式支撑自己的地板倾斜。为了计及这样的摄像机倾斜,可从传感器(例如加速度计)或以某一其它方式获得重力矢量,并且在计算基于深度的质心位置、基于深度的惯性张量、基于深度的象限质心位置和/或基于深度的象限惯性张量时将其作为因素考虑。以上文描述的方式,在这样的像素被用于确定基于深度的质心位置、基于深度的惯性张量、基于深度的象限质心位置和/或基于深度的象限惯性张量之前,可以对与用户对应的像素执行对摄像机倾斜的这样的计及处理(还被称为倾斜校正)。在某些实施例中,通过计算旋转矩阵来执行倾斜校正,旋转矩阵将重力矢量旋转到单元y矢量,并且在像素被用于确定基于深度的质心位置、基于深度的惯性张量、基于深度的象限质心位置和/或基于深度的象限惯性张量之前向像素应用所计算的旋转矩阵。例如,如果x,y,z重力矩阵是(0.11,0.97,0.22),则计算的旋转矩阵将重力矩阵旋转为(0.0,1.0,0.0)。在替代实施例中,在没有倾斜校正的情况下计算基于深度的质心位置、基于深度的惯性张量、基于深度的象限质心位置和/或基于深度的象限惯性张量,并且然后在它们已被确定之后,应用所计算的旋转矩阵到基于深度的确定,以由此将结果去除倾斜。在再其它实施例中,替代使用旋转矩阵以执行倾斜校正,可使用四元数(quaternion)来执行倾斜校正。可使用熟知标准技术来执行旋转矩阵或四元数的计算,如阅读本说明书的本领域普通技术人员将认识到的。相应地,可认识到,被用于如上所述那样更新应用的任何基于深度的质心位置、基于深度的惯性张量、基于深度的象限质心位置和/或基于深度的象限惯性张量可已经被倾斜校正。

示例计算系统

图16图示了可以是可用于跟踪动作和/或动画操纵(或以其它方式更新)由应用显示的化身或其它屏幕上对象的图1A-2中示出的计算系统112的计算系统的示例实施例。例如上文关于图1A-2描述的计算系统112的计算系统可以是多媒体控制台,例如游戏控制台。如在图16中示出的,多媒体控制台1600具有中央处理单元(CPU)1601,其具有一级高速缓存102、二级高速缓存1604、和闪速ROM(只读存储器)1606。一级高速缓存1602和二级高速缓存1604暂时存储数据并且因此减小存储器访问周期的数量,由此改进处理速度和吞吐量。CPU1601可以被提供为具有多于一个核,并且因此具有附加的一级和二级高速缓存1602和1604。闪存ROM1606可存储在当多媒体控制台1600被上电时的启动进程的初始阶段期间被装载的可执行代码。

图形处理单元(GPU)1608和视频编码器/视频编解码器(编码器/解码器)1614形成用于高速和高分辨率图形处理的视频处理管线。从图形处理单元1608经由总线运载数据到视频编码器/视频编解码器1614。视频处理管线输出数据到A/V(音频/视频)端口1640用于传输到电视或其它显示器。存储器控制器1610连接到GPU1608以促进对各种类型的存储器1612(包括但不限于RAM(随机存取存储器)的处理器访问。

多媒体控制台1600包括优选被实施在模块1618上的I/O控制器1620、系统管理控制器1622、音频处理单元1623、网络接口1624、第一USB主机控制器1626、第二USB控制器1628和前面板I/O子组件1630。USB控制器1626和1628用作外围控制器1642(1)-1642(2)、无线适配器1648和外部存储器设备1646(例如闪速存储器、外部CD/DVDROM驱动器、可移动媒体等)的主机。网络接口1624和/或无线适配器1648提供对网络(例如互联网、家庭网络等)的访问,并且可以是多种多样的有线或无线适配器部件(包括以太网卡、调制解调器、蓝牙模块、有线调制解调器等)中的任一个。

系统存储器1643被提供来存储在启动进程期间装载的应用数据。媒体驱动器1644被提供并且可以包括DVD/CD驱动器、蓝光驱动器、硬盘驱动器或其它可移动媒体驱动器等。媒体驱动器1644可以在多媒体控制台1600内部或外部。可以经由媒体驱动器1644访问应用数据以由多媒体控制台1600执行、播放等。媒体驱动器1644经由总线(例如串行ATA总线或其它高速连接(例如,IEEE1394))连接到I/O控制器1620。

系统管理控制器1622提供与确保多媒体控制台1600的可用性相关的各种服务功能。音频处理单元1623和音频编解码器1632形成具有高保真和立体声处理的对应音频处理管线。在音频处理单元1623和音频编解码器1632之间经由通信链路运载音频数据。音频处理管线输出数据到A/V端口1640,用于由具有音频能力的外部音频播放器或设备重放。

前面板I/O子组件1630支持电源按钮1650和弹出按钮1652以及任何LED(发光二极管)或暴露在多媒体控制台1600的外表面上的其它指示器的功能。系统电源模块1636提供电力给多媒体控制台1600的部件。风扇1638冷却在多媒体控制台1600内的电路。

CPU1601、GPU1608、存储器控制器1610和多媒体控制台1600内的各种其他部件经由一个或多个总线互连,该总线包括串行和并行总线、存储器总线、外围总线和使用各种总线架构中的任一个的处理器或本地总线。通过示例的方式,这样的架构可包括外围部件互连(PCI)总线、PCI-Express总线等。

当多媒体控制台1600被上电时,可从系统存储器1643装载应用数据到存储器1612和/或高速缓存1602、1604中并且在CPU1601上执行。应用可呈现当导航到多媒体控制台1600上可用的不同媒体类型时提供一致的用户体验的图形用户界面。在操作中,可从媒体驱动器1644启动或播放媒体驱动器1644内包含的应用和/或其它媒体来提供附加功能给多媒体控制台1600。

通过简单地将该系统连接到电视或其它显示器,多媒体控制台1600可被操作为独立系统。在该独立模式中,多媒体控制台1600允许一个或多个用户与系统交互,观看电影或收听音乐。然而,利用通过网络接口1624或无线适配器1648变得可用的宽带连接的集成,多媒体控制台1600可进一步被操作为在较大网络社区中的参与者。

当多媒体控制台1600被上电时,设定量的硬件资源被保留以用于由多媒体控制台操作系统的系统使用。这些资源可包括存储器(例如16MB)、CPU和GPU周期(例如5%)、联网带宽(例如8Kbps)等的保留。因为在系统启动时间保留这些资源,从应用的角度,保留的资源不存在。

特别地,存储器保留优选足够大以包含启动内核、并发系统应用和驱动器。CPU保留优选是恒定的,使得如果保留的CPU使用未被系统应用使用,则空闲线程将消耗任何未使用的周期。

关于GPU保留,通过使用GPU中断来调度用于将弹出渲染为覆盖的代码,来显示由系统应用(例如弹出)生成的轻量消息。用于覆盖所要求的存储器的量取决于覆盖面积大小并且覆盖优选随着屏幕分辨率而缩放。在并发系统应用使用全部用户界面的情况下,优选的是使用独立于应用分辨率的分辨率。可使用缩放器来设置该分辨率,使得消除了对改变频率和引起TV重新同步的需要。

在多媒体控制台1600启动并且系统资源被保留之后,并发系统应用执行以提供系统功能。系统功能被封装在上文描述的保留的系统资源内执行的一组系统应用中。操作系统内核标识作为系统应用线程相比游戏应用线程的线程。系统应用优选被调度来以预定时间和间隔运行在CPU1601上,以便向应用提供一致的系统资源视图。调度是为了最小化在控制台上运行的游戏应用的高速缓存破坏。

当并发系统应用要求音频时,由于时间敏感性,与游戏应用异步地调度音频处理。多媒体控制台应用管理器(下文描述)当系统应用有效时控制游戏应用音频水平(例如静音、衰减)。

由游戏应用和系统应用共享输入设备(例如,控制器1642(1)和1642(2))。输入设备不是保留的资源,但是可在系统应用和游戏应用之间切换,使得每个将具有设备的焦点。应用管理器优选控制输入流的切换,而不具有游戏应用的知识,并且驱动器维持关于焦点切换的状态信息。摄像机226、228和采集设备120可经由USB控制器1626或其它接口定义用于控制台1600的附加的输入设备。

图17图示可以是用于跟踪动作和/或动画操纵(或以其它方式更新)由应用显示的化身或其它屏幕上对象的图1A-2中示出的计算系统112的计算系统1720的另一示例实施例。计算系统1720仅是适当计算系统的一个示例,并且不意图暗示关于当前公开的主题的用途或功能的范围的任何限制。计算系统1720也不应当被解释为具有对任何关于示例性计算系统1720中图示的部件中的任一个或组合的依赖性或要求。在一些实施例中,各种描绘的计算元件可包括被配置为实例化本公开的特别方面的电路。例如,在本公开中使用的术语电路可包括被配置为由固件或开关执行(多个)功能的专用硬件部件。在其他示例实施例中,术语电路可包括由体现可操作以执行(多个)功能的逻辑的软件指令来配置的通用处理单元、存储器等。在其中电路包括硬件和软件的组合的示例实施例中,实施者可编写体现逻辑的源代码,并且源代码可被编译为可由通用处理单元处理的机器可读代码。因为本领域技术人员能够认识到最新技术水平已经发展到其中在硬件、软件或硬件/软件的组合之间存在很小差别的程度,所以对用于实行具体功能的硬件相比软件的选择是留给实施者的设计选择。更具体地,本领域技术人员可认识到,可将软件进程变换为等同的硬件结构,并且可将硬件结构本身变换为等同软件进程。因此,硬件实施相比软件实施的选择是设计选择之一并且被留给实施者。

计算系统1720包括计算机1741,其通常包括各种计算机可读介质。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以例如是但不限于电子、磁、光学、电磁或半导体系统、装置或设备,或前述的任何适当组合。计算机可读存储介质的更多具体示例(非穷尽列表)将包括以下:便携计算机磁盘、硬盘、随机存储存储器(RAM)、只读存储器(ROM)、可擦写可编程只读存储器(EPROM或闪存)、具有中继器的适当的光纤、便携式紧致盘只读存储器(CD-ROM)、光学存储设备、磁存储设备或前述的任何适当组合。在该文档的上下文中,计算机可读存储介质可以是可包含或存储由指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用的程序的任何有形介质。

计算机可读信号介质可包括具有体现在其中的(例如在基带中或作为载波的部分)计算机可读程序代码的传播数据信号。这样的传播信号可以采用各种形式中的任一个,该各种形式包括但不限于,电磁、光学或其任何适当组合。计算机可读信号介质可以是非计算机可读存储介质并且可通信、传播或运输用于由指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用的程序的任何计算机可读介质。体现在计算机可读信号介质上的程序代码可以使用任何适当介质来传输,该任何适当介质包括但不限于无线、有线、光纤电缆、RF等或前述的任何适当组合。

计算机可读介质可以是可由计算机1741访问的任何可用介质,并且包括易失和非易失介质、可移动和不可移动介质。系统存储器1722包括以易失和/或非易失存储器的形式的计算机可读存储介质,例如只读存储器(ROM)1723和随机存取存储器(RAM)1760。通常在ROM1723中存储基本输入/输出系统1724(BIOS),其包含例如在启动期间帮助在计算机1741内的元件之间传输信息的基本例程。RAM1760通常包含由处理单元1759立即可访问和/或当前正在处理单元1759上操作的数据和/或程序模块。通过示例而非限制的方式,图17图示操作系统1725、应用程序1726、其他程序模块1727和程序数据1728。

计算机1741还可包括其他可移动/不可移动、易失/非易失计算机可读存储介质。仅通过示例的方式,图17图示从不可移动、非易失磁介质读取或写入其的硬盘驱动器1738、从可移动、非易失磁盘1754读取或写入其的磁盘驱动器1739、和从可移动、非易失光盘1753(例如CDROM或其它光学介质)读取或写入其的光盘驱动器1740。可在示例性操作环境中使用的其它可移动/不可移动、易失/非易失计算机存储介质包括但不限于磁带盒、闪速存储器卡、数字多功能盘、数字视频带、固态RAM、固态ROM等。硬盘驱动器1738通常通过不可移动存储器接口(例如接口1734)连接到系统总线1721,并且磁盘驱动器1739和光盘驱动器1740通常通过可移动存储器接口(例如接口1735)连接到系统总线1721。

上文讨论的并且在图17中图示的驱动器及其相关联计算机存储介质提供了计算机可读指令、数据结构、程序模块和用于计算机1741的其它数据的存储。在图17中,例如,硬盘驱动器1738被图示为存储操作系统1758、应用程序1757、其它程序模块1756和程序数据1755。注意,这些部件可以与操作系统1725、应用程序1726、其它程序模块1727和程序数据1728相同或不同。操作系统1758、应用程序1757、其它程序模块1756和程序数据1755在此被给予不同数字,以图示在最低限度,它们是不同副本。用户可经由输入设备键入命令和信息到计算机1741,输入设备例如是键盘1751和指向设备1752(常称为鼠标、轨迹球或触摸板)。其它输入设备(未示出)可包括麦克风、游戏杆、游戏板、卫星盘、扫描仪等。这些和其它输入设备经常通过耦合到系统总线的用户输入接口1736连接到处理单元1759,但是可通过其他接口和总线结构(例如并行端口、游戏端口或通用串行总线(USB))连接。摄像机226、228和采集设备120可定义经由用户输入接口1736连接的用于计算系统1720的附加输入设备。监视器1742或其它类型的显示设备还可经由接口(例如视频接口1732)连接到系统总线1721。除了监视器之外,计算机还可包括其它外围输出设备,例如扬声器1744和打印机1743,其可通过输出外围接口1733连接。采集设备120可经由输出外围接口1733、网络接口1737或其它接口连接到计算系统1720。

计算机1741可使用到一个或多个远程计算机(例如远程计算机1746)的逻辑连接而工作在联网环境中。远程计算机1746可以是个人计算机、服务器、路由器、网络PC、点设备或其它常见网络节点,并且通常包括上文相对于计算机1741描述的元件中的很多或所有,尽管在图17中图示了仅存储器存储设备1747。描绘的逻辑连接包括局域网(LAN)1745和广域网(WAN)1749,但还可包括其它网络。这样的联网环境在办公室、企业范围计算机网络、内联网和因特网中是常见的。

当在LAN联网环境中使用时,计算机1741通过网络接口1737连接到LAN1745。当在WAN联网环境中使用时,计算机1741通常包括调制解调器1750或用于通过WAN1749(例如互联网)建立通信的其它装置。调制解调器1750(其可以是内部或外部的)可以经由用户输入接口1736或其它适当机制连接到系统总线1721。在联网环境中,相对于计算机1741描绘的程序模块或其部分可以存储在远程存储器存储设备中。通过示例而非限制的方式,图17图示了如在存储器设备1747上驻留的应用程序1748。将认识到,示出的网络连接是示例性的并且可使用在计算机之间建立通信链路的其它手段。

图18图示了在图2中介绍的运行时引擎244的示例实施例。参考图18,运行时引擎244被示为包括深度图像分割模块1852、基于深度的曲线拟合模块1854、基于深度的身体角度模块1856、基于深度的身体曲率模块1858和基于深度的平均极端位置模块1860。在一实施例中,深度图像分割模块1852被配置为检测在深度图像内的一个或多个用户(例如人类目标),并且将分割值与每个像素相关联。这样的分割值用于指示哪些像素对应于用户。例如,1的分割值可被分配给对应于第一用户的所有像素,2的分割值可被分配给对应于第二用户的所有像素,并且任意预定值(例如255)可被分配给不对应于用户的像素。还可能的是,分割值可被分配给除了用户之外的在深度图像内标识的对象,例如但不限于网球拍、跳绳、球、地板等。在实施例中,作为由深度图像分割模块1852执行的分割进程的结果,深度图像中的每个像素将具有与该像素相关联的四个值,包括:x位置值(即水平值);y位置值(即垂直值);z位置值(即深度值);和分割值,其刚在上文解释。换言之,在分割之后,深度图像可指定多个像素对应于用户,其中这样的像素还可被称为用户的基于深度的剪影或深度图像剪影。附加地,深度图像可针对对应于用户的像素中的每一个,指定像素位置和像素深度。像素位置可以通过x位置值(即水平值)和y位置值(即垂直值)来指示。像素深度可通过z位置值(还称为深度值)来指示,其指示在用于获得深度图像的采集设备(例如120)与由像素表示的用户的部分之间的距离。

再参考图18,在实施例中,使用基于深度的曲线拟合模块1854来将曲线拟合到对应于用户的多个像素的一部分。基于深度的身体角度模块1856用于确定指示用户的身体的角度的信息,并且基于深度的身体曲率模块1858用于确定指示用户的身体的曲率的信息。涉及指示用于的身体的角度的信息和确定指示用户的身体的曲率的信息的附加细节在下文参考图19-22描述。基于深度的平均极端位置模块1860用于确定指示用户的身体的极端的信息,其附加细节参考图23A-29在下文描述。运行时引擎244还可包括本文未描述的附加模块。

根据正在跟踪什么用户行为,有时将有用的是能够确定指示用户的身体的角度的信息和/或指示用户的身体的曲率的信息。例如,这样的信息可用于分析当执行某些运动时用户的形态,从而可控制用户的化身,可给用户评分和/或可向用户提供反馈。如本文使用的术语运动可指代体操运动,例如俯卧撑,以及经常包含姿态的运动类型,例如瑜伽和普拉提,但是不限于此。例如,在某些运动中,如俯卧撑和各种平板支撑运动(例如常规平板支撑,还被称为肘平板、侧平板支撑、侧平板腿抬起和上下平板支撑),用户的身体或其部分(例如用户的背)被假设为直的。在其它运动中,例如像下犬式瑜伽运动、向上面对犬式瑜伽运动,用户的身体或其部分被假设以特别方式弯曲。骨架跟踪(ST)技术通常对于跟踪执行这样类型的运动的用户是不可靠的,尤其在运动包含用户躺或坐在地板上或靠近地板的运动的情况下。下文描述的某些实施例依赖于深度图像来确定指示用户的身体的角度的信息和/或指示用户的身体的曲率的信息。这样的实施例可以被用于替代或补充经常用于基于RGB图像检测用户行为的骨架跟踪(ST)技术。

现在将使用图19的高阶流程图来概括用于基于深度图像确定指示用户的身体的角度的信息和/或指示用户的身体的曲率的信息的方法。在步骤1902,接收深度图像,其中深度图像指定对应于用户的多个像素。可使用位于距用户(例如118)一定距离的采集设备(例如120)获得深度图像。更一般地,可通过本文描述的采集设备120中的任何传感器,或本领域已知的其他适当传感器来采集深度图像和彩色图像。在一个实施例中,与彩色图像分开采集深度图像。在一些实施方式中,同时采集深度图像和彩色图像,而在其他实施方式中,顺序地或在不同时间采集它们。在其它实施例中,与彩色图像一起采集深度图像,或将深度图像与彩色图像组合作为一个图像文件,从而每个像素具有R值、G值、B值和Z值(距离)。这样的深度图像和彩色图像可被传输到计算系统112。在一个实施例中,深度图像和彩色图像以每秒30帧来传输。在一些示例中,与彩色图像分开传输深度图像。在其它实施例中,可一起传输深度图像和彩色图像。因为本文描述的实施例主要(或仅)依赖于深度图像的使用,剩余的讨论主要聚焦于深度图像的使用,并且因此不讨论彩色图像。

在步骤1902接收的深度图像还可针对对应于用户的每个像素指定像素位置和像素深度。如上文提到的,在图18的讨论中,可通过x位置值(即水平值)和y位置值(即垂直值)来指示像素位置。可通过z位置值(还称为深度值)来指示像素深度,其指示在用于获得深度图像的采集设备(例如120)和由像素表示的用户的部分之间的距离。为了该描述的目的,假定在步骤1902接收的深度图像已经经受分割进程,其确定哪些像素对应于用户,并且哪些像素不对应于用户。替换地,如果在步骤1902接收的深度图像仍未经过分割进程,则可在步骤1902和1904之间发生分割进程。

在步骤1904,标识感兴趣的像素的子集,其中在下文讨论的步骤1906处曲线将被拟合到所标识的子集。如上文提到的,对应于用户的深度图像的多个像素还可被称为用户的深度图像剪影,或简单地深度图像剪影。相应地,在步骤1904,标识深度图像剪影的感兴趣部分,其中在步骤1906将把曲线拟合到所标识的部分。在一个实施例中,感兴趣像素(即深度图像剪影的感兴趣部分)是对应于用户的躯干的像素。在另一实施例中,感兴趣像素是对应于用户的腿、躯干和头的像素。在另一实施例中,感兴趣像素是对应于用户的多个像素中相对于平面(例如支撑用户的地板)对应于上外围部分的像素。在再另一实施例中,感兴趣像素是对应于用户的多个像素中相对于平面(例如支撑用户的地板)对应于下外围部分的像素。

在步骤1906,将曲线拟合到在步骤1904标识的像素子集,以由此产生拟合曲线。在某些实施例中,在步骤1906产生的拟合曲线包括多个直线段。在一个实施例中,拟合曲线精确地包括可例如使用三次多项式等式确定的三个直线段(以及因此两个端点和两个中点)。精确地包括三个直线段的拟合曲线的示例在图8A-8C中示出并且下文参考图8A-8C来讨论。还可能的是,拟合曲线具有少至两个直线段。替换地,拟合曲线可具有四个或更多直线段。在再另一实施例中,拟合曲线可以是平滑曲线,即不由直线段构成的曲线。无数熟知曲线拟合技术可用于执行步骤1906,并且因此不需要描述如何将曲线拟合到一组像素的附加细节。在步骤1908,标识拟合曲线的端点。

对于大部分剩余描述,将假定在步骤1904标识的感兴趣像素(即深度图像剪影的感兴趣部分)是对应于用户的多个像素中相对于平面(例如支撑用户的地板)对应于上外围部分的像素。该实施例的益处是基于所标识的像素的确定不被用户的宽松悬挂衣服影响。还将假定的是在步骤1906处产生的拟合曲线精确地包括三个直线段。这的益处将从步骤1914的下面讨论中认识到。

在继续图19中的流程图的描述之前,将简要参考图20A-20C。参考图20A,其中示出的暗剪影表示对应于执行四肢支撑瑜伽姿势(其还被称为ChaturangaDandasana姿态)的用户的(深度图像的)多个像素。还在图20A中示出的是被拟合到对应于用户的多个像素中相对于平面2012(例如支撑用户的地板)对应于上外围部分的像素的曲线2002。以另一方式解释,曲线2002被拟合到用户的深度图像剪影的顶部。拟合曲线2002包括三个直线段2004a、2004b、2004c,其可统称为直线段2004。拟合曲线的端点被标记为2006a和2006b,并且可统称为端点2006。拟合曲线的中点被标记为2008a和2008b,并且可统称为中点2008。在两个端点之间延伸的直线被标记为2010。

类似于图20A的图20B对应于在用户将他们自身再定位到另一瑜伽姿态后的时间点。更具体地,在图20B中,其中示出的暗剪影表示对应于执行向上面对犬式瑜伽姿态(还被称为UrdhvaMukhaSvanasana姿态)的用户的(深度图像的)多个像素。为了一致性,拟合曲线2002、直线段2004、端点2006、中点2008和端点2006之间的直线2010以与它们在图20A中相同的方式在图20B中标记。

在图20C中,其中示出的暗剪影表示对应于执行平板支撑位置瑜伽姿态或执行俯卧撑运动的用户的(深度图像的)多个像素。再次,拟合曲线2002、直线段2004、端点2006、中点2008和端点2006之间的直线2010以与它们在图20A和20B中相同的方式在图20C中标记。

再次参考图19的流程图,在步骤1910-714,确定指示用户的身体的角度的信息和指示用户的身体的曲率的信息。这样的信息被报告给应用,如在步骤1916指示的,这使得应用能够基于报告的信息来更新。下文提供步骤1910-1914的附加细节。当讨论这些步骤时,频繁参考图20A-20C,以提供讨论的步骤的示例。

在步骤1910,存在在拟合曲线的端点之间的直线相对于平面(例如支撑用户的地板)的角度的确定。在图20A中,角度2020是这样的角度的示例。更具体地,角度2020是在拟合曲线2002的端点2006之间的直线2010相对于平面2012的角度。角度2020的另外示例在图20B和20C中示出。指示用户的身体相对于平面(例如地板)的总体角度的角度2020可由应用使用以确定用户的可能位置或姿态,基于用户的位置或姿态更新被显示的化身,和/或提供关于用户是否在正确位置或姿态的反馈给用户,但是不限于此。对于更具体的示例,这样的信息可提供有用的信息给应用,其中用户已被指令保持姿态,在该姿态中,他们的背和腿被假设为尽可能直或被假设为具有特别曲率。

图20A中的角2020类似于图20B中的角2020,即使由像素表示的用户在完全不同姿态中。这发生是因为用户的头和脚处于相对类似位置中,即使用户的身体的躯干的位置和曲率已显著改变。这提供了关于为什么获得指示用户的身体的曲率的信息(如在下文讨论的步骤1912和1914处完成的)也将有用的一些见解。

在步骤1912,存在拟合曲线的端点之间的直线相对于拟合曲线的直线段之一的角度的确定。在图20A中,角度2030是这样的角度的示例。更具体地,角度2030是在拟合曲线2002的端点2006之间的直线2010相对于(拟合曲线2002的)直线段2004a的角度。在图20B和20C中示出角度2030的另外示例。图20A中的角度2030是正角。作为对比,图20B中的角度2030是负角。因此,可理解的是应用可如何使用角度2030来在用户的不同姿态之间区分。更一般地,可从上文讨论理解,角度2030如何指示用户的身体的曲率。在上文示例中,角度2030是在(拟合曲线2002的端点2006之间)的直线2010和(拟合曲线2002)的直线段2004a之间的角度。替换地,或附加地,可确定在(拟合曲线2002的端点2006之间)的直线2010和(拟合曲线2002)的另一直线段2004(例如直线段2004c)之间的角度。

在步骤1914,存在对应于拟合曲线的曲率比率的确定。根据实施例,曲率比率是在拟合曲线的端点之间延伸的第一直线的长度和从第一直线正交地延伸到拟合曲线中与第一直线最远(即最远偏离)的点的第二线的长度的比率。例如,参考图20A,曲率比率是在拟合曲线2002的端点2006之间延伸的直线2010的长度和从直线2010正交地延伸到拟合曲线2002中与直线2010最远的点的线2040的长度的比率。实施其中拟合曲线(例如2002)精确地包括三个直线段的实施例的益处是第二线的长度非常容易和快速确定,如将参考图21的附加地详细描述的那样。

现在将使用图21的高阶流程图来描述用于确定曲率比率的方法,其中拟合曲线的直线段精确地包括直线段。参考图21,在步骤2102,存在从(在拟合曲线的端点之间延伸的)直线正交地延伸到拟合曲线的第一中点的线的长度的确定。在步骤2104,存在从(在拟合曲线的端点之间延伸的)直线正交地延伸到拟合曲线的第二中点的线的长度的确定。暂时返回参考图20A,步骤2102可通过确定从直线2019正交地延伸到拟合曲线2002的中点2008a的线2041的长度来执行。类似地,步骤2104可通过确定从直线2019正交地延伸到拟合曲线2002的其他中点2008b的线2040的长度来执行。返回到图21的流程图,在步骤2106,存在在步骤2102和2104确定的长度中的哪个更长的确定。如在步骤2108指示的,当在步骤1914确定对应于拟合曲线的曲率比率时,选择长度中的较长者来用作从(在拟合曲线的端点之间延伸的)直线正交地延伸到拟合曲线中与(在拟合曲线的端点之间延伸的)直线最远(即最远偏离)的点的线的长度。例如,返回参考图20A,使用参考图21描述的方法的结果,可然后通过确定直线2040的长度与在拟合曲线2002的端点2006a和2006b之间延伸的直线2010的长度的比率来确定曲率比率。

返回参考图18,运行时引擎244可将其确定报告给应用246。上文还参考图19中的步骤1916讨论了这样的报告。更具体地,如在图19中示出的,可将在步骤1910确定的指示角度的信息、在步骤1912确定的角度和/或在步骤1914确定的曲率比率报告给应用。

现在参考图22,在步骤2202,应用接收在步骤1910确定的指示角度的信息、在步骤1912确定的角度和/或在步骤1914确定的曲率比率。如在步骤2204示出的,基于这样的信息更新应用。例如,如上文提到的,可使用这样的信息跟踪执行某些运动和/或姿态的用户,从而可控制用户的化身,可给用户评分和/或可给用户提供反馈。对于更具体的示例,在应用246是指令用户执行某些运动和/或姿态的游戏时,应用246可确定用户是否以正确形态执行运动或姿态,并且在他们没有以正确形态执行运动或姿态时,可提供关于用户可如何改进他们的形态的反馈给用户。

在多于一个用户被表示在深度图像中时,可针对每个用户执行图19的方法的单独实例。例如,假定深度图像中的第一组像素对应于第一用户,并且同一深度图像中的第二组像素对应于第二用户。这可导致指示对应于第一用户的角度和/或曲率的第一信息和指示对应于第二用户的角度和/或曲率的第二信息。

可针对附加深度图像重复上文参考图19描述的方法,由此导致针对多个深度图像中的每个确定的指示用户的身体的角度和/或曲率的信息。这使得能够跟踪用户的身体的角度和/或曲率的改变。在多于一个用户被表示在深度图像中时,每次重复该方法,就可针对深度图像中表示的每个用户确定指示用户的身体的角度和/或曲率的单独的信息。

完全基于深度图像确定指示用户的身体的角度和/或曲率的信息的优点是甚至当ST技术失败时也能确定指示用户的身体的角度和/或曲率的信息。另一优点是一旦在处理管线中深度图像可获得时就可确定指示用户的身体的角度和/或曲率的信息,由此减小延迟,因为ST技术不需要被执行。然而,如果期望的话,也可使用ST技术确定指示用户的身体的角度和/或曲率的信息。

根据正在跟踪什么用户行为,有时将有用的是能够确定指示用户的身体的极端的信息。ST技术经常对于检测用户的身体的极端是不可靠的,尤其当用户正躺或坐在地板上或靠近地板时(例如当用户正坐,而他们的脚向着采集设备向前延伸时)。下文描述的某些实施例依赖于深度图像来确定指示用户的身体的极端的信息。这样的实施例可被用于替代或补充经常用于基于RGB图像检测用户行为的骨架跟踪(ST)技术。

参考图23A,其中示出的暗轮廓表示对应于在标准平板支撑位置上处于变化但是在相反方向延伸一个臂和一条腿的用户的(深度图像的)多个像素。还在图23A中示出的是分别对应于对应于用户的(深度图像的)最左、最右、最顶和最底像素的点2302、2312、2322和2332。尽管将可能的是基于点2302、2312、2322和/或2332跟踪在多个深度图像中用户的一个或多个极端,这样的点被显示为从帧到帧显著改变,引起所述点是相对带噪声的数据点。例如,这样的噪声可由于用户的手、脚、头和/或类似物的轻微移动引起。下文描述的某些实施例可用于通过跟踪极端团块的平均位置来克服该噪声问题,其中术语团块在本文中用于指代深度图像的对应于用户并且在被标识为对应于用户的极端的指定距离内的一组像素。

现在将使用图24的高阶流程图来描述用于确定极端团块的平均位置的方法。参考图24,在步骤2402,接收深度图像,其中深度图像指定了多个像素对应于用户。因为步骤2402实质与上文参考图19描述的步骤1902相同,可从步骤1902的上文讨论理解步骤1902的附加细节。在步骤2404,标识对应于用户的极端的深度图像的像素。根据考虑哪个极端,步骤2404可包含标识对应于用户的最左、最右、最顶或最底像素的深度图像的像素。这样的像素的示例在上文参考图23描述了。如在下文更详细描述的,步骤2404可替换地包含标识深度图像的对应于深度图像的对应于用户的最前像素的像素。在步骤2406,标识对应于用户的并且在于步骤2404被标识为对应于用户的极端的像素的指定距离内(例如在指定方向的5个像素内)的深度图像的像素。在步骤2408,通过确定在步骤2406被标识为对应于用户并且在对应于用户的极端的像素的指定距离内的像素的平均位置,来确定平均极端位置,其还可被称为极端团块的平均位置。在步骤2410,确定是否存在任何附加感兴趣极端,针对该感兴趣极端将要确定平均极端位置(即极端团块的平均位置)。具体感兴趣极端可取决于将要使用(多个)平均极端位置的应用。例如,其中仅左和右极端是感兴趣的,可针对感兴趣的这两个极端中的每一个执行步骤2404-2408。如在步骤2412指示的,将一个或多个平均极端位置(例如左和右极端团块的平均位置)报告给应用,由此使得能够基于这样的位置信息更新应用。

根据一实施例,现在将使用图25与图23A-23F一起来提供图24的步骤2404-2408的附加细节。对于该讨论,将假定感兴趣的初始极端是左极端。根据实施例,参考图25,步骤2502-2508提供关于如何在步骤2404标识对应于用户的最左点的(深度图像的)像素的附加细节。在步骤2502,初始化各个值,其包含设定X=1,设定Xsum=0,并且设定Ysum=0。在步骤2504,通过检查深度图像中具有x值=X的所有像素来确定是否那些像素中的至少一个对应于用户,来搜索用户的最左极端点。这样的确定可基于对应于像素的分割值。简要参考图23B,这可包含检查深度图像的沿着虚线2340的所有像素,以确定是否那些像素中的至少一个对应于用户。返回图25,在步骤2506,确定在步骤2504检查的像素中的至少一个是否对应于用户。如果步骤2506的答案是“否”,则X在步骤2508增加,并且因此X现在等于2。然后重复步骤2504和2506以确定深度图像中具有x值=2的所有像素是否对应于用户。换言之,返回参考图23B,将移动虚线2340向右一个像素,并且检查深度图像中沿着被移动的线2340的所有像素以确定那些像素中的至少一个是否对应于用户。重复步骤2504-2508以直到标识对应于用户的像素为止,其中所标识的像素将对应于用户的最左极端,其是图23A中示出的点2302a。参考图23C,其中的虚线2340显示标识了用户的最左极端所在的点。

图25中的步骤2510提供在步骤2406标识深度图像的对应于用户并且在被标识为对应于用户的最左极端的像素的指定距离内(例如在x方向的5个像素内)的像素的实施例的附加细节。附加地,图25中的步骤2512-2520将用于提供关于在步骤2408标识平均左极端位置的实施例的附加细节。在步骤2510,指定团块边界,其包含设定第一团块边界(BB1)=X,并且设定第二团块边界(BB2)=X+V,其中V是指定整数。对于以下示例,将假定,V=5,然而V可以替换地比5更小或更大。深度图像中对应于用户并且在BB1和BB2之间的像素(包括BB1和BB2)是深度图像中对应于用户并且在被标识为对应于用户的极端的像素的指定距离内的深度图像的像素的示例。在图23D中,被标记为BB1和BB2的两条虚垂直线是第一和第二团块边界的示例。在图23E中被虚线2306包围的像素是深度图像的被标识为对应于用户并且在对应于用户的最左极端的像素2302的指定距离内(例如在x方向的5个像素内)的像素。被虚线2306包围的这样的像素还可称为左极端团块,或更一般地,称为侧团块。

在步骤2512,更新Xsum,从而Xsum=Xsum+X。在步骤2514,通过将深度图像中对应于用户并且具有x值=X的像素的所有y值加到Ysum来更新Ysum。在步骤2516,确定X是否大于第二团块边界BB2。只要步骤2516的答案是“否”,则重复步骤2512和2514,每次更新Xsum和Ysum的值。在步骤2518,将平均X团块值(AXBV)确定为等于Xsum除以被相加的x值的总数量。在步骤2520,将平均Y团块值(AYBV)确定为等于Ysum除以被相加的y值的总数量。在该实施例中,AXBV和AYBV共同提供左极端的平均x、y位置,其还可被称为左极端团块的平均位置。图23F中被标记为2308的“X”是侧团块的被标识的平均位置的示例。

可执行类似于上文参考图25描述的那些步骤的步骤来确定右极端团块的平均位置。然而,对于该确定,X将在步骤2502被设定为其最大值,在步骤2508,X将被减小1,在步骤2510指定的第二团块边界(BB2)将等于X-V,并且在步骤2516,将确定是否X<BB2。

可执行类似于上文参考图25描述的那些步骤的步骤来确定顶或上极端团块的平均位置。然而,对于该确定,Y将在步骤2502被设定为0;在步骤2508,Y将被增加;在步骤2510,BB1将被指定为等于Y,并且BB2将被指定为等于Y+V;在步骤2512,将通过将深度图像中对应于用户并且具有y值=Y的像素的所有x值加到Xsum来更新Xsum;并且在步骤2514,将通过将Y加到Ysum来更新Ysum。

可执行类似于上文参考图25描述的那些步骤的步骤来确定底极端团块的平均位置。然而,对于该确定,Y将在步骤2502被设定为其最大值;在步骤2508,Y将被减小1;在步骤2510,BB1将被指定为等于Y,并且BB2将被指定为等于Y-V;在步骤2512,将通过将深度图像中对应于用户并且具有y值=Y的像素的所有x值加到Xsum来更新Xsum;并且在步骤2514,将通过将Y加到Ysum来更新Ysum。术语左和右是相对术语,其取决于位置是从在深度图像中表示的用户的视角来观看,还是从用于采集深度图像的采集设备的视角来观看。相应地,术语侧可更一般地用于指代左或右极端或团块。

参考图26,其中示出的暗剪影表示对应于处于站立位置中而他们的一只脚处于另一只前面的位置的用户的(深度图像的)多个像素。图26中示出的四个“X”指示可使用本文描述的实施例标识的团块的各个平均位置。更具体地,被标记为2508的“X”对应于第一侧团块的平均位置,其还可被称为平均侧极端位置。被标记为2518的“X”对应于第二侧团块的平均位置,其还可被称为平均侧极端位置。被标记为2528的“X”对应于顶团块的平均位置,其还可被称为平均顶或上极端位置。被标记为2538的“X”对应于底团块的平均位置,其还可被称为平均底或下极端位置。

根据某些实施例,对应于用户的(深度图像的)像素可被分为象限,并且以上文讨论的类似方式,可针对每个象限确定一个或多个极端团块的平均位置。可从图27认识到这样的实施例,其中水平和垂直白线将对应于用户的像素分为象限,并且“X”对应于各个极端团块的平均位置。

如可在图28中看到的,本文描述的实施例还可用于确定前团块的平均位置,其在图28中通过“X”指示。在该图28中,前团块对应于弯曲而以他们的头为他们的身体靠近采集设备的部分的用户的一部分。当标识前团块的平均位置时,替代当例如执行参考图25描述的步骤时的x或y值,使用深度图像的像素的z值。换言之,针对z极端搜索由z和x轴或z和y轴定义的平面,与搜索由x和y轴定义的平面相对。

用于获得深度图像的摄像机(例如226)可能相对于用户所站立或以其他方式支撑自己的地板倾斜。根据具体实施例,在确定极端团块的平均位置之前计及(还称为校正)摄像机倾斜。当确定前团块的平均位置时对摄像机倾斜的这样的校正是最有利的,因为这样的位置依赖于深度图像的像素的z值。为了计及这样的摄像机倾斜,可从传感器(例如加速度计),或以某一其它方式来获得重力矢量,并且将重力矢量作为因素考虑。例如,在对应于用户的像素被用于标识前团块的平均位置之前,可对这样的像素执行对摄像机倾斜的这样的计及处理(还被称为倾斜校正)。在某些实施例中,通过选择搜索轴(其还被称为归一化搜索方向),并且将所有像素投影到搜索轴来执行倾斜校正。这可经由利用归一化搜索方向标明每个像素的位置来完成。这得到沿着搜索方向的距离,通过找到具有最大z值的像素,该距离可用于搜索对应于最前极端的像素。最大z值和最大z值-V可用于标识团块边界BB1和BB2,并且因此标识区域,在该区域内将像素值相加以确定平均值。

在多于一个用户被表示在深度图像内的情况下,可针对每个用户执行图24的方法的单独实例。例如,假定深度图像中的第一组像素对应于第一用户,并且同一深度图像中的第二组像素对应于第二用户。这将导致针对每个用户标识的极端团块的平均位置。

可针对附加深度图重复上文参考图24描述的方法,由此导致针对多个深度图像中的每一个确定的极端团块的平均位置。这使得能够跟踪平均极端位置的改变。在多于一个的用户被表示在深度图像内的情况下,每次重复该方法,就可针对每个用户标识极端团块的平均位置。

返回参考图18,运行时引擎244可将其确定报告给应用246。上文还参考图24中的步骤2412讨论了这样的报告。更具体地,如在图24中示出的,可将指示所标识的(多个)平均极端位置的信息报告给应用。

现在参考图29,在步骤2902,应用接收指示所标识的(多个)平均极端位置的信息。如在步骤2904示出的,基于这样的信息更新应用。例如,如上文提到的,可使用这样的信息跟踪执行某些运动和/或姿态的用户,从而可控制用户的化身,可给用户评分和/或可给用户提供反馈。对于更具体的示例,在应用246是指令用户执行某些运动和/或姿态的游戏时,应用246可确定用户是否以正确形态执行了运动或姿态,并且在他们没有以正确形态执行运动或姿态时,可提供关于用户可如何改进他们的形态的反馈给用户。

完全基于深度图像标识极端团块的平均位置的优点是甚至当ST技术失败时也能确定指示用户的身体的极端的信息。另一优点是一旦在处理管线中深度图像可获得时就可确定指示用户的身体的极端的信息,由此减小延迟,因为ST技术不需要被执行。然而,如果期望的话,也可使用ST技术确定指示用户的身体的极端的信息。

尽管以特定于结构特征和/或方法行为的语言描述了主题,应理解的是在所附权利要求中定义的主题不一定限于上文描述的具体特征或行为。相反,上文描述的具体特征或行为被公开作为实施权利要求的示例形式。所意图的是,技术的范围由本文所附权利要求限定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号