基于深度学习的人体骨骼关节点三维坐标的获取方法与流程

文档序号:15980006发布日期:2018-11-17 00:12阅读:1050来源:国知局

本发明属于人工智能领域,尤其涉及一种基于深度学习的人体骨骼关节点三维坐标的获取方法。

背景技术

随着社会的发展和进步,语音控制等家电智能化的程度也越来越高,满足了人们对家居智能化的需求,但该类智能产品也有很大局限性,比如对一些存在语言障碍的人则无法体验。因此需要一些更加符合人类操作习惯的智能产品的出现,如在智能家居领域内,通过检测姿态动作,判断人进行了何种操作进而来驱动智能化产品;又比如在康复医疗领域内,利用检测到的人体姿态判断人体的行为与标准模板是否匹配。

相关技术中,已经有了一些对人体姿态估计的研究,主要有以下三类,一类是类似opti-track这类光学捕捉仪器,在人体上贴上多个mark点,检测到mark点的位置,最终确定人体关节点的位置,该方法需要硬件辅助多,使用局限性大,不利用普及推广。第二类是类似于kinect,通过多个摄像头,双目定位的方式获取到人体的三维关节点坐标,同样该方法使用局限性大,硬件辅助多,成本高,不利用普及推广。第三类是通过深度学习算法检测到人体的二维关节点的坐标,但并未实现向三维坐标的转换,不能获取到人体的关节的进一步的信息。有部分转换算法依赖于有限的训练数据,转换后只对部分图片处理有比较好的效果,无法进行广泛的使用。

因此,实有必要提供一种新的基于深度学习的人体骨骼关节点三维坐标的获取方法解决上述问题。



技术实现要素:

针对以上现有技术的不足,本发明提出一种硬件成本低、准确度高且适用范围广的基于深度学习的人体骨骼关节点三维坐标的获取方法。

本发明提供的一种基于深度学习的人体骨骼关节点三维坐标的获取方法,该方法包括如下步骤:

步骤s1、数据准备:

加载标准的fbx模型至unity软件,设置摄像头需要采集的数据的组数和相应的摄像头参数,设置所述fbx模型的关节旋转四元数并获取每个关节点的3d坐标和2d坐标,用于最终驱动所述fbx模型运动;

步骤s2、数据预处理:

对所述3d坐标数据和所述2d坐标数据进行归一化处理得到预处理数据,将所述预处理数据按照批次分成不同的组输入到卷积神经网络中;

步骤s3、训练网络:

对输入到所述卷积神经网络中的所述预处理数据进行训练,计算训练集loss和验证集loss,使所述训练集loss和所述验证集loss的损失函数收敛至50mm;

步骤s4、实时人体关节点的3d坐标获取:

将摄像头获取的图像输入至2d关节点检测模块,检测出该图像中人体关节点2d坐标并对所述人体关节点2d坐标进行完整性判断与修正,再将所述人体关节点2d坐标进行归一化处理后输入到所述卷积神经网络,结合利用反归一化获取所述摄像头坐标系下的人体关节点3d坐标。

优选的,所述基于深度学习的人体骨骼关节点三维坐标的获取方法还包括如下步骤:

步骤s5、关节点修正:

计算当前帧检测到的人体关节点与前一帧检测到的人体关节点的匹配率,利用当前帧在前一帧里最优匹配率所对应的指数作为修正,使当前帧在前一帧中有唯一的最优匹配。

优选的,步骤s1具体包括如下步骤:

步骤s11、加载所述fbx模型至所述unity软件中;

步骤s12、设定多组fbx模型更新的关节点数据,取第i组数据更新模型,i为整数,其中i初始为0;

步骤s13、将每一帧的关节点的2d坐标和3d坐标以字符串保存;

步骤s14、判断第i组数据中的fbx模型每个关节点更新完毕;若否,则返回步骤s13;若是,则进入步骤s15;

步骤s15、将fbx模型的关节点四元数重置为初始状态,每个关节点的2d坐标和3d坐标数据保存至jason文件格式下;

步骤s16、从jason文件数据解析出2d坐标和对应的3d坐标的数据,分别存储在2d.h5和3d.h5的数据格式下。

优选的,步骤s2中包括:

对3d坐标数据处理:

步骤a、将所述fbx模型的每一帧关节点的3d坐标数据转换到摄像头坐标系下;

步骤b、将所述fbx模型的每一帧关节点的3d坐标的数据进行平移置根节点为坐标原点;

步骤c、求出步骤b的数据的均值m和方差d;

步骤d、利用步骤c得到的均值m和方差d将步骤b的3d坐标数据归一化至均值为0,方差为1;

对2d坐标数据处理:

步骤a’、将所述fbx模型的每一帧关节点的2d坐标数据平移,使得根节点为坐标原点;

步骤b’、求得步骤a’计算得到的2d坐标数据的均值m1和方差d1;

步骤c’、利用步骤a’得到的均值m1和方差d1将2d坐标数据归一化到均值为0,方差为1。

优选的,步骤s3具体包括:

步骤s31、训练集函数损失:输出多个批次的关节点的3d坐标数据,计算对应经过归一化处理的理想的3d坐标数据的l2范数的均值;

步骤s32、验证集函数损失:在验证集中选择某个关节点的2d坐标数据以及与之对应的3d坐标数据,将3d坐标数据和2d坐标数据按照步骤s2中数据预处理的方法进行归一化处理,将2d坐标的数据输入到所述网络,计算输出与经过归一化处理的3d坐标数据的l2范数,作为误差。

优选的,步骤s4具体包括:

步骤s41、将摄像头获取到图像数据输入到2d关节点检测模块,检测出图像中人体关节点的2d坐标;

步骤s42、将检测出的单人或者多人的关节点的2d坐标输入到所述卷积神经网络中;

步骤s43、判断检测到的关节点是否完整,若不完整,对关节点数据进行修正;

步骤s44、将修正后的关节点数据归一化到均值为0,方差为1;

步骤s45、将归一化后的关节点数据输入到所述卷积神经网络,输出经过归一化的关节点的3d坐标数据;

步骤s46、利用反归一化,获取到摄像头坐标系下的人体的关节点的3d坐标数据;

步骤s47、调节所述摄像头的旋转矩阵和平移向量,使得经过所述卷积神经网络输出的3d姿态和真实三维空间中的3d姿态匹配上。

优选的,步骤s5具体包括:

步骤s51、对当前帧检测到的人体的关节点进行判断,如果对应的位置的坐标数据为0,将该关节的标志位置0;否则标志位置1;

步骤s52、获取到当前检测到人体的关节点的矩形框,计算矩形框面积;

步骤s53、计算当前帧检测的所有人和前一帧检测出的所有人的关节点的距离;

判断该距离是否小于1,若是,关节点匹配标志位置1;若否关节点匹配标志位置0;

步骤s54、计算当前帧检测出的关节点与前一帧检测出的关节点匹配率;

步骤s55、计算当前帧检测到的第n个人在前一帧里的最优匹配率;

步骤s56、对当前帧的人的关节点进行补偿。

优选的,步骤s55还包括:

若当前帧检测同一人在前一帧对应多个人存在相同的匹配率,则计算当前帧检测出的同一人相对于前一帧对应的多个人的最优匹配率。

优选的,所述2d关节点检测模块为openpose模块,以coco作为训练数据集。

优选的,所述2d关节点检测模块检测的关节点为18个。

与相关技术相比,本发明的基于深度学习的人体骨骼关节点三维坐标的获取方法,只需要通过任意一个摄像头将采集到的人体图片输入到系统的2d关节点检测模块,即可获得人体相对于根节点的3d坐标,极大程度的将人体关节的3d位置获取从硬件中解放出,降低了硬件成本;而且通过对算法的轻量化处理,降低算法的运算量,实现了将算法运用于移动终端,方便快捷的通过2d图片获取人体的3d姿态。

附图说明的详细描述,本发明的上述或其他方面

下面结合附图详细说明本发明。通过结合以下附图所作的内容将变得更清楚和更容易理解。附图中:

图1为本发明基于深度学习的人体骨骼关节点三维坐标的获取方法的流程框图;

图2为步骤s1的子流程框图;

图3为步骤s2中对3d坐标数据处理的子流程框图;

图4为步骤s2中对2d坐标数据处理的子流程框图

图5为步骤s3的子流程框图;

图6为步骤s4的子流程框图;

图7为步骤s5的子流程框图;

