基于Kinect的人体姿态估计优化和动画生成

2022-09-25 08:42李毅
计算机应用 2022年9期
关键词:骨骼向量姿态

赵 威,李毅

(四川大学计算机学院,成都 610065)

0 引言

人体姿态估计是捕捉人体姿态序列,输出关节点坐标反映姿态特征的技术,在动画、影视、行为识别、人机交互等场景有广阔的应用前景。近年来虚拟偶像文化异军突起,捕捉和映射人体动作的体验需求也随之蓬勃增长,人们也希望以较低成本获得虚拟替身和三维动画。

常见的运动估计方法有基于物理和基于视觉的方法。基于物理的人体运动估计常借助于动作捕捉系统,通过追踪人体上附着的传感器信息来推断世界场景中的人体关节坐标和运动情况,Vicon 和OptiTrack 是目前应用广泛的商业动作捕捉系统,精度可以达到20 μm。这种方法往往需要布置多个捕捉摄像头和穿戴捕捉服装,对人体具备一定的侵入性和不便性,高精度的代价是费时又耗力,实验场地要求较高且成本昂贵。基于视觉的人体运动估计技术具备设备要求低、人体无害性的特点。微软Kinect 深度摄像机能够从单个深度图像中预测人体关节的3D 位置,在用户级别的动作捕捉游戏中得到了广泛的应用,由于环境遮挡、自遮挡问题,应用场景仅局限于正对摄像头的一定区域且在较强环境光下容易受限。随着深度学习的发展,姿态估计问题得到广泛的讨论,虽然在数据集上得到了良好的验证,但实际应用中仍存在一定的不稳定性,因此如何提高姿态估计的应用稳定性和鲁棒性,生成流畅的人物动画是人体运动估计和仿真领域研究的一大热点。

本文使用单个Kinect 设备采集人体三维姿态,旨在以较低采集成本条件下,优化姿态估计效果,驱动虚拟人物模型生成自然流畅的虚拟人动画,主要工作包括:

1)提出了一种时空优化的骨骼点数据处理方法,平滑并进行骨长约束,提高单目人体姿态估计的稳定性。

2)提出了一种融合Kinect 和遮挡鲁棒姿势图(Occlusion-Robust Pose-Maps,ORPM)[1]三维姿态估计方法,结合基于骨骼追踪与深度信息的传统算法和基于深度学习的ORPM 单目估计方法进行姿态估计,解决了Kinect 设备采集人体姿态存在的遮挡问题,扩大了适用范围。

3)研制了虚拟人动画系统,使用优化处理后的三维人体骨骼点数据,实时驱动虚拟人模型运动,生成自然流畅的人物动画。

1 相关工作

基于视觉的运动估计方法主要有基于骨骼追踪和基于深度学习的方法。前者往往需要借助于RGBD 摄像头,Shotton 等[2]将人体运动和姿态估计问题映射为分类问题,其算法成功应用在Kinect V1 和Kinect V2 设备上,可满足室内动作捕捉游戏的基本要求。人体姿态估计问题在深度学习的广泛应用下取得了巨大的进步和突破,其中单目人体姿态估计是计算机视觉中最基本和最具挑战性的问题之一,其旨在基于性能优良的深度神经网络和强大的数据集,得到视频、图像和摄像头中的人体坐标信息。Cao 等[3]设计并开源了人体姿态估计检测和分析工具Open Pose。文献[4]中先后进行了2D 多人姿态估计的研究并进一步提高了精度。Li等[5]首次将深度学习的方法应用于单张图片的3D 姿态估计。Metha 等[1,6]提出了基于连续RGB 图像的3D 姿态估计方法,适用于单目RGB 摄像头并满足实时性,在遮挡和较快速运动情况下,也能进行全身姿态的恢复。以上方法都是基于单帧推理的方法进行的,没有充分利用连续的运动序列数据之间的相关性,会出现一定的抖动跳变和不稳定性。

