首页> 中国专利> 动作捕捉方法、电子设备以及计算机存储介质

动作捕捉方法、电子设备以及计算机存储介质

摘要

本公开实施例涉及一种动作捕捉方法、电子设备以及计算机存储介质。该方法包括:获取待捕捉对象的身体模型第一部分的长度;所述第一部分是位于颈部与腿部之间部分;根据设置在头部、臀部以及所述第一部分的至少一段身体上的若干个动作传感器,采集运动信息;根据所述运动信息,通过插值处理确定所述第一部分的各段身体以及颈部的姿态。在头部、臀部以及第一部分的至少一段身体上设置若干个动作传感器,然后通过插值处理,能够准确地确定第一部分各段身体以及颈部的姿态,提高了动作捕捉的精确度。

著录项

  • 公开/公告号CN109470263A

    专利类型发明专利

  • 公开/公告日2019-03-15

    原文格式PDF

  • 申请/专利权人 北京诺亦腾科技有限公司;

    申请/专利号CN201811158156.7

  • 发明设计人 刘维甫;刘昊扬;戴若犁;李龙威;

    申请日2018-09-30

  • 分类号

  • 代理机构北京华夏泰和知识产权代理有限公司;

  • 代理人孟德栋

  • 地址 100102 北京市西城区新街口外大街28号A座502号

  • 入库时间 2024-02-19 07:24:19

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-03-20

    授权

    授权

  • 2019-04-09

    实质审查的生效 IPC(主分类):G01C23/00 申请日:20180930

    实质审查的生效

  • 2019-03-15

    公开

    公开

说明书

技术领域

本公开的实施例涉及计算机技术领域,尤其涉及一种动作捕捉方法、电子设备以及计算机存储介质。

背景技术

动作捕捉是对运动物体做出的动作进行捕捉的技术。随着动作捕捉技术的发展,动作捕捉技术的应用范围越来越广,对捕捉精准度的要求也随之提高。目前出现的基于人体模型(例如:Hanavan人体模型,由15个刚体组成)的动作捕捉技术,捕捉精准度较低,有待进一步提升。

发明内容

本公开至少一个实施例的主要目的在于提供一种动作捕捉方法、电子设备以及计算机存储介质。

第一方面,本公开的实施例提供了一种动作捕捉方法,包括:

获取待捕捉对象的身体模型的第一部分的长度;所述第一部分是位于颈部与腿部之间部分;

根据所述身体模型以及第一部分的长度确定所述第一部分对应的臀部和多段身体;

根据设置在头部、臀部以及所述第一部分的至少一段身体上的若干个动作传感器,采集运动信息;

根据所述运动信息,通过插值处理,确定所述第一部分的各段身体以及颈部的姿态。

在一些实施例中,

所述第一部分包括臀部和4段身体;

所述根据所述身体模型以及第一部分的长度确定所述第一部分对应的臀部和多段身体,包括:

按照如下比例以及所述第一部分的长度L,分别计算所述第一部分的各段身体的长度:

与颈部相连的第一段身体的长度N1为第一比例与L的乘积,所述第一比例为0.180~0.190;

与第一段身体相连的第二段身体的长度N2为第二比例与L的乘积,所述第二比例为0.170~0.180;

与第二段身体相连的第三段身体的长度N3为第三比例与L的乘积,所述第三比例为0.175~0.185;

与第三段身体相连的第四段身体的长度N4为第四比例与L的乘积,所述第四比例为0.170~0.180;

与第四段身体相连的臀部的长度N5为第五比例与L的乘积,所述第五比例为0.280~0.290。

在一些实施例中,

根据设置在头部、臀部以及所述第一部分的至少一段身体上的若干个动作传感器,采集运动信息,包括:

根据设置在头部的动作传感器,采集头部的运动信息,以确定头部的姿态;

根据设置在所述第二段身体上的动作传感器,采集所述第二段身体的运动信息;

根据设置在臀部的动作传感器,采集臀部的运动信息,以确定臀部的姿态;

根据所述运动信息,确定所述第一部分的各段身体及颈部的姿态,包括:

根据所述第二段身体的运动信息,确定所述第二段身体的姿态;

对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到颈部的姿态和所述第一段身体的姿态;

对臀部的姿态和所述第二段身体的姿态进行插值处理,分别得到所述第三段身体的姿态和所述第四段身体的姿态。

在一些实施例中,

对头部的姿态和所述第二段身体的姿态进行插值处理,得到颈部的姿态,包括:

确定颈部与所述第二段身体在垂直方向的夹角theta;

在所述夹角theta小于40度时,按照公式Neck=0.6*head+0.4*spine2得到颈部的姿态;

在所述夹角theta大于或等于40度且小于或等于70度时,按照公式

得到颈部的姿态;

在所述夹角theta夹角大于70度时,按照公式Neck=0.1*head+0.9spine2得到颈部的姿态;

对头部的姿态和所述第二段身体的姿态进行插值处理,得到所述第一段身体的姿态,包括:

按照公式spine3=0.95*spine2+0.05*head,得到所述第一段身体的姿态;

其中,Neck表示颈部的姿态,head表示头部的姿态,spine2表示所述第二段身体的姿态,spine3表示所述第一段身体的姿态。

在一些实施例中,

