王 轲, 王 亚, 段渭军,, 于 琪
(1.西北工业大学 体育部,陕西 西安 710072;2.西北工业大学 电子信息学院,陕西 西安 710072)
研究发现Kinect传感器[1,2]的开发和使用能实现非接触式的动作采集。本文以大学生体质健康测试项目立定跳远为例,借助微软Kinect传感器,进行其动作状态跟踪、捕捉和姿态分析,不仅可以解决传统学生体质健康测试存在的问题,而且可以完成在取得准确测试结果的同时能够获取测试过程数据,为高校体育教学及体质健康测试评价提供理论和参考依据。
Kinect 2.0[3]配备红外发射器,主动投射近红外光谱,照射到粗糙物体、或是穿透毛玻璃后,光谱发生扭曲,会形成随机的反射斑点(称为散斑),进而能被红外摄像头读取版采用。同时,深度(红外)摄像头配合红外发射器使用,对发射回传感器的红外光谱利用飞行时间(time of flight,TOF)获取红外脉冲由被测物体反射到接收器所用的时间[4]。然后Kinect 根据光速和时间来计算深度信息,从而创建可视范围内的人体、物体的深度图[5~7]。
设发射频率为f,红外波长为λ,传播周期为Τ,相位差为Δφ,信号传播时间为t,则可推得目标点到相机所在平面的距离d为
(1)
(2)
式中 光速c为3×108m/s,n为红外发射器收发一次信号的波长个数。由于环境和红外频率等因素的多重影响,距离Kinect较近位置处获取到的深度点的密度要大于后方,故距离较近的位置可以获得比较精确的深度信息。Kinect可以获得水平57°(以Kinect为中心,左右各28.5°)和竖直43°(以Kinect为中心,上下各21.5°)的侦测范围。
1.1.1 深度图像数据
Kinect深度传感器可以获取距离Kinect最近的物体到Kinect所在平面的垂直距离。其深度判别范围中黑白区域为正常工作区域,红色与蓝色区域分别代表无穷近与大于4.5 m的测量区域,绿色范围内数据判别精度不高,故其可较准确地返回它前方0.5~4.5 m距离的深度值信息。
1.1.2 人体识别
Kinect先识别类似于人体的“大”字形物体的轮廓,然后通过边缘检测、噪声处理等计算机视觉方面的算法进行处理,最终将人体从背景中分离出来[8,9]。该过程中Kinect对深度图像逐个像素扫描,进行“像素级”评估。Kinect的视野可以同时跟踪6个用户,每个用户都会被分配到一个唯一的ID。如前所述,灰度图像每一像素点的16位中,高13位记录深度数据,低3位记录用户ID,用来对识别出的人体进行编号,ID的三位都为0表示不是人体,或者骨骼引擎关闭,如图1所示。
图1 人体识别分割
通过人体识别分割已经将人体从背景中分离,通过识别人体的25个关节点来对骨骼进行识别。如图2所示获得的骨骼关节点的三维坐标信息需要进行坐标转换[10,11]。
图2 人体骨骼关节位置示意
通常深度图像帧的x,y坐标系表示在传感器上对应的坐标,而不表示实际物理环境的位置坐标。深度图像坐标系的点,类型为DepthImagePoint(x,y,z) ,(x,y)为深度图像像素坐标,z(mm)为深度值。而骨骼坐标系的点,类型为SkeletonPoint(x,y,z) , (x,y,z)(m)为空间坐标。
深度图像坐标系和骨骼坐标系均以Kinect 传感器的红外摄像头为中心,x,y轴分别与图像的x,y轴平行,z轴为传感器的方向,与图像平面垂直。这样构成的直角坐标系为摄像机坐标系。
测试系统的硬件设备由Kinect、立定跳远测试仪、IC卡读卡器、一台电脑和服务器组成。主要包括三大模块:读卡器、Kinect和体重仪组成的信息采集模块,电脑作为系统的载体组成的处理模块和数据库(如图3所示)。
图3 系统构架
身体帧数据由人体25个关节点的集合,每帧包含了关节的3D位置和方向。人体跟踪的有三种状态:跟踪失败(not tracked)、推测状态(inferred)、跟踪状态(tracked)。跟踪失败状态下,身体数据的Position字段以及相关的节点数组中的每一个位置点值都是0,即x,y,z值均为0;推测状态探测到了人体对象,但追踪没有被激活,身体数据的Position数据有值,相关的关节数据位置点的值都是0;追踪状态表示人体骨骼信息正在被追踪,身体数据的Position信息和相关的节点数据的位置信息都为非0值。Position为一个Camera Space Point类型的字段,代表所有骨骼的中间点(如图2所示)。
本文在姿势库中定义了两种姿势,即伸开双臂呈“T”字形来启动测量和举起双手以清除当前数据重新测量。测试者做出特定的姿势通过与姿势库中模板匹配,就是对关节点进行命中测试来触发相应的事件。
本方法关节点采用节点三角形法,即计算某些关节点之间的角度(如图4 所示)。由左肩关节点(shoulderleft) 、左肘关节点(elbowleft) 和左手腕关节点(wristleft) 三点构成的三角形中,可根据距离公式分别求出a,b,c三边边长,再根据余玄定理求出夹角。当夹角在规定的阈值范围内,可以判断为有效姿势。
图4 节点三角形法
首先需确定起跳位置和最终人体的移动距离,根据TOF测距原理,人体景深数据表示从景深(红外)摄像头到该物体表面的距离(mm),每一个像素为16 bit,测距范围在0.5~8 m之间。其所使用的空间坐标系不同一般的空间坐标系,其中z轴坐标零点为景深摄像头的位置,x轴与y轴的零点与传统空间坐标系相同,正方向为指向的正前方。值得注意的是,由Kinect获取的景深值是物体距离传感器所在水平线的距离,而非至传感器的直接距离。
测试对象处于离Kinect距离为L的位置上,摆出“T”姿势,相机标定此时测试对象的位置为起始位置。当起跳之后,通过脚部坐标点的变化,识别出已经处于跳远运动状态中并标定用户落地的位置。通过计算起始点和落地点之间的距离,计算出测试对象的立定跳远距离(图5)。
图5 立定跳远的测量方法
当测试对象与Kinect距离不断缩小时,即z轴方向上的值减小,脚部骨骼点y轴方向上的值也会随之减小。为了解决此问题,通过采集不同距离时多组(z,y),拟合出一条矫正曲线,使得在水平平面上脚部骨骼点坐标值y不会因z的值变化而改变(图6)。
图6 矫正曲线
立定跳远流程设计如图7所示。
图7 跳远测量流程
3.1.1 测试对象
随机选取12名本科一年级大学生(男女各6名)。
3.1.2 测试方法
1)选用学校立定跳远测试仪器;2)选用本次实验的Kinect传感器测量方法及仪器。考虑到在立定跳远动作会出现的两种情况:1)用户稳稳地保持在落地点位置;2)由于惯性用户会向前迈步。采取以下解决方法:第一种情况下用户脚部骨骼点在y轴方向上的坐标值将不再发生变化。计算获取数据中10组坐标值差值,如果差值在允许误差范围内时,则判定用户已经落地,并将10组坐标值均值作为用户落地点位置。第二种情况下,通过MATLAB软件绘制脚部骨骼点y轴方向上的位移图,会发现在曲线会有多个拐点,这些拐点即为脚部多次落地y轴坐标变化。取10组数据进行变化趋势分析,当数据中第一次出现拐点,则取该拐点处值为落地点位置。
实验结果如表1所示。表明,根据方法(1)测试立定跳远成绩的平均误差约为1.07 %;而根据Kinect方法(2)测试的平均误差约为0.32 %,验证了采用Kinect传感器的TOF测距原理及该方法的准确性。
表1 立定跳远测量结果
该方法可在多个项目中应用,实现集多项测试于一体的功能,同时Kinect设备可以实现基于视频动作捕捉,对运动姿态分析有很大帮助。不仅在取得准确测试结果的同时能够获取测试过程数据,而且能为体育教学、体质测试评价提供理论和参考依据,具有一定的应用价值。