具体实施方式

下面结合附图详细说明本发明的具体实施方式。

在此记载的具体实施方式/实施例为本发明的特定的具体实施方式,用于说明本发明的构思,均是解释性和示例性的,不应解释为对本发明实施方式及本发明范围的限制。除在此记载的实施例外,本领域技术人员还能够基于本申请权利要求书和说明书所公开的内容采用显而易见的其它技术方案,这些技术方案包括采用对在此记载的实施例的做出任何显而易见的替换和修改的技术方案,都在本发明的保护范围之内。

请参图1所示,本发明提供了一种基于深度学习的人体骨骼关节点三维坐标的获取方法,本实施方式中,所谓2d坐标即为关节点的二维坐标,所谓3d坐标即为关节点的三维坐标,该方法包括如下步骤:

步骤s1、数据准备:

加载标准的fbx模型至unity软件,设置摄像头需要采集的数据的组数和相应的摄像头参数,设置所述fbx模型的关节旋转四元数并获取每个关节点的3d坐标和2d坐标,用于最终驱动所述fbx模型运动。

请结合参阅图2,步骤s1具体包括如下步骤:

步骤s11、加载所述fbx模型至所述unity软件中。

步骤s12、设定多组fbx模型更新的关节点数据,取第i组数据更新模型,i为整数,其中i初始为0。

步骤s13、将每一帧的关节点的2d坐标和3d坐标以字符串保存。

步骤s14、判断第i组数据中的fbx模型每个关节点更新完毕;若否,则返回步骤s13;若是,则进入步骤s15。

步骤s15、将fbx模型的关节点的旋转四元数重置为初始状态,每个关节点的2d坐标和3d坐标数据保存至jason文件格式下。

步骤s16、从jason文件数据解析出2d坐标和对应的3d坐标的数据,分别存储在2d.h5和3d.h5的数据格式下。

具体说明如下:

在数据准备步骤中,设置需要采集的数据的组数和相对应的摄像头参数,比如采集的目标数据量为100组数据,则设置datacnt=100。

对每组数据设置所述fbx模型部分关节点的旋转四元数用于最终驱动所述fbx模型运动:以unity软件的坐标系为基准,其中,x轴定义为沿着屏幕向右为正,y轴定义为沿着屏幕向上为正,z轴定义为沿着屏幕向里为正。

所述fbx模型初始姿态设为面部朝z轴的负方向,以2d姿态检测器估计的人体2d关节点为依据,确定fbx模型中姿态需要变化的关节点,可检测的关节点数为0~54个。根据人体生理学规律,确定每个关节允许的相对于unity软件的全局坐标系统设定的旋转轴和旋转角度。本实施方式中,以openpose作为2d姿态检测器,并以coco作为训练数据集,检测出18个关节点,18个关节点即可完全实现人体姿态的调整,具体旋转的关节点为:

{0,humanbodybones.hips},

{1,humanbodybones.leftupperleg},

{2,humanbodybones.rightupperleg},

{3,humanbodybones.leftlowerleg},

{4,humanbodybones.rightlowerleg},

{5,humanbodybones.leftfoot},

{6,humanbodybones.rightfoot},

{7,humanbodybones.spine},

{8,humanbodybones.chest},

{9,humanbodybones.neck},

{10,humanbodybones.head},

{11,humanbodybones.leftshoulder},

{12,humanbodybones.rightshoulder},

{13,humanbodybones.leftupperarm},

{14,humanbodybones.rightupperarm},

{15,humanbodybones.leftlowerarm},

{16,humanbodybones.rightlowerarm},

{17,humanbodybones.lefthand},

{18,humanbodybones.righthand},

每个关节点的旋转轴为:

{0,{y}}

{1,{x,z}}

{2,{x,z}}

{3,{x,z}}

{4,{x,z}}

{5,{}}

{6,{}}

{7,{x,y}}

{8,{y}}

{9,{x,y,z}}

{10,{x,y}}

{11,{y,z}}

{12,{y,z}}

{13,{y,z}}

{14,{y,z}}

{15,{y,z}}

{16,{y,z}}

{17,{}}

{18,{}}

其中,0-18代表关节点的指数,x、y、z分别代表x轴、y轴和z轴。

设置每个关节点的旋转角度为:

{0,(1,180)}

{1,(2,90,80)}

{2,(2,90,80)}

{3,(2,90,30)}

{4,(2,90,30)}

{7,,(2,90,90)}

{8,,(1,30)}

{9,,(3,30,30,30)}

{10,(3,30,30,30)}

{11,(2,20,20)}

{12,(2,20,20)}

{13,(2,90,90)}

{14,(2,90,90)}

{15,(2,90,90)}

{16,(2,90,90)}

其中,0-16为关节点的指数,小括号内为旋转轴的数量及对应的旋转轴可旋转的最大角度(旋转角度的阈值)。

确定每个关节点的旋转四元数:设置一个随机数,该随机数取值在(0,1)之间,当所述随机数小于0.5时,标志位(flag)设置为0,否则设置为1;所述标志位(flag)用于确定选择候选的旋转轴和旋转角度。

根据上述确定的每个关节点的旋转角度的阈值,设定一个范围在(0,1)的随机数,以该随机数为比率,乘以每个轴线上的旋转角度的阈值,得到在每个轴线上的旋转角度作为初始候选旋转角度。

根据上述标志位(flag),从所述初始候选旋转角度里确定最终旋转角度:

如果所标志位为0,采取如下方法从所述初始候选旋转角度里确定最终旋转角度:

取所述关节点所有候选轴的初始候选旋转角度中最大的值,如果该值大于该关节点所有旋转轴的旋转角度的阈值中最小的值,则剔除掉该阈值中在旋转角度最大的角和对应的轴线;其中,循环退出的条件为:所述关节点初始候选旋转角度的最大值小于所述关节点旋转角度的阈值里的最小值;

如果所标志位为1,采取如下方法从所述初始候选旋转角度里确定最终转转角度:

取所述关节点所有候选轴的初始候选旋转角度中最小的值,如果该值小于该关节点所有旋转轴的旋转角度的阈值中的最小的值,则剔除掉该阈值中在旋转角度最小的角和对应的轴线;其中,循环退出的条件为:所述关节点初始候选旋转角度的最小值小于所述关节点旋转角度的阈值里的最小值。

对关节点可对称旋转轴,产生一个取值为[0,1]之间的随机数,若该随机数大于等于0.5,取轴线的正方向;若小于0.5,取轴线的负方向。

需要说明的是,沿着某一个轴线正方向上可以旋转一定的角度,在负方向上也可以旋转一定的角度,该关节点旋转定义为关节点的可对称旋转轴。当关节点旋转只存在轴线的单个方向上的旋转,该关节轴线旋转定义为非对称旋转。

对于关节点的可对称旋转轴,产生一个取值在[0,1]之间的随机数,若该随机数大于等于0.5取轴线的正方向,若小于0.5,取轴线的负方向;通过该方式对关节点的对称旋转轴设定在每个候选轴线上的方向;

对于关节点的非对称旋转轴线强制设定只能按照某个固定的轴线方向,防止出现违反生理学规律的姿态。

关节点的旋转轴线确定为:

如:关节点i绕着x(1,0,0),y(0,1,0)轴分别旋转(a1,a2),则最终旋转的轴线为:

axis=a1/(a1+a2)*x+a2/(a1+a2)*y

最终关节点的旋转角度为各个候选旋转角度的均值。

利用得到的关节点的最终旋转轴线和最终旋转角度,得到关节点的旋转四元数,所谓旋转四元数为该组数据下该关节点旋转的最终姿态。

设定随机数确定每个关节点旋转的速度,即由所述fbx模型初始t-pose姿态到最终姿态的速度,该速度小于1。

获取到当前组的所有关节点的旋转完成的标志。如果完成,则设置新一组的fbx模型的旋转四元数对所述fbx模型进行更新,具体为:

如果为根节点:

利用旋转四元数插值,获取到当前帧的根节点的旋转四元数rot_root。需要说明的是,此旋转四元数为相对于unity全局坐标系而言,因为根节点的父节点即是unity全局坐标系。

设定当前帧的根节点的姿态四元数为:

root_q=rot_root*init_q,

其中init_q为模型为t-pose的初始姿态下的四元数。

如果为非根节点:

a、将旋转四元数分解成角度和旋转轴以获取到当前关节点的旋转四元数相对于unity全局坐标系下的旋转轴线,设为worldaxis。