在解决遮挡问题,提高Kinect 的通用性方面,研究者也开展了很多工作:Yeung 等[7]采用双Kinect 进行双视角数据的融合,解决关节位置不一致和自闭塞问题;Moon 等[8]采用5 台Kinect 传感器进行180°范围内人体跟踪;李琪等[9]对两台Kinect 摄像机计算的关节角数据进行融合,实现了相对稳定的人体姿态追踪系统。以上的工作均采用融合多视角数据的方法进行算法改进,当一个传感器出现错误情况时,可以采用另一个传感器进行修正,然而由于Kinect 视野范围的局限性,当两台Kinect 均出现自遮挡或环境遮挡的情况时,仍会出现表现关节丢失的情况,而布置5 个视角以上的摄像机的标定成本和计算成本会显著增加。

本文首先采用单个Kinect 进行运动序列的采集,获取Kinect 测量数据并对实时彩色信息进行ORPM 单目估计算法推理;其次针对单目估计方法的不稳定性,提出了一种时空优化的骨骼点数据处理方法,对运动序列中的人体姿态进行骨长约束,保证人体关键肢节的空间一致性,采用动态适应中值滤波算法在时间维度上平滑运动序列,将偏离的坐标数据进行替换,同时又不会对运动曲线过度平滑;然后采用卡尔曼滤波对两种算法的测量值加权融合得到最终的姿态估计结果;最后采用四元数向量插值和逆向运动学约束方法,研制了虚拟人动画系统,利用优化融合的数据,实时驱动虚拟人物模型生成动画。

2 时空优化的骨骼点数据处理方法

基于深度学习的三维人体姿态估计快速发展,但总体仍囿于局限的室内数据集,在泛化性和实际应用上表现不足。本章的核心任务是对ORPM 单目估计算法的骨骼点进行处理,提高其稳定性,以便更好地与Kinect 数据进行融合。通过对单目估计数据添加骨长约束,保证人体运动过程中骨骼的空间一致性;采用动态适应中值滤波,自适应进行滤波窗口的扩展和缩放,在时间维度上对骨骼数据进行优化。

2.1 骨长空间约束

Kinect V2 采用25 个关节点表示人体某一时刻的姿态,单目估计OPRM 算法的编码结构则为15 个节点,为了后续更好地进行虚拟人动画系统仿真实验,本文以最契合Unity 3D 引擎角色动画系统的Human3.6M[10]关节顺序和结构为基准,对两者进行一致性映射处理。对于Kinect 人体骨架,删除手脚末端的手指和脚趾关节,对于ORPM 人体骨架,取左肩和右肩的中点作为胸部节点,取胸部节点和髋节点的中点作为脊椎节点,统一为Human3.6M 人体骨骼结构,反映人体运动姿态。采用以髋节点为根节点的树型结构表示人体骨架,表明层次关系。人体骨架树型编码和顺序如图1 所示。

图1 人体骨架树型编码和顺序Fig.1 Human skeleton tree coding and sequence

人体结构中骨骼的长度是固定的,但在检测过程中,人体运动过快或环境噪声等影响,输出的姿态估计结果的骨骼长度有波动,这是姿态估计效果不稳定的原因之一。因此本文将约束各个肢节长度的位置,以求得更符合人体运动规律的姿态估计信息。采集表演者T-Pose 的稳定序列,每一段骨长可由相邻节点之间的欧氏距离表示,采用稳定序列的样本均值作为表演者的平均骨骼长度。如式(1)所示,其中j表示人体关节点,L为骨骼长度均值,ε为误差参数,当肢体长度在范围[L-ε,L+ε]内时,认为该节点长度没有发生较大的误差。节点长度发生变化时,对下位节点进行恢复。由于不同采集者的体型、位置不同,平均骨骼长度和误差范围也有一定的差距。

以膝关节点pi(xi,yi,zi)和足关节点pj(xj,yj,zj)为例,关节定长的约束过程为:

1)建立膝盖节点为圆心、肢体长度为半径的球体,当肢体长度一定时,踝关节一定位于以膝盖节点为球心、以肢体长度为半径的球面上。

2)求解球心到脚部节点的空间直线,与球面的交点即为最终肢体定长后的节点位置。球心OC=(xi,yi,zi),球面公式如式(2)所示:

3)求解空间直线与球面的交点,可以得到两个与球面相交点P1、P2,选择距离足关节更近的交点作为最终求解点。经过关节长度限制后,输出的三维姿态估计数据骨骼长度一致,更符合人体运动规律。

