Kinect与Unity3D数据整合技术在体感游戏中的应用研究
2023-04-20
来源:好走旅游网
第27卷第11期 电脑开发与应用 (总0823) ・7・ 文章编号:1003—5850(2014)11-0007—05 Kinect与Unity3D数据整合技术在体感游戏中的应用研究 刘晋钢 ,刘卫斌 ,刘晋霞 (1.太原工业学院计算机工程系,太原030008;2.太原科技大学经济与管理学院,太原030024) 摘要:通过分析Kinect与Unity3D数据整合关键技术,从WPF与Unity 3D内部调用方式展开系统设计。设计分 为Unity3D场景展示模块、Unity3D的接口模块和Kineet的数据获取三模块。其中Unity3D接口模块实现了的场景设 置,骨骼绑定、镜像运动、近景模式、平滑处理功能;Kinect数据获取模块通过代码实现设备控制、骨骼绑定算法、设备图 像获取。测试证明,通过c#对非托管的du的管理方式,导入Kinect硬件的驱动程序,调用自定义的数据结构和算法, 实现在unity 3D场景中,使用Kinect体感镜头控制场景中的人物模型运动,提高了体感游戏的开发效率,在体感游戏的 开发和应用中有一定的社会推广价值。 关键词:Kinect,Unity3D,体感游戏 中图分类号:TP391.41 文献标识码:A Application Research of Somatosensory Game Basesd on Kinect and Unity3D Data Integration Technology LIU Jin-gang’,LIU Wei-bin ,LIU Jin-xia (j.Department of Computer Engineering,Taiyuan Institute of Technology,Taiyuan 030008,China 2.School ofEconomics and Management School ofTaiyuan University ofScience and Technology,Taiyuan 030024,China) Abstract:This paper analyzes data integration technology about Kinect and Unity3D.Authors design scheme based on WPF and Unity 3D internal calling mode.System includes screen show module,Unity3D and Kinect interface module and data acquisition module.There are scene settings,rigging,mirroring sports, close—range model,smoothing processing and other functions in Unity3D;and codes implement the device control。rigging algorithm。equipment image acquisition in Kinect.Tested by C#on unmanaged dll S management,it is a good scheme to import Kinect hardware driver program and calling a custom data structures and algorithms to achieve the unity 3D scene.In the unity 3D scene,Kinect somatosensory camera control motion of models to improve the development eficifency of somatosensory game,which has certain social value in development and application of somatosensory game. Key words:Kinect,Unity3D,somatosensory game 的一面,在这些游戏中,多数的设计需要游戏者沉溺 其中,并投入很多时间和金钱,这在很大程度上影响 近年来,游戏在大众娱乐中所占的比例越来越 大,市场调查发现,手机游戏占有很大部分,其次是电 了游戏者的正常生活和身体健康,所以利弊掺半的手 机游戏设计和开发是很多人所反对的。随着科技进 脑中的网络游戏和单机游戏。然而,这些游戏在创造 了很多经济价值和社会价值的同时也出现很多不利 步,人机交互的发展向着多元化多功能的方向,比如 语音识别,手势识别等更加接近人的自然行为会成为 ,lc 收稿日期:2014—09一I1,修回日期:2014—10—14 % 基金项目:国家自然科学基金资助项目:基于视觉认知的三维模型重建(61379080) 作者简介:刘晋钢,女,1975年生,副教授,硕士,研究方向:人工智能。 Kinect与Unity3D数据整合技术在体感游戏中的应用研究 2014年第1 1期 未来游戏发展的方向。在微软发布了,基于Xbox的 Kinect2.0以后,体感也开始悄悄的成熟起来,Kinect 更多的被人们所关注,也更多的被人们所认识。 Kinect彻底颠覆了游戏的单一操作,使人机互动的理 念更加彻底的展现出来…。微软的Kineet不需要使用 任何控制器,它依靠相机捕捉三维空间中玩家的运 动,操作简单吸引大众,还能辨识人脸,让玩家自动连 上游戏,辨认声音、接受命令。 但是,作为游戏机的Xbox至今无法在中国以合 法的途径进人市场,这使得很多开发者放弃对于微软 KinectforXbox的开发。然而,在微软2011年宣布, Kinect SDK For Windows,并同步销售基于Window的 硬件时,游戏开发者已感知到一种新型的人机交互的 方式将要兴起。从发布到现今,在很多展会上都出现 了基于Kinect的体感游戏,对于消费者视觉上产生了 很大的冲击。目前,在体感应用软件的开发上,主流开 发工具可分为两类。第一类是建立在二维平面上的, 它主要是基于微软的WPF和WinForm;第二类是建 立在三维立体上的,开发者最为熟悉的是Unity3D游 戏开发工具,它的编辑器可运行在Windows和Mac OS X平台下,其开发的游戏可发布至Windows、Mac、 iPhone和Android平台,也可利用Unity web player插 件发布网页及手机游戏,支持网页浏览[21。 在Kinect应用和体感游戏的开发过程中,存在 着开发效率低下的问题,故此本项目的主要工作是 让Kinect SDK与Unity 3D相结合,利用体感镜头,控 制人物模型运动,大幅提高游戏开发效率,降低开发 成本 1 关键技术 1.1 Kinect与Unity3D集成原理 Kinect的设计思想是将人视为控制器。在 Kinect For Windows面世后,基于它的游戏和应用在 发布会上出现,已引起人们广泛关注。人们体会到自 然交互语言的强大震撼力。随着游戏的升级,高效的 游戏开发工具也成为开发者的期盼,而Unity3D高效 率的开发模块、强大的渲染效果和可扩展的能力,使 Unity3D赢得了开发者的亲睐,在2012年成为最受 欢迎的游戏开发引擎,尤其在处理三维场景的编辑 和交互方面,使用基于脚本的开发方式简单又方便。 但是Unity3D这种高效开发和体感硬件Kinect并不 兼容。因为Kinect SDK对开发者开放的接口调用方 式有两种,一种是基于c++的头文件和静态链接库 的方式,另一种是程序集的方式网,这两种方式在 Unity3D中均无法直接调用。幸好,在c#Mono平台 中提供与非托管程序的使用方式,导入Dll文件,用 户可通过自定义数据结构和算法,能够实现对 Kinect中获得的数据重新组织,就可在Unity 3D中 使用。 1.2 WPF开发流程 Kinect是微软在2010年6月14日对XBOX360 体感周边外设正式发布的名字,它是一种3D体感摄 影机,同时导人了即时动态捕捉、影像辨识、麦克风 输入、语音辨识、社群互动等功能。 Windows Presentation Foundation(WPF)是Mi— crosoft在.NET 3.0中推出的一个重要新特性,为 Windows下应用程序开发提供一套全新的显示系统, 旨在为用户提供方便的用户操作和震撼视觉体验的 界面。WPF支持一套完整的应用程序开发功能,包括 应用程序开发模型、资源、控件、图形、动画、布局、数 据绑定、文档读写、本地化、安全性等。它非常适合 Windows平台的软件应用的开发和图形交互的展现。 WPF的核心是一个与分辨率无关的基于向量的呈现 引擎,可充分发挥现代图形设备的优势,WPF开发和 c#集成可以通过Visual Studio 2008实现应用程序的 开发。由于WPF和公共语言运行环境(CLR)的完全 集成,充分利用了CLR提供的类型安全、跨平台等特 性。WPF的运行机制中,PresentationFramework和 PresentationCore都是基于CLR之上,以托管代码的 方式公开应用程序开发接口(API)_4l。Milcore位于 CLR之下,是以非托管代码方式,直接和DirectX紧 密集成,可以利用DirectX在图形处理上的技术及性 能优势,从而为用户提供良好的用户体验。Milcore是 WPF隐藏于CLR之下的核心驱动组件,在实际应用 程序开发中不允许直接访问。 1.3 Unity3D的内部调用方式 Unity3D是由Unity Technologies开发的一个让玩 家轻松创建诸如三维视频游戏、建筑可视化、实时三 维动画等类型互动内容的多平台的综合型游戏开发 工具,其内部调用结构如图1所示。 Unity项目中的MONO还能够实现在Windows 下开发应用程序,尽管无法直接调用微软的托管的 SDK,但是,它提供了调用非托管的动态链接库的接 口方式,获得数据,实现调用。 。10 (  ̄0826) Kinect与Unity3D数据整合技术在体感游戏中的应用研究 2014年第1 1期 乎同时出现复制的不随意运动,在绑定人物之后模型 的运动是否与实际的镜像的运动方式相符,如果不相 符,则向相反方向运动。 在创建骨骼关节置换,需要指定关节索引号用来 编辑不同的关节。 在骨骼映射的时候,对应的骨骼索引实现动态的 变化,需要变量来判断,设置bool型变量Mirrored— Movement,采用三目运算返回索引号。(!Mirrored— Movement 8:12)不同的索引号,对应不同的部位。 2.2.3近景模式 在Kinect for Windows SDK 1.0以上版本中,近景 模式下Kinect可以“坐”(seated)或“1O个关节点” (10-joints)模式骨骼跟踪,只跟踪上半身的头部、颈 部、肩膀、手臂等l0个关节点。在人体骨骼绑定时, 站与坐绑定关节数不同,如图4所示。 图4 人体骨骼站与坐绑定关节数 定义“数据结构”如下: public enum NuiImageStreamFlags f N0ne=0x000O00OqSupressNoFrameData=0x0001000, EnableNearMode=OxO0020000.TooFarlsNonZero=OxO 004000;} 在API中显示调用语句如下: if(isNearMode) {KinectWrapper.NuiImageStreamSetImageFrameFlags(depth- StreamHaudle,NuilmageStreamFlags.EnableNearMode);} 其中NuiImagestreamSetImageFrameFlags()完成 对于获得数据帧的类型选择,当选择近景模式的时 候,设备启动近景模式,只识别近景模式下的对应骨 骼,从而使得测试者可以在镜头前坐着实现绑定。 2.2.4平滑处理 平滑处理可使得骨骼的旋转自如,防止出现跳跃 和瞬移的效果,在骨骼旋转算法中实现。 首先,声明TransformSmoothParameters变量,为 平滑算法的参数赋值,方法如下: TransformSmoothParameters smoothParameters; smoothParameters.Smoothing=0.5f;设置骨骼数据 帧时的平滑量,接受一个0~1的浮点值,值越大,平 滑的越多。0表示不进行平滑。 接下来,用平滑处理,方法如下: boneTransform.rotation=Quaternion.Slerp (boneTrans ̄rm.rotation,newRotation,,Time.deltaTime Smooth Factor); 2.3 Kinect数据读取模块 Kineet数据的读取主要分为设备控制、骨骼绑定、 设备图像获取3个部分。 2.3.1设备控制 对设备的控制主要体现在:启动设备及初始化、 相机角度调节、关闭设备。 因为在Unity3D内部不支持微软的SDK,导入 Kinect硬件的驱动程序,故对设备进行控制的代码 如下: [DUImp0rtAttribute(@”KinectlO.dll”,EntryPoint=”Nuilni— tialize”)】 public static extem int NuiInitialize(NuiInitializeFlags dwFlags); [DllImp0rtAttribute(@”Kinect10.dll”,EntryPoint=”NuiShut— down”)] public static extern void NuiShutdown(); 【DlⅡmp0nAttrihute(@”Kinectl0.dll”,EntryPoint=”NuiCam— eraElevationSetAngle”)] public static extern int NuiCameraSetAn e(10ng angle); 2.3.2骨骼绑定 对骨骼绑定的方法有:骨骼绑定控制、骨骼下一 帧获取,骨骼平滑映射,骨骼旋转计算。对骨骼绑定 代码如下: [DllImportAttribute (@”Kinectl0.dll”.EntryPoint= ”NuiSkeletonTrackingEnable”)] public static extern jnt NuiSkeletonTrackingEnable(IntP ̄ hNextFrameEvent,uint dwFlags); 【DlⅡmp0nAttribute (@”Kinectl0.dll”, EntryPoint = ”NuiSkeletonGetNextFrame”)] public static extern int NuiSkeletonGetNextFmme(uint dwMillisecondsToWait,ref NuiSkeletonFrame pSk- eletonFrame); 【DUImp0nAttribute (@”Kinectl0.dll”,EntryPoint=”Nu— iTransformSmooth”)] public static extern int NuiTransformSmooth(ref NuiSkeleton— Frame pSkeletonFrame,refNuiTransformSm— 第27卷第11期 电脑开发与应用 (总0827) ・11・ oothParameters pSmoothingParams); [Dlllmport(@”Kinectl0All”.EntryPoint=”NuiSkeletonCalcu- lateBoneOrientations”)】 public static extem int NuiSkeletonCalculateBoneOrientations (refNuiSkeletonData pSkeletonData,NuiSke- letonBoneOrientationpBoneOrientations); 2.3.3设备的图像获取 导人Kinect硬件的驱动程序,设备获取图像代 码如下: [Dl1Imp0nAttrihute(@”Kinect10.dll”,EntryPoint=”NuiIm- ageStreamOpen”)】 public static extem int NuilmageStreamOpen(NuilmageType elmageType, NuiImageRes0luti0n eResolution, uint dwlmage- FrameFlags——NotUsed,uint dwFrameLimit,IntPtr hNextFrameEvent, ref IntPtr phStreamHandle); 【DllImportAttribute(@”Kinectl0.dll”,EntryPoint=”NuiIm- ageStreamGetNextFrame”)】 public stmic extern int NuiImageStreamGet NextFrame(IntPtr phStreamHandle,uint dwMillisecondsToWait,ref IntPtr ppcImage— Frame); [DIlImp0nA£trihute(@”Kinect10.dll”,EntryPoint=”Nuilm- ageStreamReleaseFmme”)】 public static extem int NuiImageStreamReleaseFrame(IntPtr ph— StreamHandle,IntPtr ppclmageFrame); [DllImp0nAttribute(@”Kinect10.dll”,EntryPoint=”Nuilm- ageResolutionToSize”)] public static extern int NuiImageResolutionT0Size(NuiIm- ageResolution eResolution,out uint frameWidth,out uint frame— Height); 【DUImponAttribute(@”Kinectl0.dll”,EntryPoint=”NuiIm- ageStreamSetlmageFrameFlags”)】 public static extem int NuilmageStreamSetlmageFrameFlags (IntPtr phStreamHandle,NuiImageStreamFlags dvImageFrame- Flags);] 上述代码中,通过C#对非托管的Dll的管理方 式,获取了调用设备并获取数据的权限后,调用用户 自定义数据结构和算法对数据进行处理。 3 测试 3.1模块测试 对场景展示、接口模块、数据获取模块进行测试, 从数据的一致性、Debug、误差限3方面给出测试结 果,如表1所示。 3.2手势识别测试 手势识别是通过数学算法来识别人类手势。手 势识别可以来自人的身体各部位的运动,但通常情况 表1 模块测试结果 指脸部和手的动作。在鼠标、键盘和触控的时代,用 这种手势识别技术可以让你摆脱键盘和鼠标的空间 限制同。Kinect采集到的图像深度信息保存在一个二 维数组中。这个数组中的第一个元素表示手势位置 的深度,像素点对应的实际物体的点到Kinect的距 离,以米为单位【7J。可以利用Kinect采集的深度图像 做分割,限定深度范围,将该范围内的图像提取出来 。 使用此方法实现手势识别,可识别挥手和点击两种 操作。挥手时,是通过Kinect摄像头捕捉,点击通过 调用指令完成,手势识别参数值如表2所示。 表2手势识别参数值 3.3图像获取测试 彩色图像获取时,使用Unity3D内部纹理创建, 事先设定显示大小、控制显示方式,防止图像错位,通 过定义Kinect设备捕获的图片格式,作为传输的参 数,达到手动调整和控制的目的。彩色图像获取效果 如图5所示。 图5彩色图佝获取效果 4 结 论 在设计场景中实现设备的启动、数据读取、骨骼 绑定和彩色图像获取操作,模块间调用正常、数据读 取正确、传输稳定。在骨骼绑定前,通过彩色图像确 定用户的位置信息,在场景中的人物模型与检测骨 骼点的方块完全对应。 (下转第14页) ・l4・ (, ̄o83o) 激光报警器系统的设计与实现 2014年第1 1期 务业务的SIM卡,才能完成数据传输的任务。SIM卡 也叫用户识别卡,其中存储着用户的数据、鉴权方法 及密钥,供GSM系统对用户身份进行鉴别。同时,用 户通过它完成与系统的连接和信息的交换。 【4]赵 冲,代茗枢.基于GSM的防盗报警系统[J].西安:西安 科技大学学报,2006( ̄刊):22—25. [5】聂琼,张陈陈,宋博,等.一种家用防盗光电报警器的 设计fJ].Science&Technology Information,2013(13):23— 26. 4 结束语 本系统完成了电路的设计并结合硬件设计原理 对激光报警过程中的一些问题给出合理的实现方法。 设计均采用普通元器件,若选用抗干扰能力强、稳定 [6】黄世轩,郑8—11. 艺,李萍.基于GSM模块的智能防盗报警 系统的设计[J].China New Telecommunications,2013(15): 【7] Meehan Joanne,Muir Lindsey.SCM in Merseyside SMEs:Bene— ifts and barirers[J].TQM Journa1.2008. [8】Liu Lianda,Zhang You—tong,Liu Yong—Feng.ESC Testing Sy— stem Based on Virtual Instrument and Distributed Network[C]// 性好、精确度高的元器件其传输特性将会有很大改 善。激光报警系统借助SIM300 GSM/GPRS模块,通过 成熟可靠的GSM网络来实现远程报警功能,使用方 哈尔滨:2010 IEEE信息与自动化国际会议(ICIA 2010), 2010. 便、经济可靠,具有批量生产及推广的现实意义,尤其 [9】孙再信,迟崇巍,乔【10】李毅.基于CAN总线通信的远距离激 适合于家居环境报警系统,具有良好的应用前景。 参考文献: 光报警器的设计[J].ECDN,2010(1 1):56—58. 娜,牛晓飞.基于STM32的智能家居无线激光报警 敏.基于嵌入式的无线智能家居控 系统【D].宿州:宿州学院,2013. [11]李琮琮,张仁杰,袁制装置 无线电研究与开发,2009,28(10):41—43. [1】李桂平,黄有全.基于STC12C5A的多路检测智能防盗报 警器研究叭Electronic Design Engineering,2013,21(3): 89-91. 【12】许凯军,林国锡,侯北平.基于GPRS的智能家居安防系 统的设计 浙江科技学院学报,2010,22(1):27—30. [13]长涛,韩中华,张楠.基于GPRS的无线智能家居控 制系统方案『J1.电子产品世界,2008(4):113—115. 【14】许志飞,姚正林.基于ARM的远程视频监控系统的设计 [2】 邱文静.基于GSM短信息的家居设施遥控监测系统设计 【D].南京:南京理工大学,2012. [3】邹曙光.基于GSM网络的无线显示系统设计[J】.Modern ElectronicsTechnique,2011,34(17):34—36. 微计算机信息,2010,26(9):105—106. (上接第1l页) Kinect SDK存在内置的手势识别功能,设计中, 根据绑定的骨骼运动规则自定义手势识别。实现挥 手、点击两个动作。模块及手势识别扩展功能测试显 示时,数据传输和数据类型转换均在误差允许的范围 【3】吴国斌,李斌,阎骥洲.Kineet人机交互开发实践【M】.北 京.人民邮电出版社,2012:45—160. [4】 刘铁猛.深入浅出WPF[M].北京.中国水利水电出版社, 2010:48—52. 内,有较高的可用性和可扩展性。使用Unity3D专业 游戏引擎与Kinect数据对接准确,人机交互界面良 好,在用于体感游戏开发,可降低开发成本,具有一定 的社会推广价值。 参考文献: 【1]Ross A:Clark,Yong-Hao Pua.Validity of the Microsoft Kinect for Assessment of Postural Control[J].Gait&Posture,2012,36 (3):372—377. 【5】 蔡彦.3D游戏场景设计与底层技术研究【D】.上海:上海 交通大学,2008:200—3 10. [6】希拉里(Gast 6 n C.Hillar).C#并行编程高级教程:精通 NET 4 Parallel Extensions[M].北京:清华大学出版社,2012: 150—300. [7] 吴志达.一个基于Unity3t1游戏引擎的体感游戏研究与实 现[D】.广州:中山大学,2012. 【8] 林海波,梅为林,张毅,等.基于Kineet骨骼信息的机械 臂体感交互系统的设计与实现fJ].计算机应用与软件, 2013(2),157—160. 【2】Tilak Dutta.Evaluation of the Kinect sensor ofr 3-D kinematic measurement in the workplace[J].Applied Ergonomics,201 1,43 (4):645—649. 【9] 张毅:张烁,罗元,等.基于Kinect深度图像信息 的手势轨迹识别及应用lJ1.计算机应用研究,2012(9): 3547—3550.