赵建敏, 许晓伟, 贾慧媛
(1.内蒙古科技大学 信息工程学院,内蒙古 包头 014010;2.内蒙古科技大学 学工部,内蒙古 包头 014010)
基于Kinect体感传感器的心理宣泄系统的实现
赵建敏1, 许晓伟1, 贾慧媛2
(1.内蒙古科技大学 信息工程学院,内蒙古 包头 014010;2.内蒙古科技大学 学工部,内蒙古 包头 014010)
击打宣泄是心理宣泄疗法的主要手段。基于Kinect体感传感器和Direct3D图形绘制编程接口,设计并实现了心理宣泄系统。系统利用Kinect体感传感器采集人体关节点坐标信息,控制虚拟拳头击打虚拟击打对象,模拟真实拳击运动,通过击打实现心理宣泄。实验表明:该系统不仅能获得良好的心理宣泄效果,而且,可以为健身运动提供新的体验平台,其计算出的击打力还可作为拳击训练的重要参考标准。
Direct3D; Kinect; 传感器; 心理宣泄系统; 击打力
2010年,微软公司发布了Kinect体感传感器,新兴的体感交互方式强势崛起,打破了传统的人机交互方式,使人机交互的理念更彻底地展现出来,且被广泛地应用于各行各业。
心理治疗中,“宣泄疗法”是一种常见的有效的减压方法。随着对心理健康的重视和心理健康教育的普及,很多学校甚至企业都创建了心理宣泄室。然而,传统的心理宣泄室,场景单一,对象单一,成本投资大,治疗效果受限。
本文提出了一种基于Kinect体感传感器的虚拟心理宣泄系统,利用Kinect传感器追踪人体骨骼,获取身体运动关节点坐标[1,2],结合Direct3D图形绘制接口,模拟拳击运动,实现心理宣泄,呈现出了良好的击打宣泄效果。该系统不仅能获得良好的心理治疗效果,而且为拳击运动爱好者提供了全新的健身体验平台。同时,系统中设计的基于图像的击打力量计算算法,可以为专业拳击运动员拳击训练提供新的辅助手段。此外,也为体感交互技术开辟了新的应用领域。
本文参照真实拳击运动项目设计了基于Direct3D和体感交互技术的心理宣泄系统。该系统通过Kinect体感设备对人体动作进行采集捕捉,获得人体的骨骼图像数据,筛选出左、右手和手腕关节点的坐标。将手的坐标和虚拟拳头进行绑定,以现实中的人手带动屏幕中的虚拟拳头完成击打动作,并计算出出拳速度和击打力。参照拳击训练人偶,虚拟击打对象在虚拟拳头的击打下,根据拳速和击打力摇摆或倒地,体现击打效果,实现心理宣泄。通过Direct3D图形绘制接口可进行场景、虚拟击打对象模型和虚拟拳头模型的加载、渲染。系统的总体结构图如图1所示。
图1 心理宣泄系统总体结构图Fig 1 Overall structure of psychological catharsis system
通过Kinect设备的骨骼追踪技术获取人体骨骼图像信息[3],从中取出关键关节点坐标,并进行处理,具体实施流程图如图2所示。
图2 图像信息的获取和处理流程图Fig 2 Flow chart of acquiring and processing of image information
首先,进行体感设备初始化,分为两部分:检查Kinect设备状态和创建设备ID。检查Kinect设备的状态,主要是检查Kinect设备是否连接到电脑上和Kinect设备的驱动是否安装成功;若设备状态正常,NuiCreateSensorByIndex函数创建设备ID。
其次,检查是否追踪到人体骨骼,只有人体和Kinect在一定的距离范围内,设备才能进行骨骼追踪。完成骨骼追踪后,检查获得的骨骼信息中是否含有关节点坐标。Kinect传感器追踪到人体后,会有2种追踪状态:NUI_SKELETON_POSITION_ONLY状态,仅包含骨骼中心点的坐标,此状态舍去;NUI_SKELETON_TRACKED状态,包含所有关节点坐标,从中取出手和手腕关节点坐标。
最后,完成骨骼坐标系到深度坐标系、深度坐标系到屏幕坐标系的转换。利用NuiTransformSkeletonToDepthImage函数可将骨骼坐标系转换到深度坐标系,用于拳速和击打力的计算。
由于控制虚拟拳头是在屏幕坐标系内完成,因此,需要将深度坐标系转换成屏幕坐标系。屏幕横纵坐标的计算见式(1)和式(2)
(1)
(2)
其中,x,y为深度坐标系中的坐标值,width,height为显示窗口的宽度和高度, ScreenWidth,ScreenHeight为默认的深度图像分辨率的宽度和高度。
系统将人手关节点的屏幕坐标赋值给虚拟拳头的中心点,实现人手和虚拟拳头之间的绑定,以现实中的人手带动屏幕中的虚拟拳头完成击打动作。
首先,进行虚拟拳头的渲染。在3DSMAX软件中模仿出拳前臂,绘制出拳头模型,并赋予其材质和人体皮肤纹理,再以微软定义的3D模型文件格式即.X文件格式导出[4]。在程序中,用D3DXLoadMeshFromX函数加载.X格式文件,读出材质和纹理,并设定光照,进行渲染。
其次,进行虚拟拳头的控制,包含2个方面:位置移动控制和出拳姿态控制。
1)位置移动控制:在程序中,左、右手的坐标定义如下:
D3DPositionScreenHandLeft= {0};
D3DPositionScreenHandRight= {0};
其中D3DPosition结构体的定义如下:
typedefstructD3DPosition
{
floatx;
floaty;
floatz;
}D3DPosition.
从骨骼追踪数据中获取左、右手关节点坐标,并将其转化为屏幕坐标,为变量ScreenHandLeft,ScreenHandRight赋值。在虚拟拳头渲染的时候,将变量ScreenHandLeft,ScreenHandRight的值放入拳头的世界变换的平移变换中,实现虚拟拳头的位置跟随操控。
2)出拳姿态控制:将左、右手臂等效为2个空间向量:LeftArmVector和RightArmVector,通过4个关节点坐标即左、右手关节点坐标(ScreenHandLeft和ScreenHandRight)和左、右手腕关节点坐标(ScreenWristLeft和ScreenWristRight)计算出。之后,根据手臂空间向量的方向在系统中调整虚拟拳头姿态,使其根据真实前臂方向改变自身方向。
对于左拳头姿态改变,获取当前的ScreenHandLeft的坐标为(x0,y0,z0),ScreenWristLeft的坐标为(x1,y1,z1),则左前臂向量LeftArmVector的坐标为(x0-x1,y0-y1,z0-z1),将此向量投影到XZ平面上,它与Z轴的夹角fAngleY就决定了虚拟拳头绕拳头中心点左、右方向旋转的角度。其中,fAngleY的计算如式(3)
(3)
将左前臂向量投影到YZ平面上,它与Y轴的夹角fAngleX决定了虚拟拳头绕拳头中心点上、下方向旋转的角度。其中,fAngleX的计算如式(4)
(4)
将角fAngleX和fAngleY分别给拳头模型的世界变换中的绕X轴和Y轴旋转的2个旋转变换,就可以实现左拳头随着前臂方向改变进行自身姿态的变化。
对于右拳头的姿态改变,具体计算方法如同左拳头。
系统中,击打对象仿真人偶的创建和渲染与虚拟拳头相同,将其固定在屏幕的虚拟击打场地中央,人偶上身作为击打目标,响应击打动作。
人体作出击打动作且屏幕中的拳头击中人偶的上半身时,计算出拳速度和击打力,其流程图如图3所示。
图3 拳击击打流程图Fig 3 Flow chart of boxing hitting
首先,设置击打目标区域,其计算方法如下:
将上半身目标区域等效为定边长矩形,其中心点的位置随击打后人偶摆动而变化,如图4所示。
图4 击打目标区域变化等效图Fig 4 Equivalent diagram of change of hitting target area
图4以人偶模型底部的中心点为原点,建立一个坐标系。初始时,人偶模型不动,与y轴重合,设人偶模型的高度为l,矩形的宽为w,高为h,则矩形中心点A的坐标为(0,l-h/2)。当受到击打后,人偶模型开始摇摆,当摆角为α时,设中心点A′的坐标为(x,y),计算如下
(5)
(6)
当模型向右偏,位于第一象限时,x取正;向左偏,位于第二象限时,x取负。将获得的中心点坐标加减矩形的长宽,可获得目标区域矩形的4个点坐标。
其次,基于击打目标区域判定是否击中目标,若左手关节点的屏幕坐标落入目标区域,认为左手击中目标;否则,同样的方法判定右手是否击中目标。
无论是左手还是右手击中目标后,将其在当前帧和前一帧中的深度坐标系坐标赋值给变量CurrentHandPosition0和LastHandPosition0。在深度坐标系中,X,Y为像素值,Z分量为长度,单位mm。为实现拳速计算,做如下标度变换:设变量坐标在单位换算前的值为(x0,y0,z0),换算后为(x,y,z),则根据KinectSDK中的像素和单位“m”的换算程序得到
其中,width和height分别为深度分辨率的宽和高,在此取320和240。
然后,计算出拳速度和击打力。
1)出拳速度计算:拳速计算公式如式(7)所示
(7)
其中,CurrentHandPosition和LastHandPosition是击中目标的那只手在当前帧和前一帧中经过单位转换后的关节点坐标;CurrentFrameTime和LastFrameTime是当前帧和前一帧的采样时间,用timeGetTime()获取。由于关节点坐标均为三维坐标,计算出的速度v也是三维坐标。
2)击打力计算:拳击运动在击打的瞬间,相当于拳头和人偶的碰撞。根据冲量定律
Ft=mvt-mv,
(8)
令m为手臂的质量,v和vt是拳头在碰撞时的初速度和末速度,t为碰撞时间,可计算拳头的击打力F为
(9)
设m为10kg,vt因拳头碰撞后静止,恒为0,v可由式(7)计算获得,碰撞时间t计算如下:
将拳头和人偶近似等效为2个质量不等的弹性球体。在两球碰撞过程中,碰撞时间与两球半径之和呈正比,与初速度之和呈反比,而与两球质量无关[5]。设R1和R2为两球的半径,v1和v2为两球碰撞前的初速度,则碰撞时间t为
(10)
其中,设手的半径R1为0.05m,初速度v1为v;人偶的半径R2为0.3m,初速度v2为0,则式(10)可化简为
(11)
将m=10kg,vt=0以及式(11)带入式(9)可得
(12)
在上面的公式中,v为三维空间中的矢量,则力的大小如下
(13)
其中
(14)
根据拳速和击打力量的大小,系统控制人偶响应击打动作。
本文设定了击打力量阈值,若击打力量大于最大值,人偶倒地;否则,根据动量守恒定律计算碰撞后,人偶摆动初速度,如式(15)所示
(15)
其中,m1为手臂质量,设为10kg,初速度v1由式(7)计算得出,因击打完后手臂静止故末速度v2为0;m2为人偶质量,设为25kg,击打前人偶静止故其初速度v1为0。将已知变量的值带入式(15)可化简为
(16)
通过多次击打尝试和屏幕中的实际效果显示,得出了速度和摇摆角度之间的一个近似线性公式
(17)
其中,k≈0.1rad·s/m,fAngle是人偶首次摇摆的最大角度,根据实际效果,角度每周期大约衰减10 %,直到人偶摆角小于0.05rad,停止摆动。
人偶倒地和摆动效果,是通过Direct3D中世界变换的旋转变换来实现的。无论是倒地还是摇摆,把人偶运动方向简化为4个原子方向即左、右、前、后方向。其中,左、右方向绕Z轴旋转,前、后方向绕X轴旋转。若实现模型倒下效果,则给绕X轴或者Z轴的旋转变换函数赋值π/2或者-π/2;实现模型绕X轴或者Z轴的摇摆fAngleX或fAngleY角度的效果,则给绕X轴或者Z轴的旋转变换函数赋值fAngleX,fAngleY。
为了增强心理宣泄系统的空间感和真实感,基于Direct3D加载了三维天空和三维地面来丰富场景,并通过PlaySound函数添加了背景音效。此外,系统根据宣泄对象,设计了宣泄菜单,通过Kinect体感设备的手势识别来进行菜单选定[6]。
为了验证公式(13)中计算出的击打力F是否符合实际,进行了多次试验,实验数据和计算结果如表1所示。
表1 击打力的实验数据Tab 1 Experimental datas of punching force
实际中,普通人的击打力量为1 000~1 500 N,实验结果显示:虚拟系统中,击打力量在此范围内,满足系统要求,可以作为拳击训练的重要参考。
本文基于Direct3D图形绘制接口完成了场景、拳头模型和人偶模型的渲染、加载;利用Kinect体感设备获取人体关节点坐标信息,对虚拟拳头进行位置移动和姿态控制,并在人体作出击打动作后,计算出拳速和击打力量,进而控制人偶作出击打响应动作,仿照实物击打宣泄疗法,实现了虚拟心理宣泄系统。此系统开辟了体感应用的新领域,为心理宣泄疗法提供了一种全新的手段,也为拳击运动爱好者提供了新的体验平台。
[1] Abedan Kondori Farid,Shahrouz Yousefi,Li Haibo,et al.3D head pose estimation using the Kinect[C]∥International Confe-rence on Wireless Communications and Signal Processing:IEEE,2011:1-4.
[2] Biswas K K,Basu Saurav Kumar.Gesture recognition using Microsoft Kinect[C]∥Proceedings of the 5th International Confe-rence on Automation,Robotics and Applications:IEEE,2011:100-103.
[3] 林海波,梅为林,张 毅,等.基于Kinect骨骼信息的机械臂体感交互系统的设计[J].计算机应用与软件,2013,30(2):157-160,176.
[4] 颜 武,邓定华.游戏开发中基于Direct3D之3D模型运用[J].计算机与现代化,2006(7):90-94.
[5] 郑焕武.碰撞时间的定量计算[J].四川师范大学学报,2001,24(5):23-25.
[6] 罗 元,谢 彧,张 毅.基于Kinect传感器的智能轮椅手势控制系统的设计与实现[J].机器人,2012,34(1):110-113,119.
Implementation of psychological catharsis system based on Kinect somatosensory sensor
ZHAO Jian-min1, XU Xiao-wei1, JIA Hui-yuan2
(1.School of Information Engineering,Inner Mongolia University of Science and Technology,Baotou 014010,China; 2.Department of Student Affairs,Inner Mongolia University of Science and Technology,Baotou 014010,China)
Hitting catharsis is the primary means of psychological catharsis therapy.Based on Kinect somatosensory sensor and Direct3D graphics rendering programming interface,psychological catharsis system is designed and implemented.This system uses Kinect somato sensory sensor to collect coordinates information of joints of human body,to control virtual fist to hit virtual hitting objects,and to simulate real scene of boxing,in order to achieve psychological catharsis by hitting.Experimental results show that this system can not only achieve good psychological catharsis effect,but also can provide a new experience platform for fitness exercises,and at the same time,the impact force calculated can be used as an important reference of boxing training.
Direct3D; Kinect; sensor; psychological catharsis system; impact force
10.13873/J.1000—9787(2014)08—0119—04
2013—11—06
TP 311
A
1000—9787(2014)08—0119—04
赵建敏(1982-),男,内蒙古包头人,硕士,讲师,主要从事人机交互、控制模式识别研究。