马佳琳,梁 鹏
(沈阳师范大学 软件学院,沈阳 110034)
随着动作捕捉在影视特效、动画和体感游戏中的广泛应用,运动数据采集技术在近10年的发展中取得了明显的进步。Kinect作为微软旗下的基于体感技术的数据扫描设备,己经被广泛应用在人体运动检测中,其不断完善的运动捕捉技术和语音识别技术,使人们只需要身体动作或声音就可以轻松地与机器对话,不仅增加了人机交互的乐趣,同时也为运动训练提供了新的训练指导思路[1]:运动数据采集在许多专业运动训练和国家训练中被应用于辅助研究人员从多角度观察教练动作,获得多个动作参数和生理指标的训练数据,为科学训练提供可靠数据来源[2]。教练可以通过各种训练数据为每个训练人员定制科学的训练计划,有针对性地指导训练,准确掌握运动员的身体轮廓和身体位置的扫描数据与标准动作的数据进行对比并反馈错位信息纠正用户肢体动作的错误[3],从而降低学员运动难度来提高训练效率,使运动训练在数字化、参数化的环境下摆脱传统训练的困境,从而有效的降低用户学习难度和提高用户动作学习的效率,因此对于运动捕捉技术的研究可以有效提高运动训练水平。
Kinect最大的优点之一就是通过光编码技术获得深度图,这与TOF技术或结构技术,以及传统的光学测量技术不同,红外反射镜连续向空间发射光,并进行空间编码[4],然后通过CMOS感光芯片读取编码计算出空间距离[5]。由于kinect不需要特殊的感光芯片,从而大大降低了成本。它并非通过红外线发射器发出激光,而是将二者分布在视觉空间中,当铺向空间物体发射光时,会根据不同的距离和变化的模式形成反射光,形成高度随机的反射点,相当于三维的标记[6]。
Kinect技术的核心是最重要的三维深度信息处理技术,用于接收来自红外发射器和红外摄像机的深度信息来判断物体的距离。微软使用的3D深度信息技术来自Prime Sense。它提供了运动检测技术和检测芯片PS1080,以及利用光编码的专利技术[7]。
动作识别的体系结构如图1所示。该系统由3个主要模块组成:数据采集、数据处理与特征提取、人体姿态识别。在数据采集模块中,Kinect可以采集骨骼不同类型的信息:颜色数据流、深度数据流和骨骼信息流。数据处理和特征提取模块的目的是根据需要进行数据规范化等处理并计算姿态表示的相关特征[8]。除此之外,Kinect还提供了与传统相机相同的彩色图像,所有针对传统相机提出的特征都可以应用于Kinect设备[9]。系统着重通过使用骨骼信息进行人体的姿态识别,如屈伸、躺着等动作。
图1 Kinect识别主要核心模块Fig.1 Main core modules of Kinect recognition
图2 关节位置坐标轴(右手坐标系)Fig.2 Skeleton position axis (right hand coordinate system)
在新版Kinect SDK中,提供了骨骼跟踪工具。此工具旨在收集关节作为相对于设备本身的点,并在帧中收集关节信息。对于每个帧,估计并收集20个关节点的位置[10]。对于每个关节点有3个关键点需要注意:首先是关节点的索引,每个关节点都有一个唯一的索引值,在深度传感器的坐标轴中用x、y和z轴表示,原点代表传感器阵列,z轴沿传感器阵列指向的方向[11]。关节坐标如图2所示。
最后是关节状态的设置。通过Kinect跟踪关节位置,将关节状态设置为“已标记”,如果无法跟踪则根据算法从其他关节进行推断,从而确定关节位置,并将关节的状态设置为“未标记”。
本系统是基于Kinect和实时运动重定向的人体动画合成,最终目标是实现实时运动捕捉数据驱动模型,所以首先应该将Kinect采集到3D骨骼模型进行一定的预处理操作,然后与骨骼关节点进行匹配[12],把得出的运动数据在Kincet应用平台上驱动3D模型,逆重定向于系统中的人体骨骼模型上,用以驱动平台中的3D人物模型运动,进而引导用户高效学习。整个系统的合成过程包括低维数转换为高维数据、三维网格加载、网格骨骼提取、节点间匹配、实时运动捕捉数据驱动的网格模型等[13]。其中低维数据转换为高维数据的步骤如下:
1) 将数据库中2个近期合成的运动数据和根位置进行相应的局部运动后建立模型;
2) 通过平滑运动建立局部线性模型的数据流点阵,实时合成运动数据动画;
3) 将实时合成的运动数据结合根节点合成新的运动数据并使其运用于3D动画。
运动学习系统的3D人体实时动画设计流程如图3所示。首先利用Kinect设备捕捉人体运动数据,将数据进行人体合成;然后提取3D网格模型中的3D骨骼模型后与关键的骨骼节点相匹配、逆重定向于3D人体骨骼模型以及皮肤变形[14]。
图3 运动学习系统的设计流程图Fig.3 The design flow of The motion training system
为了评估运动训练系统的性能,系统需要建立一个提取骨骼信息的联合数据库来进行测试:通过微软的Skeleton API开发了C++数据库捕获工具,输入窗口显示的是由RGB相机捕获的彩色图像,“骨骼”视图窗口显示了使用红外热像仪时检测到的人的骨骼节点[15]。
在骨骼信息数据库的建立过程中,Kinect的高度设置为100 cm,人体姿态预设为“站立”“坐着”“弯曲”和“躺下”,Kinect摆放角度为0°时,“躺着”的角度为-10°。测试室使用的是白炽灯界面如图4所示。
图4 骨骼信息数据采集界面Fig.4 Interface of the skeleton information data collection
系统捕获了测试人员的4个主要姿势(站立,坐着,弯曲和躺下)。每个姿势记录3次,每次持续时间大约5~8 s。要求测试人员按照如下要求做出动作:
1) 站立姿势:测试人员敞开手臂站立,眼睛注视Kinect。在第1次和第2次记录时间中测试人员与Kinect之间的距离为190 cm,在第3次记录时间中距离为210 cm。
2) 坐姿:测试人员坐在椅子上后背伸直,膝盖垂直折叠,手放在大腿上,眼睛注视着Kinect。第1次和第2次记录时间,测试人员与Kinect之间的距离为190 cm,第3次记录时间,距离为210 cm。
3) 躺姿:从Kinect的角度来看,人体处于水平方向。测试人员的腿伸直,手沿身体伸展。对于所有3个记录时间,测试人员与Kinect之间的距离为190 cm。
4) 弯曲姿势:测试人员垂直于Kinect弯曲,手放在膝盖上。第1次记录时双腿闭合,在第2次和第3次记录时,测试人员的双腿张开得与肩膀一样宽。所有这3遍,测试人员与Kinect之间的距离均为190 cm。
在录制过程中,测试人员保持在相同位置。图5给出了骨骼信息数据库中4个姿势的部分图像。
图5 4种姿势的骨骼节点数据Fig.5 Skeleton node data of four postures
借助微软公司推出的Kinect体感设备进行人体姿态识别的研究,利用其实时追踪用户身体轮廓位置的特点,通过结合3D场景中的3D人物模型追踪用户骨骼节点,从而确定动作数据并和标准数据进行实时对比;通过基于Kinect运动数据捕捉设备来获取运动参数,统计运动规律,克服传统的体育动作学习耗费时间长、动作的标准程度差、学习效率低的困难,从而点明了体育动作学习的指导方向,对有效提高运动员竞技水平、提高运动训练水平提供科学依据具有重要的现实意义。