2.2 关节点时间平滑

对姿态估计中的抖动情况进行讨论,运动过程中,人体运动状态随时间平稳变化,某一时刻的运动状态是上一时态运动的拓展,同时也是下一时态运动的基准。基于算法逐帧处理的过程,抖动情况往往是由于某一帧或几帧数据的错误处理引起的突变。为了保证运动过程中的时间一致性,需要对关节点数据进行平滑处理,筛去偏移点使数据峰值趋于平缓,从而优化突变情况。

姿态估计的平滑效果与窗口大小逆相关:窗口越大,平滑效果越明显;反之,平滑效果越接近于原始值,对不同偏差的帧数据应采取不同的平滑窗口。因此提出动态适应的中值滤波方法,平滑窗口能够自适应地扩展和缩放。对于连续噪声或偏移量较大的帧,采用较大的窗口。对于噪声较小的帧,采用较小的窗口,在抑制强噪声的同时也能最大限度保留运动细节,算法过程包括以下几个步骤:

1)对运动序列进行窗口补齐操作,从x、y、z三个维度顺序计算每一帧在滑动窗口范围内的最大值、最小值和中值。分别代表第s帧第i个骨骼点坐标的测量值、最大值、最小值和中值。

2)判断中值是否与最大值或最小值相等,如果满足条件说明样本不足,对窗口进行2 倍扩展;反之,对窗口进行2倍缩放,直到下一次缩放不满足条件或到达窗口阈值。窗口稳定后进入3)。

3)判断测量值是否介于最小值和最大值中间,如果满足条件,说明测量值偏差较小,接近于稳定,将测量值作为返回结果;否则返回中值。

4)如果增大或缩放后的窗口大小达到阈值,将测量值作为该帧的返回结果。

3 数据融合方法

3.1 时间空间对齐

Kinect 捕获到的人体姿态估计结果以深度摄像头为坐标原点,单目估计算法的坐标原点则为Kinect 设备的彩色摄像头,因此采用张氏标定法[11]标定两个摄像头并求解内外参数,确定两个摄像头之间的位姿关系,保证人体姿态的空间一致性,双摄像头的相对旋转矩阵R和平移向量T如式(3)和式(4)所示:

其中:R0、R1分别为彩色摄像头和深度摄像头的外参中的旋转矩阵,T0、T1为平移向量。

不同算法的采样频率不同,模块处理能力存在差异,在时间上需要进行同步对齐处理,因此采用时间配准的方法将Kinect 和单目估计算法的采集数据对齐至同一时刻,减少时间误差。双算法的采集序列如图2 所示。

图2 不同算法的采样序列Fig.2 Sampling sequences of different algorithms

内插外推法[12]利用已有的采样情况预估目标时刻的状态,将高频采样数据同步至低频采样率的姿态估计,实现双算法的时间对齐,双算法的采样频率保持一致在24 FPS。假设姿态估计采集在ti-1、ti、ti+1时刻下的真实值记录为αi-1、αi、αi+1,则在插值点tj处的值表示为式(5):

3.2 目标数据融合

本节介绍实现基于卡尔曼滤波的数据融合方法,使用Kinect 和ORPM 算法的测量值以测量噪声协方差矩阵R的逆矩阵为权重因子生成融合结果。人体运动可抽象为线性运动,通过离散时间下的状态空间模型对运动系统进行建模,如式(6)[8]所示:

其中:yk为k时刻的测量向量,xk为状态向量,vk为测量噪声向量,Hk为测量转移矩阵。

卡尔曼滤波过程包括预测和更新两个阶段。预测阶段包括计算出当前运动时刻的预测状态向量值和误差协方差矩阵两步骤,如式(7)和式(8)所示:

其中:是基于k-1 时刻之前的观测值在时间k的测量值先验状态估计;Pk|k-1是基于k-1 时刻之前的观测值在时间k的误差协方差矩阵先验估计;Fk为k时刻的线性状态转移矩阵;Gk为输入控制矩阵;uk为输入控制向量;Qk为协方差对角矩阵,表示外界环境过程噪声。