对臀部的姿态和所述第二段身体的姿态进行插值处理,得到所述第三段身体的姿态,包括:

按照公式spine1=0.25*hips+0.75*spine2,得到所述第三段身体的姿态;

对臀部的姿态和所述第二段身体的姿态进行插值处理,得到所述第四段身体的姿态,包括:

按照公式spine=0.6*hips+0.4*spine2,得到所述第四段身体的姿态;

其中,hips表示臀部的姿态,spine1表示所述第三段身体的姿态,spine表示所述第四段身体的姿态。

在一些实施例中,

所述第一部分包括臀部和3段身体;

所述根据所述身体模型以及第一部分的长度确定所述第一部分对应的臀部和多段身体,包括:

与颈部相连的第二段身体的长度N2为第一比例与L的乘积,所述第一比例为0.30~0.35;

与第二段身体相连的第三段身体的长度N3为第二比例与L的乘积,所述第二比例为0.20~0.25;

与第二段身体相连的第四段身体的长度N4为第三比例与L的乘积,所述第三比例为0.30~0.33;

与第三段身体相连的臀部的长度N5为第四比例与L的乘积,所述第四比例为0.12~0.16。

在一些实施例中,

根据设置在头部、臀部以及所述第一部分的至少一段身体上的若干个动作传感器,采集运动信息,包括:

根据设置在头部的动作传感器,采集头部的运动信息,以确定头部的姿态;

根据设置在所述第二段身体上的动作传感器,采集所述第二段身体的运动信息;

根据设置在臀部的动作传感器,采集臀部的运动信息,以确定臀部的姿态;

根据所述运动信息,确定所述第一部分的各段身体及颈部的姿态,包括:

根据所述第二段身体的运动信息,确定所述第二段身体的姿态;

对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到第一段颈部和第二段颈部的姿态,两段颈部的比例为1:1;

对臀部的姿态和所述第二段身体的姿态进行插值处理,分别得到所述第三段身体的姿态和所述第四段身体的姿态。

在一些实施例中,

对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到第一段颈部和第二段颈部的姿态,包括:

计算头部的姿态和第二段身体的姿态的四元数;

将所述四元数分解为三个欧拉角的基础值,所述三个欧拉角包括:屈伸角度、侧屈角度和转体角度;

在每个欧拉角的基础值上对两段颈部进行角度插值,得到每段颈部的角度修正值;

根据三个欧拉角的基础值以及每段颈部的角度修正值,转换得到每段颈部的四元数;

根据每段颈部的对应四元数得到两段颈部的姿态。

在一些实施例中,

对臀部的姿态和所述第二段身体的姿态进行插值处理,得到所述第三段身体的姿态,包括:

计算臀部的姿态和第二段身体的姿态的四元数;

将所述四元数分解为三个欧拉角的基础值,所述三个欧拉角包括:屈伸角度、侧屈角度和转体角度;

在每个欧拉角的基础值上对两段颈部进行角度插值,得到每段颈部在每个欧拉角上的角度修正值;

根据三个欧拉角的基础值以及每段颈部的角度修正值,转换得到每段颈部的四元数;

根据每段颈部的对应四元数得到两段颈部的姿态。

第二方面,本公开的实施例提供了一种动作捕捉装置,包括:

获取模块,用于获取待捕捉对象的身体模型的第一部分的长度;所述第一部分是位于颈部与臀部之间部分第一部分是位于颈部与腿部之间部分;

身体确定模块,用于根据所述身体模型以及第一部分的长度确定所述第一部分对应的臀部和多段身体;

采集模块,用于根据设置在头部、臀部以及所述第一部分的至少一段身体上的若干个动作传感器,采集运动信息;

姿态确定模块,用于根据所述第一部分的长度以及所述运动信息,通过插值处理,确定所述第一部分的各段身体及颈部的姿态。

在一些实施例中,

所述第一部分包括臀部和4段身体;

所述身体确定模块用于:

按照如下比例以及所述第一部分的长度L,分别计算所述第一部分的各段身体及臀部的长度,其中:

与颈部相连的第一段身体的长度N1为第一比例与L的乘积,所述第一比例为0.180~0.190;

与第一段身体相连的第二段身体的长度N2为第二比例与L的乘积,所述第二比例为0.170~0.180;

与第二段身体相连的第三段身体的长度N3为第三比例与L的乘积,所述第三比例为0.175~0.185;

与第三段身体相连的第四段身体的长度N4为第四比例与L的乘积,所述第四比例为0.170~0.180;

与第四段身体相连的臀部的长度N5为第五比例与L的乘积,所述第五比例为0.280~0.290。

在一些实施例中,

所述采集模块包括:

第一采集子模块,用于根据设置在头部的动作传感器,采集头部的运动信息,以确定头部的姿态;

第二采集子模块,用于根据设置在所述第二段身体上的动作传感器,采集所述第二段身体的运动信息;

第三采集子模块,用于根据设置在臀部的动作传感器,采集臀部的运动信息,以确定臀部的姿态;

所述姿态确定模块包括:

确定子模块,用于根据头部的运动信息,确定头部的姿态;以及,根据臀部的运动信息,确定臀部的姿态;以及,根据所述第二段身体的运动信息,确定所述第二段身体的姿态;

