多点触控手势识别算法的研究作者:方成艳孔伟青邓秀勤来源:《软件工程师》2014年第11期摘要:本文针对当下流行的多点触控设备,对多点触控手势识别算法进行了研究,通过类比计算机中的快捷键设计出了一系列的触控手势,并结合曲线识别算法提出了一种多点触控手势识别算法。
实验在当下流行的Android设备上进行,手势检测成功表明了识别算法的有效性。
关键词:多点触控;算法;手势识别中图分类号:TP391.4 文献标识码:A1 引言(Introduction)多点触控技术是一种全新的人机交互技术[1],相对于传统的单点触控技术而言,它能同时检测和识别多个触点的位置和数量,从而提供了功能更加丰富的交互技术[2]。
2007年,苹果公司的iPhone手机和微软公司的surface桌面式计算机两款新产品的发布,将多点触控技术引入主流消费品市场[2],让普通用户真正享受这一技术带来的便利。
2009年微软发布的操作系统Windows 7提供了对多点触控技术的支持,使多点触控进入人机交互新时代[3]。
2011年,搭载谷歌安卓系统的触屏手机进入了主流消费市场,在全球的市场份额首次超过塞班系统,多点触控技术成为主流的触控技术。
可以预见,在未来多点触控技术将逐步取代传统的键盘、鼠标,成为人机交互的主流技术。
但是,多点触控技术在国内发展的时间短,技术方案尚有欠缺,一些核心技术及专利屏障为多点触控技的进一步发展形成一定的阻碍。
触摸精度低,错误率高,手易疲劳性以及由于手势扩展麻烦等问题,这些都在一定程度上制约了基于多点触控的双手交互技术的发展[4]。
同时,针对移动设备触摸屏的多点触控手势识别算法十分匮乏,这严重的限制了多点操作的进一步应用。
本文针对多点触控技术中手势功能较少,借鉴计算机快捷键(Ctrl+A、Ctrl+V等),设计了一系列新的手势,并利用基于相对高度的曲线特征提取算法进行手势特征提取、识别,在移动设备触摸屏上实现了传统计算机中的相应的快捷键功能,帮助用户更好地从传统计算机到触控设备的过渡。
2 传统触控手势(Traditional touch gestures)目前的触控手势分为单点和多点两种,单点触摸手势主要有:单击(Tap)、双击(Double Tap)、拖拽(Drag)、轻弹(Fling)、按压(Press)等,多点触摸手势主要有:旋转(Rotate)、捏(Pinch)、展开(Spread)、按压并单击(Press and Tap)、按压并拖拽(Press and Drag),下表列出了这些手势的图示名称和动作描述[5]:表1 传统触控手势Tab.1 Traditional touch gestures从上表来看,相对于传统的单点触控技术而言,多点触控实现的功能更加丰富,但就目前情况而言,手势功能相对较少,并没有完全发挥多点触控的优势。
下一节中,本文将对计算机中使用频率较高的快捷键,设计新的触控手势,从而进一步丰富多点触控交互技术,帮助用户逐步摆脱对传统键盘、鼠标的依赖。
3 手势设计(Gesture design)3.1 计算机中快捷键用户在使用计算机过程中,不可避免地使用到快捷键,快捷键的使用使工作更加高效、快速、准确地完成,因此快捷键在办公、娱乐、文件管理等方面发挥着巨大作用。
计算机中的快捷键很多,且很多快捷键功能并不常用,表2中列出了Windows系统下几个使用频率较高的快捷键。
表2 Windows系统快捷键Tab.2 Shortcut keys in the windows system快捷键功能使用说明Ctrl+A 全选文档操作或文件管理中使用Ctrl+C 复制文档操作或文件管理中使用Ctrl+V 粘贴文档操作或文件管理中使用Ctrl+X 剪切文档操作或文件管理中使用Delete 删除文档操作或文件管理中使用Ctrl+Z 撤销文档操作中使用Ctrl+Y 恢复文档操作中使用Alt+F4 关闭当前窗口窗口界面中使用Ctrl+S 保存文档操作中使用Ctrl+N 新建文档操作中使用3.2 手势设计原则为了能更好地帮助用户进行人机交互,触控手势的设计应便于用户理解和使用,为此,设计时应遵循以下原则[6]:(1)直观性原则:所设计的手势应符合用户的直观印象,如对图片进行“展开(Spread)”操作表示对图片进行放大,对图片进行“捏(Pineh)”操作,表示对图片进行缩小。
(2)实用性原则:所设计的手势功能必须是用户使用频率最高、最常用的功能,以便用户更好地进行人机交互。
(3)简洁性原则:所设计的手势应尽量简洁,做到简单明了,设计的手势不涉及复杂的轨迹,以便用户快速地掌握并使用。
3.3 手势方案设计根据3.2中的原则,设计手势如表3所示。
表3 本文设计的手势Tab.3 The gestures designed in the pape考虑到快捷方式的使用频率,本文暂只设计以上几种手势。
4 手势识别算法设计(The design of the gesturerecognition algorithm)在触控设备中,所绘手势以二维点集的形式进入设备中,而多点触控手势则表现为多个点集,其中,i表示第i个触点,本文中i=1,2。
本文中,所设计的多点手势较为简单,识别时可分别对Ai代表的二维曲线进行识别,因此多点触控手势识别可看作多个单点触控手势识别。
特征提取算法多点触控手势分割成多个单点触控手势后,对于每个单点手势,本文采用基于相对高度的曲线特征提取算法[7]进行曲线特征提取,该算法描述如下:a.完整手势b.手势分割c.手势分割图1 手势分割Fig.1 Gesture segmentation(1)对于开曲线AB:第一步:求出离曲线的端点连线最远的点P和曲线的相对高度,并存放相对高度在二叉树的根节点。
第二步:不妨设曲线的起点为A、P分曲线为两段。
计算曲线AP的相对高度h1,并存放在相应左子树的根节点上。
计算曲线BP 的相对高度h2,存放在右子树根节点上。
第三步:if h1第四步:if h2(2)对于闭曲线,特征提取算法如下:第一步:初始化二叉树的根节点为0。
第二步:求出曲线的直径AB、左曲线和右曲线。
第三步:计算左曲线的相对高度,右曲线的相对高度,分别存放在左、右子树的节点。
左、右曲线的最高点分左、右曲线成4段。
第四步:对于每一段曲线,如果带有分割前曲线的起点,则相对高度放在其左子树的节点。
否则,存放在其右子树的节点。
如果相对高度小于某一常数,则终止这段曲线的分割。
否则,继续分割曲线,转第四步。
任何一条曲线,经过上述的曲线提取算法后都会转化为一棵二叉树。
二叉树的层数由事前设定的相对高度阈值const决定。
理论上,如果const取无穷小,那么曲线可以转化为一棵无穷大的二叉树。
为了进行比较的方便,按照完全二叉树的次序遍历节点。
对于空的节点,添补0。
5 实验及结果分析(Experiments and resultsanalysis)5.1 实验平台本实验基于Android平台,在Windows 7(64位)操作系统中,利用JDK+Eclipse+Android SDK搭建安卓开发环境。
(1)JDK:java程序的编译环境,包括java ME(移动版)、java SE(标准版)、javaEE (企业版)三个版本,没有jdk,java程序将无法进行编译。
本实验应用的是java SE,版本为1.7.0_52。
(2)Eclipse:著名的跨平台开源集成开发环境(IDE),最初主要用来进行Java语言开发(需要先装jdk),也可通过加入插件使其作为C++、Python、PHP等其他语言的开发工具(本实验中Android使用java语言开发)。
从2006年起,Eclipse基金会每年都会发布新版本的Eclipse,本文使用的是Eclipse 4.2。
(3)Android SDK:Android软件开发包,主要用于Android开发包的管理、Android虚拟设备的管理。
要运行Android SDK,需先安装JDK。
5.2 实验步骤实验平台搭建好后,接下来就开始进行实验。
一般情况下,Android软件可以在电脑上的模拟器中运行,也可以在实体机中运行。
但本实验中,由于涉及多点触控,而电脑鼠标只能输入单点,故本实验只能用支持多点触控的Android设备运行。
本实验中用到的是支持多点触控的Android 2.3.3设备。
本实验程序基于Android绘图功能,设计手势绘制界面,利用Android多点触控事件的支持,对触摸坐标进行记录,程序流程如图2所示。
图2 程序流程Fig.2 Experimental procedure程序界面:程序界面主要分为手势添加和手势识别。
添加手势:绘制需加入到手势库中的手势,经特征提取后,加入手势库。
手势识别:绘制需检测的手势。
算法处理:利用第4部分设计的算法对所绘手势进行处理。
进行识别:对所要识别的手势进行算法处理后,搜索手势库进行匹配。
5.3 识别流程本实验中,识别分为三步:触点采集、特征提取、手势识别。
(1)触点采集:此过程主要是得到触点集。
本实验中,利用Androi系统中提供的多点触摸事件处理函数onTouchEvent对触摸事件进行监测,利用getX()和getY()方法得到触摸点坐标。
(2)特征提取:此过程主要是利用第4部分提出的基于相对高度的曲线特征提取算法对手势进行特征提取,提取后的将相应的手势特征存储到手势库中。
(3)手势识别:此过程主要是对所绘手势进行特征提到后,与手势库中的手势进行匹配,若匹配成功,则输出相应的手势名称,否则匹配失败,程序结束。
图3 手势识别算法流程Fig.3 The process of gesture recognition algorithm5.4 结果分析程序总界面如图4所示,此时手势库中无任何手势。
点击“添加手势”按钮则进入手势添加界面(图5),图6中手势已经加入了手势库中,从理论上讲,加入到手势库中的手势并无数量限制。
点击“识别”按钮,程序则进入手势识别界面(图7)。
图4 程序开始界面图Fig.4 Beginning gestures图5 手势添加界面图Fig.5 Adding gestures图6 手势添加完成图Fig.6 Added gestures图7 识别手势绘制Fig.7 The drawing of recognizing gesture识别时,将所要进行识别的手势绘制在手势识别区域即可,手势识别结果如图8所示。
图8 手势识别效果图Fig.8 The effect drawing of gesture recognizing由以上检测可知,成功检测了在手势库中所增加的五种手势。
6 结论(Conclusion)当今社会技术日新月异,多点触控技术越来越受到关注,传统的计算机设备正在逐步被新技术所取代,因此应充分发挥多点触控技术以便更好地服务人类,是当前多点触控发展趋势。