更新阶段首先计算卡尔曼增益Kk,如式(9)所示,其中和分别为混合后的测量矩阵和测量噪声协方差矩阵;然后计算经过线性状态转移矩阵得到的状态向量估计,如式(10)所示,最后估计误差协方差矩阵Pk|k,如式(11)所示:

在卡尔曼滤波的过程中,测量向量呈现为在样本均值周围高斯分布,测量噪声与测量值和样本均值的距离成正相关关系:噪声越大表明测量值偏移样本均值越远,则获得的权重越小;噪声越小则测量值偏移样本均值越小,则获得的权重越大。因此卡尔曼滤波的加权融合策略为:以测量噪声协方差逆矩阵为权重,对两种算法结果进行加权平均融合,如式(12)所示:

其中为融合后的测量向量。

4 虚拟人动画生成

虚拟人物运动驱动方法包括四元数向量插值和逆向运动学约束。四元数向量是三维旋转的一种表达形式,具备计算量小、适应性强的特性。由于数据获取模块的速率只能达到24 FPS,为了更好地展示运动情况,采取球形插值的方式获得更平滑的动画效果。逆向运动学是基于末端节点约束中间节点的技术,可以对四元数向量驱动方法进行修正,使运动过程更符合规律。

4.1 四元数向量插值

四元数向量插值方法可以控制虚拟角色运动,同时避免欧拉角方法的万向锁问题和提高计算效率。基于前文建立的人体骨骼模型,节点自由度的更新是由父节点传递下去的,父节点的旋转平移会影响子节点,而子节点的变化不会影响父节点。四元数向量驱动方法包括以下几个步骤:

1)计算当前帧每个肢干的特征矢量,矢量由子节点减去父节点坐标得到,如式(13)所示:

其中:i、j为树型编码中具备父子关系的节点索引;P为特征矢量。

2)定义t时刻的四元数旋转向量qt,如式(14)所示:

其中:w表示相邻帧中刚体肢干的旋转角度;v表示垂直于qt-1、qt方位向量的旋转轴单位向量;i,j,k 为虚数单位。

3)采用四元数三维旋转公式表示运动过程,如式(15)所示:

4)采用球面插值对t和t-1 帧中的虚拟角色骨骼特征矢量进行插值操作,过程可描述为式(16):

其中λ∈[0,1]表示平滑程度:数值越接近0 表示两帧之间插值点越多,表现越平滑;数值越接近1 表示两帧之间插值点越少,平滑程度越低。

4.2 逆向运动学约束

采用四元数向量插值方法可以得到平滑运动的虚拟人动画,然而存在不满足人体运动规律的现象,仍需要采用运动学方法进行修正和约束。逆向运动学的原理为基于人体树型结构的特点,根据子节点带动父节点,逐层传递运动约束。给出末端关节位置V时,可求解该关节的旋转角度R,如式(17)所示:

循环坐标下降法(Cyclic-Coordinate Descent,CCD)是逆向运动学求解的一种数值方法,通过反复迭代和逼近,找到人体运动的稳定状态。CCD 方法在迭代的过程中,需要由末端节点调节直至根节点的所有节点旋转信息,求解复杂度较大。实际运动过程中,末端节点的位姿关系并不会影响所有节点的状态。例如手腕的变化会影响肩部和肘部的状态,但不会影响髋节点的自由度。

因此在CCD 方法的基础上添加约束项,使得求解过程更符合人体运动规律。定义节点J,当前关节点旋转角度θi的运动范围为[α,β],运动约束过程可表示为式(18)。如果当前帧的计算结果符合人体生理特征范围,无须进行运动学约束;反之,则将当前肢节旋转角度约束至区间内。

5 实验与分析

5.1 数据处理实验

为了验证时空优化的骨骼点数据处理方法对单目三维姿态估计的有效性,采集了一段包含异常状态的连续序列,其中图3(a)为交叉双臂动作中连续的6 帧。图3(b)为处理前单目估计算法处理的三维姿态,红色圆圈标注的位置为骨骼变形和塌陷的情况,可以看出在第3、第4 和第6 帧中,人体骨架出现了较为明显的骨长变化,第6 帧中人体胸部附近出现了关节错位的情况。图3(c)为骨长约束后的三维姿态图,可以看出处理后的骨架之间的间距变大,塌陷和变形的情况得到解决,具有良好的稳定性。