第一处理子模块,用于对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到颈部的姿态和所述第一段身体的姿态;

第二处理子模块,用于对臀部的姿态和所述第二段身体的姿态进行插值处理,分别得到所述第三段身体的姿态和所述第四段身体的姿态。

在一些实施例中,

所述第一处理子模块用于:

确定颈部与所述第二段身体在垂直方向的夹角theta;

在所述夹角theta小于40度时,按照公式Neck=0.6*head+0.4*spine2得到颈部的姿态;

在所述夹角theta大于或等于40度且小于或等于70度时,按照公式

得到颈部的姿态;

在所述夹角theta夹角大于70度时,按照公式Neck=0.1*head+0.9spine2得到颈部的姿态;

按照公式spine3=0.95*spine2+0.05*head,得到所述第一段身体的姿态;

其中,Neck表示颈部的姿态,head表示头部的姿态,spine2表示所述第二段身体的姿态,spine3表示所述第一段身体的姿态,h表示头部的插值系数,s2表示第二段身体的插值系数。

在一些实施例中,

所述第二处理子模块用于:

按照公式spine1=0.25*hips+0.75*spine2,得到所述第三段身体的姿态;

按照公式spine=0.6*hips+0.4*spine2,得到所述第四段身体的姿态;

其中,hips表示臀部的姿态,spine1表示所述第三段身体的姿态,spine表示所述第四段身体的姿态。

在一些实施例中,

所述第一部分包括臀部和3段身体;

所述身体确定模块用于:

按照如下比例以及所述第一部分的长度L,分别计算所述第一部分的各段身体及臀部的长度,其中:与颈部相连的第二段身体的长度N2为第一比例与L的乘积,所述第一比例为0.30~0.35;

与第二段身体相连的第三段身体的长度N3为第二比例与L的乘积,所述第二比例为0.20~0.25;

与第二段身体相连的第四段身体的长度N4为第三比例与L的乘积,所述第三比例为0.30~0.33;

与第三段身体相连的臀部的长度N5为第四比例与L的乘积,所述第四比例为0.12~0.16。

在一些实施例中,

所述采集模块用于:

根据设置在头部的动作传感器,采集头部的运动信息,以确定头部的姿态;

根据设置在所述第二段身体上的动作传感器,采集所述第二段身体的运动信息;

根据设置在臀部的动作传感器,采集臀部的运动信息,以确定臀部的姿态;

所述姿态确定模块,包括:

确定子模块,用于根据头部的运动信息,确定头部的姿态;以及,根据臀部的运动信息,确定臀部的姿态;以及,根据所述第二段身体的运动信息,确定所述第二段身体的姿态;

第一处理子模块,用于对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到第一段颈部和第二段颈部的姿态,两段颈部的比例为1:1;

第二处理子模块,用于对臀部的姿态和所述第二段身体的姿态进行插值处理,分别得到所述第三段身体的姿态和所述第四段身体的姿态。

在一些实施例中,

所述第一处理子模块用于:

计算头部的姿态和第二段身体的姿态的四元数;

将所述四元数分解为三个欧拉角的基础值,所述三个欧拉角包括:屈伸角度、侧屈角度和转体角度;

在每个欧拉角的基础值上对两段颈部进行角度插值,得到每段颈部在每个欧拉角上的姿态;

根据三个欧拉角上每段颈部的姿态,转换得到每段颈部的四元数;

根据每段颈部的对应四元数得到两段颈部的姿态。

在一些实施例中,

所述第二处理子模块用于:

计算臀部的姿态和第二段身体的姿态的四元数;

将所述四元数分解为三个欧拉角的基础值,所述三个欧拉角包括:屈伸角度、侧屈角度和转体角度;

在每个欧拉角的基础值上对第三段身体进行角度插值,得到第三段身体在每个欧拉角上的姿态;

根据三个欧拉角上第三段身体的姿态,转换得到第三段身体的四元数;

根据第三段身体对应四元数得到第三段身体的姿态。

第三方面,本公开的实施例提供了一种计算机存储介质,所述计算机存储介质中存储有可被计算机设备执行的指令代码;所述指令代码在被计算机设备执行时,执行第一方面任一项所述的方法。

第四方面,本公开的实施例提供了一种电子设备,所述电子设备包括至少一个处理器和一个存储器,所述存储器耦接至所述处理器;所述处理器用于执行所述存储器中存储的计算机指令;所述存储器在执行所述计算机指令时,执行第一方面任一项所述的方法。

本公开至少一个实施例中,获取待捕捉对象的身体模型的第一部分的长度;所述第一部分是位于颈部与腿部之间部分;根据所述身体模型以及第一部分的长度确定所述第一部分对应的臀部和多段身体;根据设置在头部、臀部以及所述第一部分的至少一段身体上的若干个动作传感器,采集运动信息;根据所述运动信息,通过插值处理,确定所述第一部分的各段身体以及颈部的姿态。在头部、臀部以及第一部分的至少一段身体上设置若干个动作传感器,然后通过插值处理,能够准确地确定第一部分各段身体以及颈部的姿态,提高了动作捕捉的精确度。

附图说明

图1示出了本公开一实施例提供的动作捕捉方法所应用的一种人体模型的示意图;

图2示出了本公开一实施例提供的动作捕捉方法的主要流程;

