[张作运 刘科征 王向强]
基于Kinect V2 动作捕捉系统的设计与实现
[张作运 刘科征 王向强]
目前成熟的光学动作捕捉设备,要求演员穿戴各种设备,这会对演员运动造成不便而导致动作失真,同时由于场地要求和价格等因素,导致该方法无法推广。因此,提出使用Kinect V2和Unity3D,再结合泰勒平滑算法和运动重定向技术,设计一个基于Unity3D的动作捕捉插件,该插件使用Kinect捕获的真人动作数据实时地驱动3D模型运动。本系统能够进行实时预览,其硬件外观简单,价格便宜。在低成本动画制作,游戏制作和虚拟现实等领域有较强的实用价值。
Kinect V2 动作捕捉系统 Unity3D 插件 运动重定向技术
张作运
重庆邮电大学,信号与信息处理重庆市重点实验室,硕士生,主要研究方向:嵌入式技术、虚拟现实与多媒体技术。
刘科征
重庆邮电大学,信号与信息处理重庆市重点实验室,讲师,主要研究方向:嵌入式系统设计、计算机机器视觉、计算机图形图像处理等。
王向强
重庆邮电大学,信号与信息处理重庆市重点实验室,硕士生,主要研究方向:物联网关键技术、嵌入式技术、虚拟与增强现实技术。
随着计算机图形学技术和计算机视觉的发展,动作捕捉技术广泛地应用于电影、卡通、广告和电子游戏等。动作捕捉技术通过捕获真人的运动数据来驱动虚拟人运动,使得虚拟人物的动作更逼真,增强了视觉效果[1]。
目前,传统的动作捕捉设备价格昂贵、操作复杂、后期处理工作量大,对操作场地有较高的要求,装置校准也较为繁琐。而现有的基于Kinect的动作捕捉系统还不够成熟。这体现在:
(1)系统封闭,扩展性不好。系统捕捉的运动数据,只能在自己的平台使用,不能应用到第三方平台中。
(2)系统在骨骼追踪时,在肢体有重合的情况下(尤其和身体躯干),会出现肢体末端抖动。
(3)在运动重定向时,由于真人骨骼和3D人体模型骨骼存在差异,会导致人体模型肢体相互穿透或者陷入地面等失真现象。
针对以上问题,本文设计一个搭载在Unity3D平台上的动作捕捉系统。该系统采用Unity3D插件开发技术,并使用Kinect for Windows SDK2.0来驱动Kinect捕获人体动作数据,使用运动重定向技术实时驱动模型进行运动。本文设计的动作捕捉系统基于扩展性和跨平台性较好的Unity3D,这有效地解决了动作捕捉系统的封闭性问题。本文提出并使用了泰勒平滑算法,解决了人体模型肢体末端抖动的问题。另外本文研究了运动重定向技术,并将其应用到本系统中,以解决模型肢体穿透等失真问题
本文设计的动作捕捉系统架构如图1所示,采用Kinect v2 和unity 3D搭建而成,使用Kinect V2获取的运动数据来合成人体实时动画:先通过Kinect的深度传感模块,获取深度数据流,然后对获取的深度数据进行人体识别和部位识别来提取人体骨骼关节点数据,接着对人体骨骼运动数据做平滑处理,然后与带骨骼的3D人体模型的关节点进行一对一匹配,最终实现利用捕获到的Kinect运动数据实时驱动人体模型运动。
图1 基于Kinect v2的动作捕捉系统架构图
如图1所示,将人体直接作为控制器输入,实现对Unity 3D虚拟场景中角色模型的实时运动控制。系统主要包含3个模块:三维深度数据获取模块、人体识别和骨骼提取模块、运动数据处理和数据重定向模块。本系统在unity3D平台下,完成了这3个模块的开发。
3.1 三维深度数据获取模块
Kinect V2解构如图2所示,主要组件有RGB彩色摄像头,红外发射器和尝试传感器组成。新增红外线传感器在赋予了黑暗中识别动作能力的同时,降低了操作环境的要求[2]。
图2 Kinect V2硬件解构图
Kinect v2的深度传感模块属于主动式TOF(time of flight)深度传感器,通过测量光脉冲之间的传输延迟时间来测量深度,TOF在一定程度上可以做到逐个pixel的计算,与第一代相比,在相同的传感器分辨率的情况下得到更高的精度[3]。这里使用的TOF技术,是通过发射一个强度随时间周期变化的正弦信号,利用发射、接受信号的相位差来计算深度,精度比传统TOF高。
Windows Kinect SDK2.0中彩色数据和深度数据的请求方法均通过OpenNextFrame。彩色图像帧的读取方法:ColorImageStream.OpenNextFrame (T);获取之后需要判断DepthImageFrame 对象是否为空,因为有可能事件触发了,但是没有产生数据帧。在使用事件模型时3种数据帧的获取方式:
sensor_ColorFrameReady
(object sender,ColorImageFrameReadyEventArgs I)
sensor_DepthFrameReady
(object sender,DepthImageFrameReadyEventArgs I)
sensor_AllFramesReady
(object sender,AllFramesReadyEventArgs I)
由Kinect V2获取的图像信息如图3所示。
图3 Kinect图像信息
3.2 人体识别和骨骼提取模块
获得三维深度图像数据无法直接用来驱动三维人体模型,这里需要对其进行处理,包括人体识别,背景分离、骨骼提取等操作。本模块的主要目标就是从深度图像中将人体从图像背景中分离出来。Kinect SDK中的API囊括了背景分离、骨骼提取等操作。
目前,Kinect for Windows SDK2.0中的骨骼API可以提供位于Kinect前方至多6个人的位置信息,包括详细的姿势和骨骼点的三维坐标信息。
在SDK中每个骨骼点都是用Joint类型来表示的,每一帧的25个骨骼点组成基于Joint类型的集合[4],如图4所示。
图4 25个骨骼点示意图
此类型包含4个属性,具体内容如下。
JointType:骨骼点的类型,这是一种枚举类型,列举出了25个骨骼点的特定名称,比如“HandTipLeft”表示该骨骼点是左手指尖点。
Position:SkeletonPoint类型表示骨骼点的位置信息。SkeletonPoint是一个结构体,包含X、Y、Z三个数据成员,用以存储骨骼点的三维坐标。
TrackingState:JointTrackingState类型也是一种枚举类型,表示该骨骼点的追踪状态。其中,Tracked表示正确捕捉到该骨骼点,NotTracked表示没有捕捉到骨骼点,Inferred表示状态不确定。
HandState:leftHandState和 rightHandState,这个类有5种状态:open,closed,lasso,not tracked,unknown。分别用来表示手掌张开,合拢,剪刀手,未追踪到和未知状态。
3.3 运动数据处理和数据重定向模块
3.3.1运动数据处理
Kinect V2的误差和肢体形态有关,在肢体有重合的时候(尤其和身体躯干),会造成骨骼的肢体末端抖动,这是由于两帧之间的数据相差很大,就会造成动作不平滑而出现抖动,这就需要对骨骼数据帧进行平滑处理[5],为了解决这一问题,本文提出了使用泰勒滤波来进行骨骼运动平滑处理。
泰勒公式,如下所示,该函数用是某点的信息描述其附近取值的公式,它将一个连续的函数近似地表示为若干项之和(此式省略了余项)。
泰勒公式在这里用来预测joint(骨骼关节点位置)数据。在这里假设骨骼的运动近似看作一个N次多项式与时间的关系。这里用N项多项式来代表过去的N次输入,利用这个多项式来预测下一帧的joint数据。考虑到 joint数据都是离散的,因此公式用中系数可以用n阶导数的后向差分来确定,具体如下:
由上可知,下一帧的输入数据可以用多项式拟合。
将估算表达式的项数设为N,并令α=n,然后将f(n+1)用泰勒公式代入可以得下第n+1次输入的估计,公式如下。
例如,当N=3时,可以得到预测表达式如下所示。
通过上面的推导,我们只能预测到未来骨骼的位置数据,并没有对数据进行平滑或去噪处理,接下来,我们将第n次实际输入的数据与预测的数据进行权植平衡处理。其中α代表权值取值范围(0,1)。当α较大时,得到的目标数据比较接近真实数据,α较小时,目标数据更接近预测数据。
取一段时间的某个关节点,本文选择的是手指尖这个关节点来进行仿真。记录一段时间内该关节点的x坐标的变化,可以得到图4(a),然后再利用上述的泰勒平滑处理算法进行处理滤波,可以得到图5(a),图中可以看到滤波后两者的对比效果。相关项数值N取5,α取值0.6,仿真结果基本符合预期要求。
图5 泰勒滤波效果图
本文将彩色图像与骨骼系统合并得到图5(b),使用泰勒平滑处理之后,肢体末端抖动明显减小。
3.3.2 数据重定向
三维虚拟角色模型一般由骨骼模型和蒙皮两部分组成。骨骼一般是按照人体各节点之间的连接关系形成的一个树状模型结构,如图6所示。
图6 带骨骼的人体模型原理图
蒙皮是一种皮肤网格,包括皮肤网格的各顶点坐标信息、纹理坐标信息等。一般来说人体的骨骼模型运动能准确反映人体的运动信息[6]。因此,可以将运动捕捉设备捕捉到的运动数据,经处理后作用于骨骼模型上,通过每一帧的骨骼运动数据来实现模型驱动。通过驱动骨骼模型并使用蒙皮绑定技术就能重现复杂的人体运动。本文在unity 3D平台上来实现3D模型的重定向,将3D模型导入到unity3D场景中。然后通过获取经过平滑处理的骨骼数据,来驱动3D模型的骨骼,然后通过蒙皮绑定技术来带动其它部位的运动。
由于虚拟角色的大小比例可能和被捕捉实体的比例不完全一致,甚至骨架结构不同的情况下,使得动作会失去原始的特性,比如出现滑步和地面穿透等现象。
通过“表演者”与“3D人体模型”的骨干长度比例,计算出“动画角色”的末端效应器的位置,然后通过逆向运动学求得各个关节的旋转角度,这样就可以消除动画角色在运动过程中的滑步现象[7];本文为了可以消除运动过程中的悬空以及穿透地面的现象,在unity3D中将人与地面的接触设为一个强制条件。
4.1 软件界面
本文设计的动作捕捉系统是搭载在unity3D平台上的插件。本系统界面如图7所示。该界面分5块:第一部分,初始化Kinect的开关;第二部分,在unity3D场景中添加人物模型;第三部分:“Kinect V2”图标处是用于显示“表演者”彩色图像的区域;第四部分:“雷达图标”是显示人体在Kinect范围内的相对位置信息;最后一部分是脚本录制功能,该部分还处在开发中。
图7 动作捕捉系统插件界面
4.2 系统功能展示
为了验证上述工作的正确性和有效性,本文使用系统捕获了行走和跳跃两组图片,如图8所示。本文在实验室中完成了三维深度数据获取,骨骼数据提取和平滑处理,以及利用重定向技术实时驱动三维模型。
本文针对高速公路二次事故可能会给驾乘人员或者救援人员带来严重的人身伤害的问题,设计了基于SX1278扩频组网技术、MEMS姿态测量技术的高速公路防撞系统。论文提出了用加速度传感器来对交通锥的振动信号进行检测,通过对振动加速度变化信号进行标准差分析,对撞击事件进行有效判断的方法。论文给出了整体的系统设计和系统架构。实验测试显示,虽然在个别特殊情况下会出现误报的情况,但也是为了防止漏报的情况,因此可以对撞击事件做出有效的检测,当发生报警后,人员可以第一时间进行躲避,尽量减少人员伤亡和财产损失。
1林谋有,刘国满,盛敬,等.高速公路二次交通事故预警指标研究[J].公路与汽运,2015(6):53-56
2李世光,王文文,申梦茜,等.基于STM32的姿态测量系统设计[J].现代电子技术,2016(9)
3刘函林,黄华.基于ZigBee的高速公路防相撞系统设计与实现[J].微计算机信息,2009(23):8-9
4Semtech.SX1278 Reference Rev.4,2015
5卓从彬,杨龙频,周林,等.基于MPU6050加速度传感器的跌倒检测与报警系统设计[J].电子器件,2015(4):821-825
6Chen D,Feng W,Zhang Y,et al.A wearable wireless fall detection system with accelerators[C]// Robotics and Biomimetics (ROBIO),2011 IEEE International Conference on.IEEE,2011:2259-2263
7王可之,梁山,刘飞,等.基于加速度传感器的建筑工地广域无线防盗系统[J].传感技术学报,2010,23(4):602-606
8Ruhhammer J,Zens M,Goldschmidtboeing F,et al.Highly elastic conductive polymeric MEMS[J].Science & Technology of Advanced Materials,2015,16(1)
9Ruiz-Garcia L,Barreiro P,Robla J I.Performance of ZigBee-Based wireless sensor nodes for real-time monitoring of fruit logistics[J].Journal of Food Engineering,2008,87(3):405-415
10康海,赵坤,刘书林.基于MPU6050模块的飞行姿态记录系统设计[J].电子设计工程,2015,23(10):188-190
11曹玉珍,蔡伟超,程旸.基于MEMS加速度传感器的人体姿态检测技术[J].纳米技术与精密工程,2010,8(1):37-41
12闫俊岭,张郭.基于MEMS惯性传感器的两轮自平衡小车设
13计[J].电子产品世界,2016(2)吕一磊,何小刚.基于ZigBee技术的煤矿巷道安全监测系统设计[J].工矿自动化,2015,41(4):115-118
10.3969/j.issn.1006-6403.2016.10.017
(2016-09-13)