图3 运动序列处理Fig.3 Motion sequence processing

空间中任意两个三维点集的误差可由最小二乘距离[13]表示。当最小二乘距离越小时,证明两帧之间的相关度越高,未发生突变,反之表明帧之间很可能出现了异常,需要进行空间约束。基于人体运动的平稳性和连续性,相邻帧三维点集的最小二乘距离值应趋向于较小值。针对该序列处理前后的最小二乘距离对比情况如表1 所示,可以看出处理后的帧间误差更小,证明处理后的人体运动更平稳。

表1 帧间最小二乘距离Tab.1 Least squares distance between frames

平滑滤波对单目姿态估计过程中的时间一致性具有一定作用。对整个采集的运动序列进行可视化展示,表现了使用不同平滑算法处理的对比结果,自上而下分别为原始姿态估计结果、中值滤波优化结果和本文方法的结果,如图4 所示。红色蓝色和绿色曲线分别表示17 组三维骨骼点在x、y、z三个维度的位置随时间变化情况。可以看出中值滤波的平滑效果有限,在500 帧后发生连续跳变和抖动时,不能很好地进行平滑。动态适应中值滤波方法在解决抖动问题上具有明显的优势:具有更强的平滑效果、能消除大部分剧烈的抖动、对异常数据进行修复、更符合人体运动规律。

图4 运动序列中关节点坐标变化情况Fig.4 Coordinate changes of joint points in motion sequence

5.2 数据融合实验

为了验证融合算法的有效性,使用微软Kinect V2 和三维人体动作捕捉系统OptiTrack 同时采集运动序列,实验场景如图5 所示。其中OptiTrack 包括8 个前视红外摄像头,架于采集室上方四周,实验人员穿戴包含37 个光学标定点的捕捉服装。Kinect 正对人体,在距离2 m、离地1.5 m 的区域范围内进行动作和姿态数据的采集。

图5 实验场景Fig.5 Experimental scene

由表演者在正对Kinect 采集范围内进行挥手、行走、蹲下和双臂交叉、侧身击拳等动作。在实验对象前方置放高脚椅,保证在采集序列中关节存在环境遮挡情况。图6 从左到右依次为采用Kinect V2、本文融合方法和OptiTrack 设备数据生成的动画效果,从整体来看,虚拟人动画能准确反映出实验人员的肢体动作,在动画应用上具备可行性;同时仍存在一定的不足,如绿色圆圈标注的位置,虚拟人物末端关节动画出现了不协调的情况,这是骨骼点的数量较少造成的,头部、手腕、脚踝的部位仅用一个点去表示,存在二义性旋转问题。

图6 生成的动画效果Fig.6 Generated animation effects

动画效果反映了姿态估计算法数据的准确性。将错误之处用红色圆圈进行标注,当身体全部关节都出现在视野中时,Kinect 数据和融合方法都能准确展现运动姿态,在双臂交叉和下蹲动作中,Kinect 出现了关节推断不准确和关节错乱的情况,融合算法能够基本反映运动姿态。此外,当出现人物遮挡时,Kinect 倾向于优先识别距离较近的实验对象,原本追踪的人体丢失,动画展现为前面人物的动作;本文方法并未丢失目标人体的检测,更接近动捕设备的动画效果。

人体姿态估计的变化情况可由每个关节的自由度变化表示。以右臂为例,右肩有3 个旋转自由度,右肘有两个旋转自由度。图7、8 分别为在挥手和侧身击拳动作序列中右肩和右肘的变化情况。可以看出,在挥手动作中,由于并未存在遮挡情况,Kinect V2、文献[14]方法以及均值融合方法和本文方法在表现上较为一致,均与动捕系统的结果相差无几。在侧身击拳动作中,由于存在右臂对左臂的遮挡情况,Kinect的变化趋于平缓,没有较大的周期性变化,波峰和波谷较小,不能准确反映侧身击拳的动作变化;文献[14]方法在波峰和波谷的位置出现了较多的锯齿状抖动,仅能在一定程度上反映防遮挡情况;而采用均值融合的方法距离真实值仍存在较大的偏差,如图8(a)、(d)、(e)所示。本文方法获取的关节角度在多数关节角的波峰和波谷位置更接近于OptiTrack 系统,这说明融合方法在处理遮挡中具备一定的有效性。