图3示出了本公开另一实施例提供的动作捕捉方法所应用的一种人体模型的示意图;

图4示出了本公开一实施例提供的动作捕捉装置的主要结构。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本公开,并不用于限定本公开。

实施例一:

图1示出了本公开一实施例提供的动作捕捉方法所应用的一种人体模型的示意图。包括21个刚体,分别设置在头部、颈部、身体3、身体2、身体1、身体0、臀部、左大腿、左小腿、左脚、右大腿、右小腿、右脚、左肩、左大臂、左前臂、左手、右肩、右大臂、右前臂和右手。

图1中每个实心小圆点即为一个刚体,一个刚体即为一个动作传感器,每个动作传感器均用于采集运动信息。

如图1所示,臀部为人体根节点,臀部的位置是动作捕捉中最重要的一个位置。本公开实施例中,该模型的根节点位置位于臀部骨骼中,其垂直方向的位置为距离臀部骨骼下端比例0.1,上端比例0.9的部位。

参见图2,展示了本公开一个实施例所提供的动作捕捉方法的主要流程,包括:

步骤S11,获取待捕捉对象的身体模型的第一部分的长度;所述第一部分是位于颈部与腿部之间部分。

在具体实施时,这里的待捕捉对象可以是人体。第一部分可以是人体的颈部以下,以及腿部以上的部分,第一部分包括:臀部和多段身体。以图1为例,第一部分包括:身体3、身体2、身体1、身体0以及臀部。图1中21个部位有16个部位的长度可以直接测量得到,包括:头部、颈部、左大腿、左小腿、左脚、右大腿、右小腿、右脚、左肩、左大臂、左前臂、左手、右肩、右大臂、右前臂、右手。。

步骤S12,根据所述身体模型以及第一部分的长度确定所述第一部分对应的臀部和多段身体。

第一部分的长度L即为身长,身长为身体3、身体2、身体1、身体0以及臀部这5个部位的总长。身体3、身体2、身体1、身体0以及臀部各自的长度不能直接测量得到。

在一些实施例中,臀部以及第一部分的各段身体的长度按照如下方式得到:

所述按照预设比例以及所述第一部分的长度L,分别计算所述第一部分的各段身体及臀部的长度。

以图1为例,第一部分包括臀部和4段身体,4段身体分别为:身体3、身体2、身体1、身体0。首先测量身长,即第一部分的总长,然后按照预设比例分配身长,得到第一部分中臀部以及4段身体各自的长度,然后才能针对确定长度的各段身体计算后续的姿态。

在一些实施例中,所述第一部分包括5段身体;

所述按照预设比例以及所述第一部分的长度,分别计算所述臀部以及第一部分的各段身体的长度,包括:

按照如下比例以及所述第一部分的长度L,分别计算所述臀部以及第一部分的各段身体的长度:

与颈部相连的第一段身体的长度N1为第一比例与L的乘积,所述第一比例为0.180~0.190;

与第一段身体相连的第二段身体的长度N2为第二比例与L的乘积,所述第二比例为0.170~0.180;

与第二段身体相连的第三段身体的长度N3为第三比例与L的乘积,所述第三比例为0.175~0.185;

与第三段身体相连的第四段身体的长度N4为第四比例与L的乘积,所述第四比例为0.170~0.180;

与第四段身体相连的臀部的长度N5为第五比例与L的乘积,所述第五比例为0.280~0.290。

本公开实施例中,与颈部相连的第一段身体(即身体3)的长度N1占身长的第一比例为0.180~0.190,以第一比例是0.186019为例,身体3的长度符合公式:N1=0.186019*L。

与第一段身体相连的第二段身体(即身体2)的长度N2占身长的第二比例为0.170~0.180,以第二比例是0.174038为例,身体2的长度符合公式:N2=0.174038*L。

与第二段身体相连的第三段身体(即身体1)的长度N3占身长的第三比例为0.175~0.185,以第三比例是0.181227为例,身体1的长度符合公式:N3=0.181227*L。

与第三段身体相连的第四段身体(即身体0)的长度N4占身长的第四比例为0.170~0.180,以第四比例是0.174039为例,身体0的长度符合公式:N4=0.174039*L。

与第四段身体相连的臀部的长度N5占身长的第五比例为0.280~0.290,以第五比例是0.284679为例,臀部的长度符合公式:N5=0.284679*L。

步骤S13:根据设置在头部、臀部以及所述第一部分的至少一段身体上的若干个动作传感器,采集运动信息。

本公开实施例中,在头部以及第一部分的至少一段身体上设置若干个动作传感器,以采集头部以及第一部分的至少一段身体的运动信息。

在一些实施例中,步骤S12包括以下步骤:

根据设置在头部的动作传感器,采集头部的运动信息,以确定头部的姿态;

根据设置在所述第二段身体上的动作传感器,采集所述第二段身体的运动信息;

根据设置在臀部的动作传感器,采集臀部的运动信息,以确定臀部的姿态。

本公开实施例中,通过设置在头部的运动传感器,获得头部的运动信息,进而根据头部的运动信息,确定头部的姿态。同理,通过设置在身体2的运动传感器,获得身体2的运动信息,进而根据身体2的运动信息,确定身体2的姿态。通过设置在臀部的运动传感器,获得臀部的运动信息,进而根据臀部的运动信息,确定臀部的姿态。