b、本实施方式中,基于如下理论:所述fbx模型在unity里每个关节点都有一个局部坐标系,所述fbx模型关节点的旋转是相对于该关节点的父节点的局部坐标秀旋转,关节点未旋转时,当前关节点的局部坐标系与父节点的局部坐标系保持一致。

将轴线转换到当前关节的局部坐标系下:

localaxis=q_rot*worldaxis,

其中q_rot为当前关节点的姿态四元数,worldaxis为当前关节点相对于unity坐标系下的旋转轴。

c、利用旋转四元数插值获取当前关节点的旋转四元数,即为当前关节相对于全局unity坐标系的旋转四元数,在unity里的表现形式为:

quaternioncurrot=quaternion.slerp(initdirection,aimrot,t)

其中initdireciton为单位四元数,aimrot为关节点相对于unity世界坐标系的目标姿态,t∈(0,1)。

d、将上述c中的当前关节相对于全局unity坐标系的旋转四元数转换成相对于该关节点前一帧的旋转的旋转四元数:

newrotation=currot*quaternion.inverse((currotations[i]),

其中currotatinos[i]为当前关节前一帧旋转的四元数。

e、利用上述d中获取到的该关节点前一帧的旋转的旋转四元数,分解得到相对于前一帧的旋转角度。

f、利用上述e中获取到的相对于前一帧的旋转角度和上述b中得到的当前关节点相对于全局旋转四元数得到当前关节点旋转四元数q。

g、利用上述f中得到的当前关节点旋转四元数乘以当前关节点的四元数(即当前关节点的状态),得到当前帧关节点的姿态四元数。

bonetransform.rotation=q*bonetransform.rotation

h、保存当前帧关节点的旋转四元素,为下一帧在上述d步骤中的计算提供数据。

计算完毕每个关节的姿态四元数后,将当前关节点的时间标志位更新为当前时间加上速度(其中速度小于1),若累计时间大于等于1,表明关节点更新到最终姿态,则当前关节点姿态更新完毕。

当前帧所有关节点的姿态完成更新后,设置根节点位置的随机数(x,y,z),使得所述fbx模型在新的一帧里,不仅姿态发生变换,整体的位置也发生相应的变化。为防止根节点的三维空间的位置平移后,所述fbx模型在屏幕坐标超过屏幕的边界,需要对模型的屏幕空间的坐标进行判断:

取所述fbx模型的四端点的关节点:

(left_hand,right_hand,left_foot,right_foot,head),调用unity的系统函数,获取到所述fbx模型的这四个关节点在屏幕空间的坐标(xi,yi),其中,(i=1,2,3,4)。

(left_hand,right_hand,left_foot,right_foot)的x坐标的范围为(20,width-20),该范围是为保证fbx模型在变化过程中,fbx模型的2d坐标在屏幕的范围内。

(head,left_foot,right_foot)的y坐标范围为(20,height-20),该范围为为保证所述fbx模型运动过程中,所述fbx模型的2d坐标屏幕范围内)。

若检测(left_hand,right_hand,left_foot,right_foot)的x坐标范围和(head,left_foot,right_foot)的y坐标范围的条件不满足,重新设置根节点的位置,直到满足上述条件。

当前帧所有关节更新完毕后,调用unity的系统函数,获取到每个关节相对于世界坐标系的3d坐标和2d坐标保存到变量bs中,将帧指数自增。

当所述fbx模型的所有关节点的姿态更新完毕后,置更新完毕标志为true,将每个关节点的2d坐标和3d坐标数据保存到本地的jason文件中。

从该jason数据解析出2d坐标和对应的3d坐标数据,分别存储在2d.h5和3d.h5的数据格式下。

至此,以上完成数据准备。

步骤s2、数据预处理:

对所述3d坐标数据和所述2d坐标数据进行归一化处理得到预处理数据,将所述预处理数据按照批次分成不同的组输入到卷积神经网络中。包括对关节点的3d坐标数据处理和2d坐标数据处理。

请结合图3所示,具体如下:

对3d坐标数据处理:

步骤a、将所述fbx模型的每一帧关节点的3d坐标数据转换到摄像头坐标系下。

