王 涛
(西安航空学院 教务处,西安 710077)
新一代Kinect2.0体感设备的测量范围为0.5米至4.5米,可以同时追踪6个人,采集到每一个人25 个关节点,并存储这些点3D位置和方向,帧的采样频率为30fps,其感应器的彩色相机的增强特性包括1920×1080 高分辨率视频和更宽广的视野。本软件是在该设备的基础上结合微软MFC基类来开发,通过现场部署,使用效果非常完美[1]。
图1 系统的布置结构
运用投影仪将园林场景和人物抠像投射到墙面,使用kinect2.0传感器来采集人物的骨骼、彩色图像和深度图像的数据,并传送给C#程序,程序根据这些数据来判断是否存在游戏中设置的人物动作。当人物动作相符时,将人物动作和园林场景播放相关联,达到人和园林的体感交互,整个系统的布置结构如图1所示。
十九世纪近代园林体感互动分镜头分为三个版块:邱园、巴加特尔公园、纽约中央公园。游戏首先进入主题界面,在界面上会对三种园林和体感动作的操作展现说明。
当人们进入邱园,会出现以下场景:树叶摇动与光影变化;观众可以拨开树叶前行;观众可以给屏幕中的植物虚拟浇水。
当人们进入巴加特尔公园时,出现的场景有:花朵颤动,蝴蝶飞舞,道路多分岔形似迷宫;观众可以选择左中右三条不同的路线行走,观看不同的公园风貌。
当人们进入纽约中央公园时,有如下场景:树叶摇动,各种纽约中央公园的特色动物,例如雪豹在树林中跑跳;观众可以和公园里的小动物进行互动,如观众伸出手,雪豹就会慢慢走过来,摆摆头打招呼[2-3]。
本游戏主流程是其主线,启动游戏后,进入十九世纪近代园林主界面,当kinect检测到无人存在时(无人的条件为1分钟未检测到人),程序会随机切入三种园林其中一个进行漫游;当kinect检测到有人存在时(如果有人停留8秒以上就代表有人存在,最多同时识别6个人),程序返回园林主题界面。若人物做动作1(举起左手),可以选择任意主题园林;若人物做动作2(举起右手),可以进入当前选择的主题园林;若人物做动作3(抬起右手由胸前划过头顶,做拨开树叶动作),此时场景中的树枝被拨开;若人物做动作4(双手抬起做拿水壶浇水动作),出现水壶给植物浇水场景;若人物做动作5(招左手或右手),小动物会由远处跑到屏幕前并做各种亲昵的动作。整个游戏流程如图2所示。
图2游戏的流程图
本游戏开发中关键技术有:kinect2.0对人物5种动作的识别; WPF框架下对高清图片帧的播放(特别是如何实现大量的,且每张都在3M以上图片的流畅播放);如何实现前背景图片的播放问题。文中基于kinect2.0写的动作代码程序可以单独成为一个万能的模块,只需要增加新的动作识别函数和模拟键盘消息就可以体感控制windows上的所有应用程序[4]。
本程序为了玩家娱乐的体验度,在kinect 2.0识别方面,仅识别离kinect在空间位置上最近的一个。算法的逻辑为:kinect用一个字节表示当前深度坐标下该像素的人体编号,可同时识别6个人,每个人会给一个索引,在本程序中用UserId来表示每个人的索引,程序实时动态检测kinect识别所有人的骨骼数据,以脊柱中心spine_mid离kinect的远近作为衡量距离,程序会在首次找到离kinect最近的一个人,将其一直标记为唯一识别的人物,后续即使该人的坐标不是离kinect最近,其也是唯一识别的人,直到该人物的骨骼和红外数据在kinect检测中消失8秒,此时,kinect会重新由当前识别的人中找到离其最近的一个,然后进行标识。该功能的代码为: if (ThespecifiedIDdisappear==false){ float temp=10;for (int i=0;i float dis=body.Joints[JointType.SpineShoulder].Position.Z; if (dis>0){string sss=dis.ToString(); } if (dis 程序中先定义了一个枚举类型Gestures来表示所有的动作。 public enum Gestures{RaiseRightHand,RaiseL-eftHand,StretchedLeftHand,StretchedRightHand,StretchedBothHand,WaveLeftHand,WaveRightHand,ZhaoshouRight,Error,} 。用dosomthing(Body s)函数来实时检测人物所做的动作,由于kinect对人物数据的检测在每一个周期中实时进行,具体为30fps,为控制采样频率,后台开启一个进程private void openTmeWork(),用函数System.Threading.Thread.Sleep(10);//停毫秒调节动作识别的频率。由于动作较多,此处以给花浇水动作为例子,其代码为 :if ((leftshoulder.Z-leftHand.Z)>0.25 &&(rightshoulder.Z-rightHand.Z)>0.35 && (rightHand.Y-leftHand.Y)>0.25f){mygest=Gestures.StretchedLeftHand; System.Windows.Forms.SendKeys.SendWait(“{DOWN}”); } ,以上代码中的数据10,0.25和0.35等都是经过多次测试得到的最佳值。 本游戏所提供的高清图片可体验真实园林场景,其分辨率为3072×768,每张图片大小为3.2M左右,并且图片渲染时需要含有3D效果,每个园林漫游时间为3分钟,每分钟30帧,所有园林共15000多张图片。数量多和尺寸大的图片如何在电脑CPU和显卡不是很高的情况下流畅运行,本文采用一种优化机制,即在内存中仅放一张图片,当调用下一张图片时清空当前图片,然后载入下一张图片。为快速载入图片,本程序建立一个bmList001链表来加载图片的名称,实现为:bmList001=new ObservableCollection BitmapImage bmImg=new BitmapImage(new Uri(bmList00[index001])); this.img1.Source=bmImg;this.img1.Width=3072;this.img1.Height=768;GC.Collect(); index001++;} isRendering=false;} } } 程序中为模仿园林中拨动树叶,小松鼠的移动,浇水等逼真的效果,专门定义了一个卡通类SpiritGame,用来实现卡通的显示、消失、移动、调用、坐标位置,快慢播放的控制等[5],其功能函数有: SpiritGameX(), SpiritGameY(),SpiritWindowX(), SpiritWindowY(),void InitPlayer(), diaoyongplayer(),xiaoshiplayer(),dispatcherTimer_Tick(object sender,EventArgs e)//卡通帧的显示等。 该游戏运行的设备配置和参数如下:①计算机:win10,64位处理器,i7 6700k以上,USB 3.0总线,8GB 内存以上,DX11图形适配器,320G硬盘;②投影机:4500流明,标准分辨率:1920X1080dpi,投影画面尺寸:80-300英寸,色彩:1670万色;③二代Kinect for Windows v2和 Kinect SDK 2.0;④其他:包括USB 3.0信号放大器、室外屏蔽线等。 表1 测试结果统计 对该游戏进行24小时运行测试,功能正常无宕机。 游戏由主题界面(见图3)和三个园林组成,三个园林分别是“邱园” “巴加特尔公园” “纽约中央公园”,效果如图4、图5、图6所示。 图3十九世纪近代园林体感游戏主题界面 图4 邱园 图5 巴加特尔公园 图6 纽约中央公园 现场如何部署“近代园林体感”游戏?具体分为四个步骤:①安装VS2012环境,目的是方便调试;②安装Kinect for Windows SDK v2.0,该安装包可以到微软官网下载,网址为http://www.microsoft.com/en-us/download/details.aspx?id=44561;③安装SDK Browser v2.0,Visual Gesture builder-PREIEW,kinect for windows Documentation;④安装时间延时应用startup-delayer-v3.0b363.exe,放置该游戏“DiscreteGestureBasics-WPF.exe” 到硬盘任意位置,生成快捷方式,并将其添加到startup-delayer中设置延时为20秒。 目前,除了体感设备外,以虚拟现实Virtual Reality眼镜(HTC Vive)为代表的Virtual Reality已经兴起,它和U3D结合开发虚拟现实的游戏,或者由VR眼镜、U3D和kinect 三者相结合开发的虚拟现实游戏是未来几年的重头戏,由于目前技术和硬件成本方面的原因导致此类游戏还不是很普及。对于迫切想开发和体验Virtual Reality的人们,可购买比较便宜的暴风魔镜,在其基础上进行二次开发Virtual Reality游戏是一种简单、便利的探索。 [1] 王涛.人机交互多媒体教学系统浅析[J].西安航空学院学报,2015,33(1):43-44. [2] 王涛,高贤强.基于U3D和kinect1.0月光下舞蹈互动游戏的设计与实现[J].西安航空学院学报,2017,35(1):68-72. [3] 刘佳,郑勇,张小瑞,等.基于Kinect的手势跟踪概述[J].计算机应用研究,2015,32(7):1921-1925. [4] 王康.融合深度传感数据体感交互建模与算法实现[D].济南:山东大学,2016. [5] 李建微,陈新,黄调祥,等.可扩展的MMORPC游戏框架的设计与实现[J].计算机技术与发展,2012,22(2):1-5.3.2 基于WPF的kinect2.0体感识别程序
3.3 WPF框架下处理高清图片帧流畅播放技术
3.4 卡通帧移动相关技术
4 搭建环境所需设备和游戏测试结果
4.1 游戏运行的设备配置和技术参数
4.2 游戏测试的结果
4.3 游戏的相关截图
4.4 项目现场实施
5 结语