基于Kinect的虚拟鼠标体感交互*
2015-01-01朱耀麟王晓雨
朱耀麟,王晓雨,汤 汶,武 桐
(西安工程大学 电子信息学院,西安710048)
人机交互技术是计算机用户界面设计中的重要内容之一.传统人机交互的交互过程多是用户通过键盘、鼠标等输入实现.在传统的人机交互系统中,人被认为是操作员,只是对机器进行操作,缺少真正的交互活动.近年来,随着计算机技术和人机交互技术的快速发展,人们开始注重对交互的参与性,传统的人机交互方式已经不能满足人们参与人机交互的需求.Kinect体感摄像头的不断推广,为自然人机交互提供了新方向,对未来人机交互方式发展有重要意义.
微软的Kinect不同于普通摄像头,它有感知世界的CMOS红外传感器[1].目前将Kinect应用到自然人机交互的研究有很多:文献[2]将Kinect设备应用到机器人控制方面,通过无线接口遥控机器人运动;文献[3]提出将Kinect体感设备应用到小学生教育方面,刺激学生对学习的反应,用以提高学生学习效果;文献[4]提出将Kinect设备应用于相机控制的方法;文献[5]提出将Kinect设备应用于实时三维重建方面;文献[6]采用Kinect深度传感器将人物手部从背景中分割,最终实现使用识别到的手势控制轮椅运动.文献[7]提出Kinect系统与iClone5的动作捕捉插件结合,将所捕捉的人物动作数据输入到Unity3D游戏引擎中进行游戏动画开发的方法;文献[8]提出在Unity3D中建立avatar系统绑定人物骨骼各节点,实现人体骨骼各关节点的动作追踪绑定,使与人体对应的物体作出同步节奏、一致动作的反应,将这种技术应用到人物动作游戏角色动画的制作中,极大的提高游戏制作的效率.
本文针对传统人机交互方式的不足,同时吸取新型设备和新方法的优势,采用相对廉价的Kinect体感设备以及将Kinect和Unity3D两大技术的强强联合的思路,提出在Unity3D平台上使用Kinect体感设备控制虚拟鼠标实现体感人机交互的方法.
1 系统框架流程
本系统使用微软公司推出的体感摄像机Kinect对人体进行追踪,获取人体骨骼点.Kinect是由微软公司2010年6月推出应用于Xbox 360和Xbox One主机的周边设备.它有三个镜头,中间是RGB摄像头,用来获取彩色图像,左侧是红外线发射器(Projector),右侧是红外线接收器(IR),红外发射器和红外接收器配合使用可以获取深度信息,用来检测玩家的相对位置,追踪人体骨骼.两侧是一组四元麦克风阵列,用于声源定位和语音识别,下方还有一个带内置马达的底座,可以调整设备俯仰角.Kinect系统[9]具有即时动态捕捉、影像识别、麦克风输入、语音识别等功能,不需要使用任何道具即可实现人体动作和人体骨骼的识别和捕捉,使玩家使用自己的肢体来控制应用,摆脱传统人机交互中鼠标、键盘、游戏手柄等的束缚.Kinect传感器和应用程序之间的数据传输要通过专门针对于Kinect的中间件来实现.针对于Kinect的中间件有两个,分别是不同公司发布的具有同样功能的中间件 OpenNI和 Kinext for Windows SDK,前者支持大多数操作系统,以C++编程语言为主,而 Kinect for Windows SDK 支 持 Windows 7/Windows 8操作系统,另外还支持虚拟机,以C#编程语言为主.两种中间件各有优势,可以根据个人实际情况取舍.本系统选用Kinect for Windows SDK,Kinect for Windows SDK 提供了非常尖端和复杂的软件库和工具,帮助开发者充分利用基于Kinect的自然输入、信息捕捉以及对真实世界事件的反应等特性进行开发工作.
本系统将Kinect体感器和Unity3D平台结合实现.首先Kinect体感器获取外界深度图像以及玩家骨骼信息,然后传递给Kinect for Windows SDK中间件,接着Unity3D应用从中间件中调用人体骨骼信息,最终根据人物动作实现一系列触发事件,系统框架如图1所示.
图1 系统框架图Fig.1 System Framework
事件触发控制过程:Unity3D应用读取中间件中右手骨骼点的位置和移动信息,将获取到的右手骨骼点与Unity3D场景中作为虚拟鼠标的GUITexture物体绑定,使虚拟鼠标物体跟随右手骨骼点的移动而移动,控制虚拟鼠标的按钮选择功能,控制过程如图2所示.
图2 系统实现过程Fig.2 System implementation process
由于Kinect系统中骨骼点的坐标与Unity3D场景中虚拟鼠标的坐标不同,右手骨骼点不能控制虚拟鼠标在整个电脑屏幕中移动,并且Unity3D引擎没有提供GUITexture物体与界面按钮的交互功能,因此将虚拟鼠标的移动范围映射到整个电脑屏幕和实现虚拟鼠标与界面按钮是本方法的重要研究内容.
2 系统实现
2.1 创建界面
SUnity3D游戏引擎有自带的原生UI用于制作界面,能够制作出丰富的界面,支持鼠标和键盘按键的按下、松开、和悬停的函数OnMouseDown()、OnMouseUp()、OnMouseUpEnter()等.但是原生UI源代码不可见,不易扩展.本文中使用NGUI插件来进行界面的制作.NGUI是严格遵循KISS原则并用C#编写的Unity插件,NGUI占资源少,编辑简单,特效功能丰富,按钮可以设计为各种形状和图式.本文中的UI界面有主界面和子界面.主场景使用Sunny1Skybox天空盒构成场景环境,创建一个山体平面.在主界面上有Scene1、Scene2、Scene3和Quit四个按钮主要实现场景选择功能和退出功能如图3所示.
图3 主界面Fig.3 Main interface
子 界 面上创建 Forward、Backward、Left、Right、Return和Quit六个按钮分别实现人物前后左右移动、返回主界面和退出功能,如图4所示.
图4 子界面Fig.4 Sub interface
NGUI使用自己独立的正交摄像机来渲染按钮和鼠标等界面元素,场景中还有一个透视摄像机用来渲染场景中的三维物体,此时有两个摄像机,为了使两个摄像机互不影响,NGUI的位置要放置在场景中透视摄像机的视角范围之外.
2.2 创建模拟鼠标
要实现人体与应用的自然交互,就不能依靠鼠标和键盘触发事件,需要创建一个物体作为虚拟鼠标.GUITexture物体属于场景中的2D元素,与UI界面一样使用的是屏幕坐标系[10],这样可以在按钮触发的过程中减少的坐标转换的过程.同时GUITexture物体的显示样式可以在通过设置物体组件中参数进行设置,这些参数也都可以在脚本中使用语句来动态的设置.因此选择创建一个GUITexture物体作为虚拟鼠标.在场景中创建一个边长为25像素的正方形GUITexture物体,设置透明颜色作为鼠标的正常状态,绿色表示鼠标的触发状态,可以明确的看出当前鼠标的状态.
2.3 确定鼠标范围
实际鼠标的移动范围是整个屏幕,因此需要将虚拟鼠标的移动范围映射到整个屏幕内,这也是文中提出的新方法的重点之一.确定一个控制鼠标的骨骼点,在本文中以右手骨骼点控制鼠标为例,使用其他骨骼点原理一样.Kinect追踪到的手的骨骼点在Unity中移动的范围很小,这个范围用手骨骼点绑定到模拟鼠标上运行场景得到.根据手骨骼点的移动范围建立一个虚拟的小屏(2D,屏幕坐标),长宽就是手在Unity中上下左右移动的最大距离,换算出虚拟小屏的X/Y轴与实际屏幕的X/Y轴的比例(可以把这个比例值考虑相应的稍微减小一些,以方便更加瘦小的人使用到全屏功能),根据虚拟屏幕与实际屏幕的比例,计算得到一个虚拟的扩大后的手的屏幕坐标,也就是整个屏幕,完成了把虚拟鼠标移动范围映射到整个电脑屏幕上的过程.在手的移动过程中,通过Kinect取得的手的坐标点是会不断抖动,模拟鼠标会在屏幕上不停抖动,因此要对鼠标的移动过程加入防抖.Unity3D脚本中的Update()函数是不断轮询的,在这个函数体内不断计算虚拟鼠标最新位置与上一帧鼠标位置相对值,使用Mathf.Lerp()方法使鼠标以一定的设定速度移动到最新位置.
2.4 鼠标触发判断
鼠标触发是新方法的另一个重点.因为文中的鼠标是虚拟鼠标,所以 OnMouseDown()、On-MouseUp()、OnMouseEnter()等一些 Unity3D游戏引擎自带的鼠标触发事件是没有作用的.本文提出使用射线触发的方式来实现按钮触发事件.虚拟鼠标在移动的过程中,不断从模拟鼠标位置向屏幕内发射射线,检测射线是否碰撞到物体,如果没有则返回继续下一轮的检测;如果有物体被碰触到,则判断碰撞物体是否是按钮,接着判断是哪个按钮,然后执行相应的触发事件,在本例中为加载场景,最终实现人体骨骼点控制虚拟鼠标与UI界面交互.
手在屏幕上运动过程中,可能会经过非目标按钮,为了避免误操作,在脚本程序中设置一个时间标志,只有虚拟鼠标在一个按钮上的停留时间超过时间标志规定的时间,才确定按钮被选中,模拟鼠标颜色才完全变为绿色,在这个过程中鼠标颜色从透明色到绿色渐变.
3 测试结果及分析
为了测试系统的可靠性以及响应时间,对系统进行一系列测试.软件开发及测试环境为WIN7+unity3D4.3+Kinect for Windows SDK 1.8.测试者选择首先主界面不同的按钮,选择按钮Scene1加载场景1,选择按钮Scene2加载场景2,选择按钮Scene3加载场景3,如图5~7所示,(由于黑白截图表现不明显,可以从场景背景纹理看出场景不同),在子界面选择按钮Forward、Backward、Left和Right可以控制游戏人物的前后左右移动,选择按钮Return则能成功返回主界面.经过多个测试者测试,系统能够快速准确的响应鼠标触发事件.测试结果表明,在Unity3D平台下结合Kinect实现人体作为控制器的自然交互方式突破传统的鼠标键盘交互,有很强的实用性和娱乐性,为未来人机交互提供了新思路.
图5 鼠标选择第一个按钮进入场景1Fig.5 The first button is selected
图6 鼠标选择第二个按钮进入场景2sFig.6 The second button is selected
图7 鼠标选择第三个按钮进入场景3Fig.7 The third button is selected
4 结 论
文中利用Kinect传感器的三个镜头获取图像数据,根据红外镜头获取的深度数据进行骨骼追踪获取特定骨骼点的位置,用人体具体骨骼点控制虚拟鼠标在电脑屏幕中移动并实现鼠标触发事件,进行场景切换.基于Kinect和Unity3D的人体骨骼控制虚拟鼠标的方法可适应于各个领域的人机交互,该方法能够实现体感交互,值得在体感应用开发中推广使用,如体感游戏,虚拟漫游等.
[1] 陈艳丽,金纪东,陈国涛,等.手部姿势与挥动速度识别的人机交互[J].电子测量与仪器学报,2014,28(1):56.CHEN Yan-li,JIN Ji-dong,CHEN Guo-tao,et al.Human-Computer Interaction of Hand Posture and Waving Speed Recognition[J].Journal of Electronic Measurement and Instrument,2014,28(1):56.(in Chinese)
[2] ZHANG Z.Microsoft Kinect Sensor and Its Effect[J].IEEE Transactions on Multimedia,2012,19(2):4.
[3] lOANNIS V,ATHANASIOS M,TASSOS A.Mikropoulos.Primary School Students’Attitude Towards Gesture Based Interaction[C]//2014IEEE 14th International Conference on Advanced Learning Technologies,2014:678.
[4] OCHI Y,TAKEDA Y.Development of a Camera Control System Using Human Gesture Recognition[C]//Proceeding of the International Multi Conference of Engineers and Computer Scientists,Hong Kong:2013.
[5] 陈晓明,蒋乐天,应忍冬,等.基于Kinect深度信息的实时三维重建和滤波算法研究[J].计算机应用研究,2013,30(4):1216.CHEN Xiao-ming,JIANG Le-tian,YING Ren-dong,et al.Research on 3DReconstruction and Filtering Algorithm Based on Depth Information of Kinect[J].Application Research of Computers,2013,30(4):1216.(in Chinese)
[6] 罗元,谢彧,张毅.基于Kinect传感器的智能轮椅手势控制系统的设计与实现[J].机器人,2012,34(1):110.LUO Yuan,XIE Yu,ZHANG Yi.Design and Implementation of a Gesture-Driven System for Intelligent Wheelchairs Based on the Kinect Sensor[J].Robot,2012,34(1):110.(in Chinese)
[7] 孙佳弘.Kinect系统在Unity3D游戏角色动画制作中的应用[J].电子技术与软件工程,2013(24):110.SUN Jia-hong.Application of Kinect System in the Unity3DGame Character Animation[J].Electronic Technology and Software Engineering,2013(24):110.(in Chinese)
[8] 乐小燕,代俊雅,郑海滨,等.Kinect与Unity结合的人体骨骼控制方法[J].信息与电脑.2013(07):28.LE Xiao-yan,DAI Jun-ya,ZHENG Hai-bin,et al.The Control Method of Human Skeleton Based on Kinect and Unity[J].Information and Computer,2013(7):28.(in Chinese)
[9] 王广军.基于运动捕捉数据的交互式智能控制与虚拟仿真[D].安庆:安庆师范学院,2013.WANG Guang-jun.Interactive Intelligent Control and Simulation Based on the Motion Capture Data[D].Anqing:Anqing Normal University,2013.(in Chinese)
[10] 张检阅.Unity3D3.X游戏开发经典教程[M].北京:科学出版社,2013.ZHANG Jian-yue.Unity 3.X Game Development Essentials[M].Beijing:Science Press,2013.(in Chinese)