步骤b、将所述fbx模型的每一帧关节点的3d坐标的数据进行平移置根节点为坐标原点。

步骤c、求出步骤b的数据的均值m和方差d;

步骤d、利用步骤c得到的均值m和方差d将步骤b的3d坐标数据归一化至均值为0,方差为1。

请结合图4所示,对2d坐标数据处理:

步骤a’、将所述fbx模型的每一帧关节点的2d坐标数据平移,使得根节点为坐标原点。

步骤b’、求得步骤a’计算得到的2d坐标数据的均值m1和方差d1。

步骤c’、利用步骤a’得到的均值m1和方差d1将2d坐标数据归一化到均值为0,方差为1。

将归一化处理后的数据按照批次分成不同的组输入到卷积神经网络中,比如选择批次为60,则将2d坐标和3d坐标数据分成60份,输入到该卷积神经网络中。

步骤s3、训练网络:

对输入到所述卷积神经网络中的所述预处理数据进行训练,计算训练集loss和验证集loss,使所述训练集loss和所述验证集loss的损失函数收敛至50mm。请结合图5所示,具体包括如下步骤:

步骤s31、训练集函数损失(训练集loss):

输出多个批次(比如60个批次)的关节点的3d坐标数据,计算对应经过归一化处理的理想的3d坐标数据的l2范数的均值。

步骤s32、验证集函数损失(验证集loss):

在验证集中选择某个关节点的2d坐标数据以及与之对应的3d坐标数据,将3d坐标数据和2d坐标数据按照步骤s2中数据预处理的方法进行归一化处理,将2d坐标的数据输入到所述网络,计算输出与经过归一化处理的3d坐标数据的l2范数,作为误差。

网络训练epoch(批次)选择为10,训练完毕后,发现训练集和测试集的函数损失(loss())都收敛到50mm附近,满足要求。

步骤s4、实时人体关节点的3d坐标获取:

将摄像头获取的图像输入至2d关节点检测模块,检测出该图像中人体关节点2d坐标并对所述人体关节点2d坐标进行完整性判断与修正,再将所述人体关节点2d坐标进行归一化处理后输入到所述卷积神经网络,结合利用反归一化获取所述摄像头坐标系下的人体关节点3d坐标。请结合图6所示,具体的,本步骤包括如下:

步骤s41、将摄像头获取到图像数据输入到2d关节点检测模块,检测出图像中人体关节点的2d坐标。本步骤中,可利用任意2d检测器,如stackedhourglass检测器,只要能实现图像检测出人体的2d坐标即可。本实施方式中,具体使用openpose2d关节点检测器。

步骤s42、将检测出的单人或者多人的关节点的2d坐标输入到所述卷积神经网络中。具体为输入到2d转3d的卷积神经网络。

步骤s43、判断检测到的关节点是否完整,若不完整,对关节点数据进行修正。本实施方式中具体修正见步骤s5。

步骤s44、将修正后的关节点数据归一化到均值为0,方差为1。具体的,利用训练的网络数据得到的2d坐标的数据的均值m和方差std,将数据归一化到均值为0,方差为1。

步骤s45、将归一化后的关节点数据输入到所述卷积神经网络,输出经过归一化的关节点的3d坐标数据。

步骤s46、利用反归一化,获取到摄像头坐标系下的人体的关节点的3d坐标数据;

步骤s47、调节所述摄像头的旋转矩阵和平移向量,使得经过所述卷积神经网络输出的3d姿态和真实三维空间中的3d姿态匹配上。

步骤s5、关节点修正:

计算当前帧检测到的人体关节点与前一帧检测到的人体关节点的匹配率,利用当前帧在前一帧里最优匹配率所对应的指数作为修正,使当前帧在前一帧中有唯一的最优匹配。

请结合图7所示,本步骤中具体包括:

计算当前帧检测到的人和前一帧检测到人的匹配。

步骤s51、对当前帧检测到的人体的关节点进行判断,如果对应的位置的坐标数据为0,将该关节的标志位置0,表示关节未被检测到;否则标志位置1;

步骤s52、获取到当前检测到人体的关节点的矩形框,计算矩形框面积,用于归一化处理,比如:

对当前帧检测到的第i个人:

获取检测到的所有关节的x,y坐标的最小值(xmin,ymin),(xmax,ymax),计算矩形的面积。

