基于手势动作识别的地图浏览
2014-12-14阳梦珂周小梅何明涛
姚 欣,阳梦珂,周小梅,高 然,何明涛,应 申
(武汉大学 资源与环境科学学院,湖北 武汉430079)
传统的地图浏览方式通过对鼠标和键盘的操作来进行,通常是一个人讲解,一个人通过电脑进行系统操作,对地图的公众讲解有所限制。讲解者和参观者不能有效地与展品互动。新兴的体感技术使得人们直接使用肢体动作,身临其境地与机器或者环境互动。如果能够建立一个使用体感系统操作的地图平台,解放鼠标与键盘输入对人机交互的束缚,探寻体感姿态与动作对地图浏览操作的适用性则会更加容易。
与传统的鼠标、键盘等人机交互设备不同,用户借助Kinect用身体动作就可以直接控制计算机,Kinect很可能和键盘鼠标成为新一代标准人机交互设备[1]。而Kinect与电子地图的结合,将带来全新的地图浏览体验。
1 技术路线
基于人体手势动作的地图浏览可以划分为两个模块:地图平台和地图浏览的内核操作;人体手势识别需要两者的关联和链接(见图1)。第一步,同时进行地图浏览系统的搭建与体感系统的姿态动作定义。地图浏览系统,主要实现缩放与平移功能,并根据现有的鼠标或键盘操作方式,建立一个全屏地图场景漫游系统;体感系统则是设计对应的操作手势,并提供识别功能,Kinect提供的 Windows SDK可实现在Windows平台下获取操作者肢体动作。第二步,将两系统对接,结合人体行为和习惯认知,用手势动作来实现对GIS地图浏览的操作,整体技术路线如图1所示。
图1 技术路线
2 交互设计
2.1 手势设计
手势是指人手或者手臂结合产生的各种姿势或者动作[2],是一种表达思想或感情的肢体运动。手势识别是通过计算机设备对人的手势进行精确解释,已成为当前人机交互的一种重要手段,这种方式是非接触性的、自然的交互,相比传统的键盘鼠标等具有自然简洁和丰富性等特点,是人机交互发展的趋势[3]。
作为新一代的人机交互工具,Kinect提供了骨架跟踪系统,通过侦测到的3D深度图像,通过机器学习的方式,可以很好地识别人体的躯干、四肢以及手指等动作。其核心算法就是探测识别双手在空间中的运动,如在Kinect里,为模拟鼠标点击的下压按钮动作,使用手向前推的手势来模拟[4]。按照这种思路,本文使用了全身6个骨骼点,包括头、手、肘、肩、髋、膝,总共定义了8个基本的地图浏览手势,包括4个平移,2个缩放,以及图层切换、缩放至全地图4个平移手势,两个缩放手势,以及图层切换、缩放至全地图等手势(见图2)。具体描述如下:
1)上移:两手臂同时在胸前抬升;
2)下移:保持两手臂竖直,同时向后摆动;
3)左移:右手臂向左挥动;
4)右移:左手臂向右挥动;
5)放大:两手平推向肩外侧;
6)缩小:两手掌靠近;
7)图层切换:任意一手抬升至头顶;
8)缩放至全地图:左或者右膝盖抬高。
与键盘、鼠标相比,频繁地使用肢体动作进行控制操作更易让人感到疲惫,因此手势设计充分考虑了简单、高效的原则,尽量减小肢体运动距离,并且符合人的一般认知习惯。
2.2 手势识别
由于Kinect可以利用它的景深摄像头提供深度图像,其中的像素记录了场景中各点的校准深度,分辨率达到几厘米。这种深度摄像机可以很好地消除背景噪音,提取出人的信息。本文利用Microsoft Kinect提供的 Windows SDK v1.8建立对应的操作手势来搭建体感系统,从而实现在 Windows平台下获取操作者肢体动作。
当Kinect的位置确定后,人的肢体的每个关节便对应有一个空间坐标(x,y,z),并随关节位置的变化而改变。通过比较各个节点的3个方向的坐标值,便可以判断它们的位置关系,从而对不同手势进行判别。根据前述手势设计,对其动作的判断规则如下:
图2 手势的设计和约定
1)上移:右手在右肩前,并且左手臂高于左手手肘,右手臂高于右手手肘。
2)下移:右手低于右肩,并且左右手同时在臀部后。
3)左移:左手低于左肩,并且右手在髋部中心左侧。
4)右移:右手低于右肩,并且左手在髋部中心右侧。
5)放大:右手高于右手手肘,并且右手在右肩右侧,左手在左肩左侧。
6)缩小:右手高于右手手肘,并且左手高于左手手肘,左右手距离小于一定数值。
7)图层切换:右手高于头部,或者左手高于头部。
8)缩放至全地图:左膝高于右膝,或者右膝高于左膝。
对于每个手势相应设置了一个或多个位置参数,当两个关节的空间X,Y或Z方向上的距离在这个参数的限定范围内时,便会触发相应的事件。例如,在图层切换手势中,“右手高于头部”对应的条件语句为:
其中p为参数,值为0.2,是一个最佳测试值。
由于Kinect捕捉、处理的是肢体的瞬时位置信息,因此这种识别方式属于静态识别。
2.3 地图搭建
OpenLayers是一个用于开发网络地图客户端的JavaScript包,用于实现标准格式发布的地图数据访问,其实现访问地理空间数据的方法符合OGC(开放地理信息系统协会)标准[5-7]。
首先是创建地图并加载图层。在HTML文档的JavaScript模块中利用web地图服务请求返回相应的地图图层进行加载,本文选用的地图为必应虚拟地球(Bing Virtual Earth),图层包括卫星图层、道路图层、混合图层。
然后是实现对地图的控制,主要是通过调用OpenLayers.Map下的相关函数完成。Kinect中根据关节的节点坐标进行动作的识别,之后向地图浏览平台传递一个信号,JavaScript根据信号来调用相应的地图浏览控制函数。
3 系统实现和测试
本系统Kinect开发使用CJHJ语言生成控制台程序,地图搭建基于 OpenLayers 2.10,使用JavaScript编写html文档,借助Windows平台实现连接。通过基于手势动作识别,可以不使用任何鼠标、键盘工具,直接从Kinect接入OpenLayers地图,来实现地图的浏览。本文搭建的体感控制地图的平台,通过反复测试并不断改进代码,手势识别的正确率得以提高,用户友好度也得以加强。已有多名人员测试过本系统实现的体感地图控制,总体效果良好,能很快识别成功并进行地图浏览。测试发现人体与Kinect的最近有效距离为2m,在2~6m的范围内能够较好地完成地图控制。图3为部分测试照片,其中图3(a)为每个测试的初始地图状态,通过动作可以实现对地图的放大、左移和图层切换。
通常地图的浏览用鼠标和键盘交互实现;但是在基于手势动作的识别时,由于人体动作的连续性和先后性,动作和所想的浏览结果可能产生冲突,如“放大”时有胳膊的举起,人在执行时会附带有“上移”或“下移”的动作,引出在文中动作的设计和判断时必须准确地分类,并规定相关的参数,才能实现有效的动作和地图浏览的一致性。通常来说,对于这些动作需设置一个优先级来降低动作的误判,例如,要实现放大,首先必须满足右手高于右手手肘,然后才是外推动作的识别。
图3 实验测试
4 结 论
本文实现基于Kinect手势识别,搭建体感地图平台,以探索浏览地图的交互方式,是利用自然用户界面实现交互系统的初探。对手势动作的识别,精度和自由度是一个难点,文章限定了识别的距离才获得了比较良好的效果,在距离较近或者较远的时候误差就会很大。Kinect是下一代自然用户界面的一个缩影,基于Kinect等自然用户界面的人机交互设计可大幅度提高用户工作的能力和效率,成为当前桌面系统、移动终端后的另一种地图浏览方式。
[1]孙树森,马文娟,桂江生,等.基于Kinect的《互动应用开发》课 程 开 发 探 究 [J].中 国 校 外 教 育,2012(30):161,165.
[2]江立,阮秋琦.基于神经网络的手势识别技术研究[J].北京交通大学学报,2006,30(5):32-36.
[3]陶丽君,李翠华,张希婧,等.基于Kinect传感器深度信息的动态手势识别[J].厦门大学学报:自然科学版,2013,52(4):493-497.
[4]余涛.Kinect应用开发实战:用最自然的方式与机器对话[M].北京:机械工业出版社,2013.249.
[5]陈德鑫.基于OpenLayers客户端的网络地图实现技术框架[J].现代测绘,2010,33(3):48-49.
[6]冯骏,刘文兵,夏翔.Web2.0下网络地图的发展及存在问题探讨[J].测绘工程,2013,22(2):37-41.
[7]张志军,邱俊武,于忠海.通用地图符号表达机制的研究[J].测绘工程,2013,22(5):5-8.