图7 挥手动作中右肩和右肘的角度变化情况Fig.7 Changes in angles of right shoulder and right elbow during waving motion

图8 侧身击拳动作中右肘和右腕的角度变化情况Fig.8 Changes in angles of right elbow and right wrist in sideways punching motion

5.3 虚拟人动画系统

虚拟人动画系统包括场景生成、数据捕获、数据优化和处理以及人物运动驱动模块,如图9 所示,其中场景生成包括虚拟人物模型与环境的搭建,SMPL(Skinned Multi-Person Linear)人体模型[14]是一个基于深度学习的层次结构虚拟角色模型,包括顶点、球形骨骼点、纹理贴图和骨骼蒙皮,可以省去较为繁杂的建模工作。场景建模包括外观设计、材质贴图和场景渲染步骤。

图9 虚拟人动画系统流程Fig.9 Flowchart of virtual human animation system

将SMPL 模型导入Unity3D 游戏引擎,然后用脚本系统建立模型关节节点和表演者运动控制节点的映射关系,通过传输控制协议(Transmission Control Protocol,TCP)将融合数据传输至引擎中,映射给角色模型。数据捕获模块包括Kinect 数据以及ORPM 单目估计算法推理数据的获取;数据处理优化模块以及人物运动驱动模块的流程在前面章节已经介绍。表演者可以在摄像头前表演身体姿态,系统将进行三维人体姿态估计和优化处理,驱动虚拟人物生成动画,场景更新。

图10 为表演者在T-Pose、举手、踢腿、下蹲和夜间抬手的采集场景以及不同动画生成方法的对比。从图10 可以看出:文献[14]方法仅能在光照良好的条件下使用,在夜晚并未检测出抬手动作,模型呈现为初始动作;欧拉角方法未进行逆向运动学约束,在抬手、踢腿和下蹲中均出现了一定的脚部下陷进地面的情况,并容易出现万向锁问题,如抬腿动作的动画。

图10 表演者部分动作与动画效果Fig.10 Part of performer’s actions and corresponding animation effects

从表2 的客观指标来看,本文方法使用了四元数向量插值的运动方法,动画达到60 FPS,相比文献[14]提高了两倍,并且环境适应性更好。因此证明,虚拟人运动系统能满足动画和游戏场景的基本需求。

表2 不同动画生成方法对比Tab.2 Comparison of different animation generation methods

6 结语

本文采用Kinect 设备捕获人体运动序列,针对单目估计算法的不稳定性,提出了时空优化的骨骼点处理方法,针对Kinect 的遮挡问题,提出了结合ORPM 单目估计算法和Kinect 测量数据融合的方法,最后基于四元数向量插值和逆向运动学约束,研制了虚拟人动画系统,与传统Kinect 算法相比,本文算法能够良好应对部分遮挡情况,无额外成本、易架设,在动画应用方面具备可行性。

同时也存在一些不足:基于深度学习的姿态估计算法精度和适用广度还有待提升,但采用深度学习方法辅助传统方法进行适用性拓展是一个可行的探究方法。除此之外,由于关节点数量限制,末端关节存在二义性旋转问题,而良好的角色动画除了要求肢体动作流畅外,还需要兼顾真实的面部表情和手部动作,同时这也是近年来计算机视觉领域的热点问题,一种可能的方案是建立精细的角色模型,采用基于深度学习的方法进行手部和面部表情数据获取,将人体骨骼动画、面部动画和手部细节动画进行混合,获得更高精度的动画,这也是未来工作需要考虑的。

猜你喜欢
骨骼向量姿态
向量的分解
3D打印骨骼指日可待
绿建筑的商业姿态
向量垂直在解析几何中的应用
get!五大潮流热点 许你裙装 浪漫姿态
向量五种“变身” 玩转圆锥曲线
骨骼是如何生长的
神奇的骨骼
阅读是最美的姿态