步骤S14,根据所述运动信息,通过插值处理确定所述第一部分的各段身体及颈部的姿态。

在一些实施例中,步骤S14包括以下步骤:

根据头部的运动信息,确定头部的姿态;以及,根据臀部的运动信息,确定臀部的姿态;头部以及臀部的姿态,可以根据运动信息直接获取得到,这属于本领域技术人员所知悉的,在此不再赘述。

根据所述第二段身体的运动信息,确定所述第二段身体的姿态;

对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到颈部的姿态和所述第一段身体的姿态;

对臀部的姿态和所述第二段身体的姿态进行插值处理,分别得到所述第三段身体的姿态和所述第四段身体的姿态。

本公开实施例中,通过对头部和身体2的姿态进行插值处理,得到颈部的姿态,其中,插值采用四元数的Slerp插值。确定颈部的姿态的过程如下:

首先,确定颈部与身体2在垂直方向的夹角theta。

然后,将夹角theta与第一预设角度值和第二预设角度值分别比较,根据夹角theta与第一预设角度值和第二预设角度值的大小关系,确定头部和身体2各自的插值系数,其中,第一预设角度值小于第二预设角度值。

在夹角theta小于第一预设角度值时,头部的插值系数大于身体2的插值系数,此时,头部的姿态对颈部的姿态的影响较大;在夹角theta大于第二预设角度值时,身体2的插值系数大于头部的插值系数,此时,身体2的姿态对颈部的姿态的影响较大。

以第一预设角度值是40度且第二预设角度值是70度为例,颈部的姿态是按以下公式确定的,以下公式中,Neck表示颈部的姿态,head表示头部的姿态,spine2表示身体2的姿态:

当夹角theta小于40度时,Neck=0.6*head+0.4*spine2。

当夹角theta在40度到70度之间时,Neck=h*head+s2*spine2,其中,h=((theta-40)*0.6+(70-theta)*0.1)/30,s2=((theta-40)*0.4+(70-theta)*0.9)/30。其中,h表示头部的插值系数,s2表示第二段身体的插值系数。

当夹角大于70度时,Neck=0.1*head+0.9spine2。

本公开实施例中,通过对头部和身体2的姿态进行插值处理,还可以得到身体3的姿态,其中,插值采用四元数的Slerp插值。示例地,身体3的姿态是按以下公式确定的,以下公式中,spine3表示身体3的姿态,head表示头部的姿态,spine2表示身体2的姿态:

Spine3=0.95*spine2+0.05*head

本公开实施例中,通过对臀部和身体2的姿态进行插值处理,得到身体1的姿态,其中,插值采用四元数的Slerp插值。示例地,身体1的姿态是按以下公式确定的,以下公式中,spine2表示身体1的姿态,hips表示臀部的姿态,spine2表示身体2的姿态:

spine2=0.25*hips+0.75*spine2

本公开实施例中,通过对臀部和身体2的姿态进行插值处理,还可以得到身体0的姿态,其中,插值采用四元数的Slerp插值。示例地,身体0的姿态是按以下公式确定的,以下公式中,spine表示身体0的姿态,hips表示臀部的姿态,spine2表示身体2的姿态:

spine=0.6*hips+0.4*spine2

实施例二:

在本申请一些实施例中,为了更好地描绘颈部的动作,便于制作动画,尤其是在一些舞蹈中颈部的动作,例如:新疆舞。提供了另一种人体模型示意图,如图3所示,为本公开一实施例提供的动作捕捉方法所应用的一种人体模型的示意图。包括21个刚体,分别设置在头部、颈部2、颈部1、身体2、身体1、身体0、臀部、左大腿、左小腿、左脚、右大腿、右小腿、右脚、左肩、左大臂、左前臂、左手、右肩、右大臂、右前臂和右手。

图3中每个实心小圆点即为一个刚体,一个刚体即为一个动作传感器,每个动作传感器均用于采集运动信息。

参见图3所示,该方法还可以包括以下步骤:

S11,获取待捕捉对象的身体模型的第一部分的长度;所述第一部分是位于颈部与腿部之间部分。

在具体实施时,这里的待捕捉对象可以是人体。第一部分可以是人体的颈部以下腿部以上的部分。以图3为例,第一部分包括:身体2、身体1、身体0以及臀部。图3中21个部位有15个部位的长度可以直接测量得到,包括:头部、左大腿、左小腿、左脚、右大腿、右小腿、右脚、左肩、左大臂、左前臂、左手、右肩、右大臂、右前臂和右手。

S12,根据所述身体模型以及第一部分的长度确定所述第一部分对应的臀部和多段身体。

第一部分的长度L即为身长,身长为身体2、身体1、身体0以及臀部这4个部位的总长。身体2、身体1、身体0以及臀部各自的长度不能直接测量得到。

另外,颈部的长度也是可以直接测量得到,在本申请实施例中,颈部分为两部分,分别为:第二段颈部(图中颈部2)和第一段颈部(图中颈部1),其中,颈部2与头部相连,颈部1与身体2相连,并且颈部1的长度比例可以在0.9:1至1:0.9之间,在其它实施例中,颈部2和颈部1的长度比例为1:1。