步骤s53、计算当前帧检测的所有人和前一帧检测出的所有人的关节点的距离。判断该距离是否小于1,若是,关节点匹配标志位置1;若否关节点匹配标志位置0。

比如,若当前帧的第i个人的关节点joint_k在图像上的像素点坐标为(0,0),表示未识别到该关节点,将第i个人的joint_k与前一帧的所有人距离置为无穷大;否则,计算当前帧的第i个人的joint_k的像素点和前一帧检测出的对应该关节点的距离比当前帧检测出来第i个人的关节点的矩形区域,用于归一化。

步骤s54、计算当前帧检测出的关节点与前一帧检测出的关节点匹配率。具体为:

若步骤s53中计算的距离小于预设阈值,比如本实施方式中预设阈值为1.0,当然可以根据实际情况设定,则将匹配标志设定为1,否则将匹配标志设定为0,若dist(i,j,k)>1,则march(i,j,k)=0,其中(i,j,k)表示为当前帧的第i个人和前一帧的第j个人对应的第k个关节。

步骤s55、计算当前帧检测到的第i个人在前一帧第j个人的最优匹配率:

pck(i,j)=sum(march(i,j))/njoint,

其中,njoint表示人体关节点的总数。

更优的,若当前帧检测同一人在前一帧对应多个人存在相同的匹配率,则计算当前帧检测出的同一人相对于前一帧对应的多个人的最优匹配率。

比当,若存在当前帧第i个人在前一帧里的多人存在相同的匹配率的情况,选择有效的匹配关节距离较小的,其他的匹配pck(i,t)=0(t!=k),从而保证在前一帧中选择到最优匹配。

a、计算当前帧第i个人(i=1…m)在前一帧里最优匹配,即计算max(pck(i,0:n))所对应的指数,表示成匹配对的形式,即为p[i]=j。将前一帧中非最大匹配的pck置0,如果最大匹配指数对应的pck为0,则当前帧第i个人在前一帧中无关节匹配;将匹配指数置为-1,即修改pck[i]=-1,保证当前帧在前一帧中有唯一的最优的匹配。

比如,当前帧第i个人在前一帧的pck最大的指数为j,则pck(i,t)=0(t!=j)。

b、利用上述a中修正的pck,计算前一帧的第j个人(j=1…n)在当前帧率的最优唯一匹配,即计算max(pck(0:m,j)),得到最大值所对应的匹配指数比如为i,也即p1[j]=i,若pck(i,j)=0,则p1[j]=-1。

c、由上述a和b确定了当前帧的人和前一帧的人是一一映射的匹配,若当前帧的第i个人(i=1…m)在p[j](j=0..n)中,则c[i]=t,即表示第i个人在前一帧与第t个人匹配;若不在,则c[i]=-1,则表示当前帧第i个人在前一帧中无匹配)。

步骤s56、对当前帧的人的关节点进行补偿。具体如下:

若当前帧第i个人在前一帧有对应的人j与之匹配,选择用j的关节直接补偿i的关节。

若当前帧的第i个人在前一帧中无对应的人的关节与之匹配,直接将该人删除掉,不做处理。因为若检测到的关节点存在关节坐标为(0,0)的坐标点输入到所述卷积神经网络中,会造成其他关节点的坐标位置异常,因此直接删除掉。

与相关技术相比,本发明的基于深度学习的人体骨骼关节点三维坐标的获取方法,只需要通过任意一个摄像头将采集到的人体图片输入到系统的2d关节点检测模块,即可获得人体相对于根节点的3d坐标,极大程度的将人体关节的3d位置获取从硬件中解放出,降低了硬件成本;而且通过对算法的轻量化处理,降低算法的运算量,实现了将算法运用于移动终端,方便快捷的通过2d图片获取人体的3d姿态。

需要说明的是,以上参照附图所描述的各个实施例仅用以说明本发明而非限制本发明的范围,本领域的普通技术人员应当理解,在不脱离本发明的精神和范围的前提下对本发明进行的修改或者等同替换,均应涵盖在本发明的范围之内。此外,除上下文另有所指外,以单数形式出现的词包括复数形式,反之亦然。另外,除非特别说明,那么任何实施例的全部或一部分可结合任何其它实施例的全部或一部分来使用。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1