在一些实施例中,臀部以及第一部分的各段身体的长度按照如下方式得到:

按照预设比例以及所述第一部分的长度,分别计算所述臀部以及第一部分的各段身体的长度。以图3为例,第一部分包括:身体2、身体1、身体0以及臀部。首先测量身长,即4个部位的总长,然后按照预设比例分配身长,得到4个部位各自的长度。

以图3为例,第一部分包括:身体2、身体1、身体0以及臀部。首先测量身长,即4个部位的总长,然后按照预设比例分配身长,得到臀部以及3段身体各自的长度。

所述按照预设比例以及所述第一部分的长度,分别计算所述臀部以及第一部分的各段身体的长度,包括:

按照如下比例以及所述第一部分的长度L,分别计算所述臀部以及第一部分的各段身体的长度:

与颈部相连的第二段身体的长度N2为第一比例与L的乘积,所述第一比例为0.30~0.35;

与第二段身体相连的第三段身体的长度N3为第二比例与L的乘积,所述第二比例为0.20~0.25;

与第二段身体相连的第四段身体的长度N4为第三比例与L的乘积,所述第三比例为0.30~0.33;

与第三段身体相连的臀部的长度N5为第四比例与L的乘积,所述第四比例为0.12~0.16。

本公开实施例中,与颈部相连的第二段身体(即身体2)的长度N2占身长的第二比例为0.30~0.35,以第二比例是0.3为例,身体2的长度符合公式:N2=0.33*L。

与第二段身体相连的第三段身体(即身体1)的长度N3占身长的第三比例为0.20~0.25,以第三比例是0.22为例,身体1的长度符合公式:N3=0.22*L。

与第三段身体相连的第四段身体(即身体0)的长度N4占身长的第四比例为0.30~0.33,以第四比例是0.31为例,身体0的长度符合公式:N4=0.31*L。

与第四段身体相连的臀部的长度N5占身长的第五比例为0.12~0.16,以第五比例是0.14为例,臀部的长度符合公式:N5=0.14*L。

在本申请实施例中,采用上述比例,减小了臀部的高度比例,这样有利于动画中出现过大的摆胯动作。

步骤S13:根据设置在头部、臀部以及所述第一部分的至少一段身体上的若干个动作传感器,采集运动信息。

根据设置在头部的动作传感器,采集头部的运动信息,以确定头部的姿态;

根据设置在所述第二段身体上的动作传感器,采集所述第二段身体的运动信息;

根据设置在臀部的动作传感器,采集臀部的运动信息,以确定臀部的姿态。

本公开实施例中,通过设置在头部的运动传感器,获得头部的运动信息,进而根据头部的运动信息,确定头部的姿态。同理,通过设置在身体2的运动传感器,获得身体2的运动信息,进而根据身体2的运动信息,确定身体2的姿态。通过设置在臀部的运动传感器,获得臀部的运动信息,进而根据臀部的运动信息,确定臀部的姿态。

步骤S14,根据所述运动信息,通过插值处理确定所述第一部分的各段身体及颈部的姿态。

在一些实施例中,步骤S14包括以下步骤:

根据头部的运动信息,确定头部的姿态;以及,根据臀部的运动信息,确定臀部的姿态;

根据所述第二段身体的运动信息,确定所述第二段身体的姿态;

对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到第一段颈部和第二段颈部的姿态,两段颈部的比例为1:1;

对臀部的姿态和所述第二段身体的姿态进行插值处理,分别得到所述第三段身体的姿态和所述第四段身体的姿态。

在一些实施例中,对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到第一段颈部和第二段颈部的姿态,包括:

计算头部的姿态和第二段身体的姿态的四元数;

将所述四元数分解为三个欧拉角的基础值,所述三个欧拉角包括:屈伸角度、侧屈角度和转体角度;

在每个欧拉角的基础值上对两段颈部进行角度插值,得到每段颈部在每个欧拉角上的姿态;

根据三个欧拉角上每段颈部的姿态,转换得到每段颈部的四元数;

根据每段颈部的对应四元数得到两段颈部的姿态。

在本申请实施例中,在计算颈部姿态时,插值可以采用四元数Slerp插值,颈部的姿态按照以下公式确定,并且以下公式中,neck1表示颈部1的姿态,neck2表示颈部2的姿态,head表示头部的姿态,spine2表示身体2的姿态。

本申请实施例中,三个欧拉角也即以人体模型所在的坐标系中三个轴上角度,其中三个轴分别为:x轴(即人体模型的屈伸方向),y轴(即人体模型的侧屈方向)以及z轴(即人体模型的转体方向)。在每个轴上,spine2的姿态也即spine2的弯曲角度,相应地,neck1的姿态,也即neck1的弯曲角度,neck2的姿态,也即neck2的弯曲角度。

在本申请实施例中,在屈伸方向上:

neck1=spine2+(head-spine2)*k1

neck2=spine2+(head-spine2)*(k1+k2);

其中,k1的范围为0.40~0.45,k2的范围为0.35~0.40。在一个实施例中,k1可以为0.4227,k2可以为0.3853。

在本申请实施例中,在侧屈方向上:

neck1=spine2+(head-spine2)*m1

neck2=spine2+(head-spine2)*(m1+m2);

其中,m1的范围为0.30~0.35,m2的范围为0.30~0.35。在一个实施例中,m1可以为0.3333,m2可以为0.3919。

在本申请实施例中,在转体方向上:

if(head-spine2)<45°;

neck1=spine2

neck2=spine2

也即,当头部和身体2的角度差在45度以内时,弯曲的角度全部由头部承担,颈部2和颈部1的角度均与第二端身体的角度相同。

if(head-spine2)>=45°;

neck1=spine2+(head-spine2-45°)*n1

neck2=spine2+(head-spine2-45°)*(n1+n2)。

其中,n1的范围为0.45~0.5,n2的范围为0.35~0.40。在一个实施例中,n1可以为0.4643,n2可以为0.3855。

也即,当头部和身体2的角度差在45度以外时,先将头部和身体2的角度差减去45度得到差值,然后在根据该差值以及n1、n2,分别计算颈部1和颈部2的姿态。

在一些实施例中,对臀部的姿态和所述第二段身体的姿态进行插值处理,得到所述第三段身体的姿态,包括:

计算臀部的姿态和第二段身体的姿态的四元数;

将所述四元数分解为三个欧拉角的基础值,所述三个欧拉角包括:屈伸角度、侧屈角度和转体角度;

在每个欧拉角的基础值上对第三段身体进行角度插值,得到第三段身体在每个欧拉角上的姿态;

根据三个欧拉角上第三段身体的姿态,转换得到第三段身体的四元数;

根据第三段身体对应四元数得到第三段身体的姿态。

在本申请实施例中,在计算第三段身体姿态时,插值可以采用四元数Slerp插值,第三段身体的姿态按照以下公式确定,并且在以下公式中,spine2表示身体1的姿态,hips表示臀部的姿态,spine1表示身体1的姿态,spine0表示身体0的姿态。

参见前面关于欧拉角的描述,可知,在每个欧拉角上,spine2的姿态也即spine2的弯曲角度,相应地,hips的姿态,也即hips的弯曲角度,spine1的姿态,也即spine1的弯曲角度;spine0的姿态,也即spine0的弯曲角度。

在本申请一个实施例中,在屈伸方向上;

spine0=hips+(spine2-hip)*k1

spine1=hips+(spine2-hip)*(k1+k2)

其中,k1的范围为0.35~0.40,k2的范围为0.35~0.40。在一个实施例中,k1可以为0.3714,k2可以为0.3643。

在本申请一个实施例中,在侧屈方向上:

spine0=hips+(spine2-hip)*m1

spine1=hips+(spine2-hip)*(m1+m2)

其中,m1的范围为0.18~0.22,m2的范围为0.30~0.35。在一个实施例中,m1可以为0.2069,m2可以为0.3448。

在本申请一个实施例中,在转体方向上:

spine0=hips+(spine2-hip)*n1

spine1=hips+(spine2-hip)*(n1+n2)

其中,n1的范围为0.13~0.18,n2的范围为0.13~0.18。在一个实施例中,n1可以为0.15,n2可以为0.15。

实施例三

本公开的实施例提供了一种动作捕捉装置,包括:

获取模块,用于获取待捕捉对象的第一部分的长度;所述第一部分是位于颈部与腿部之间部分;

身体确定模块,用于根据所述身体模型以及第一部分的长度确定所述第一部分对应的臀部和多段身体;

采集模块,用于根据设置在头部、臀部以及所述第一部分的至少一段身体上的若干个动作传感器,采集运动信息;

姿态确定模块,用于根据所述第一部分的长度以及所述运动信息,通过插值处理,确定所述第一部分的各段身体及颈部的姿态。

在一些实施例中,

所述第一部分包括臀部和4段身体;

所述身体确定模块用于:

按照如下比例以及所述第一部分的长度L,分别计算所述第一部分的各段身体及臀部的长度,其中:

与颈部相连的第一段身体的长度N1为第一比例与L的乘积,所述第一比例为0.180~0.190;

与第一段身体相连的第二段身体的长度N2为第二比例与L的乘积,所述第二比例为0.170~0.180;

与第二段身体相连的第三段身体的长度N3为第三比例与L的乘积,所述第三比例为0.175~0.185;

与第三段身体相连的第四段身体的长度N4为第四比例与L的乘积,所述第四比例为0.170~0.180;

与第四段身体相连的臀部的长度N5为第五比例与L的乘积,所述第五比例为0.280~0.290。

在一些实施例中,

所述采集模块包括:

第一采集子模块,用于根据设置在头部的动作传感器,采集头部的运动信息,以确定头部的姿态;

第二采集子模块,用于根据设置在所述第二段身体上的动作传感器,采集所述第二段身体的运动信息;

第三采集子模块,用于根据设置在臀部的动作传感器,采集臀部的运动信息,以确定臀部的姿态;

所述姿态确定模块包括:

确定子模块,用于根据头部的运动信息,确定头部的姿态;以及,根据臀部的运动信息,确定臀部的姿态;以及,根据所述第二段身体的运动信息,确定所述第二段身体的姿态;

第一处理子模块,用于对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到颈部的姿态和所述第一段身体的姿态;

第二处理子模块,用于对臀部的姿态和所述第二段身体的姿态进行插值处理,分别得到所述第三段身体的姿态和所述第四段身体的姿态。

在一些实施例中,

所述第一处理子模块用于:

确定颈部与所述第二段身体在垂直方向的夹角theta;

在所述夹角theta小于40度时,按照公式Neck=0.6*head+0.4*spine2得到颈部的姿态;

在所述夹角theta大于或等于40度且小于或等于70度时,按照公式

得到颈部的姿态;

在所述夹角theta夹角大于70度时,按照公式Neck=0.1*head+0.9spine2得到颈部的姿态;

按照公式spine3=0.95*spine2+0.05*head,得到所述第一段身体的姿态;

其中,Neck表示颈部的姿态,head表示头部的姿态,spine2表示所述第二段身体的姿态,spine3表示所述第一段身体的姿态,h表示头部的插值系数,s2表示第二段身体的插值系数。

在一些实施例中,

所述第二处理子模块用于:

按照公式spine1=0.25*hips+0.75*spine2,得到所述第三段身体的姿态;

按照公式spine=0.6*hips+0.4*spine2,得到所述第四段身体的姿态;

其中,hips表示臀部的姿态,spine1表示所述第三段身体的姿态,spine表示所述第四段身体的姿态。

在一些实施例中,

所述第一部分包括臀部和3段身体;

所述身体确定模块用于:

按照如下比例以及所述第一部分的长度L,分别计算所述第一部分的各段身体及臀部的长度,其中:

与颈部相连的第二段身体的长度N2为第一比例与L的乘积,所述第一比例为0.30~0.35;

与第二段身体相连的第三段身体的长度N3为第二比例与L的乘积,所述第二比例为0.20~0.25;

与第二段身体相连的第四段身体的长度N4为第三比例与L的乘积,所述第三比例为0.30~0.33;

与第三段身体相连的臀部的长度N5为第四比例与L的乘积,所述第四比例为0.12~0.16。

在一些实施例中,

所述采集模块用于:

根据设置在头部的动作传感器,采集头部的运动信息,以确定头部的姿态;

根据设置在所述第二段身体上的动作传感器,采集所述第二段身体的运动信息;

根据设置在臀部的动作传感器,采集臀部的运动信息,以确定臀部的姿态;

所述姿态确定模块,包括:

确定子模块,用于根据头部的运动信息,确定头部的姿态;以及,根据臀部的运动信息,确定臀部的姿态;以及,根据所述第二段身体的运动信息,确定所述第二段身体的姿态;

第一处理子模块,用于对头部的姿态和所述第二段身体的姿态进行插值处理,分别得到第一段颈部和第二段颈部的姿态,两段颈部的比例为1:1;

第二处理子模块,用于对臀部的姿态和所述第二段身体的姿态进行插值处理,分别得到所述第三段身体的姿态和所述第四段身体的姿态。

在一些实施例中,

所述第一处理子模块用于:

计算头部的姿态和第二段身体的姿态的四元数;

将所述四元数分解为三个欧拉角的基础值,所述三个欧拉角包括:屈伸角度、侧屈角度和转体角度;

在每个欧拉角的基础值上对两段颈部进行角度插值,得到每段颈部在每个欧拉角上的姿态;

根据三个欧拉角上每段颈部的姿态,转换得到每段颈部的四元数;

根据每段颈部的对应四元数得到两段颈部的姿态。

在一些实施例中,

所述第二处理子模块用于:

计算臀部的姿态和第二段身体的姿态的四元数;

将所述四元数分解为三个欧拉角的基础值,所述三个欧拉角包括:屈伸角度、侧屈角度和转体角度;

在每个欧拉角的基础值上对第三段身体进行角度插值,得到第三段身体在每个欧拉角上的姿态;

根据三个欧拉角上第三段身体的姿态,转换得到第三段身体的四元数;

根据第三段身体对应四元数得到第三段身体的姿态。

实施例四:

本公开的实施例提供了一种电子设备,如图4所示,该电子设备10的主要结构,包括处理器111、存储器112、网络设备113、I/O端口114,还可以包括一台显示器115以及电源116。存储器112、通信模组113、I/O端口114以及显示器115均耦合到处理器111上,与处理器111进行通信。处理器111用于执行存储器112中所存储的计算机指令。

这里的处理器111可以是指一个处理器,也可以是多个处理器,可以是仅包含中央处理器CPU,也可以是还包含图形处理器GPU。处理器111的具体形式本公开的实施例不做相应的限定。

根据存储器112中所存储的计算机指令,处理器111可以用于执行上述实施例所提供的动作捕捉方法。

实施例五:

本公开的实施例提供了一种计算机存储介质,所述计算机存储介质中存储有可被计算机设备执行的指令代码;所述指令代码在被计算机设备执行时,执行上述任一实施例所述动作捕捉的方法。

可以理解的是,本公开实施例二和实施例三的实施例所提供的计算机存储介质以及电子设备主要用以或者配置为执行实施例一或实施例二的实施例所提供的动作捕捉方法。本公开实施例二和实施例三的实施例中的术语以及相应的实施方式可以参照实施例一或实施例二的实施例,在此不再赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本公开实施例序号仅仅为了描述,不代表实施例的优劣。

以上仅为本公开的优选实施例,并非因此限制本公开的专利范围,凡是利用本公开说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本公开的专利保护范围内。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号