2.3 ⼿势识别
NUI 的挑战:“Simple is hard.Easy is harder.Invisible is hardest.”——Jean-LouisGassée
2.3.1 ⼿势的图形⽤户界⾯
未来的⼈机交互将是⾃然⽤户界⾯(Natural User Interface),当然这个界⾯还很模糊。随着便宜⼜可靠的多点触摸硬件的不断发展,平博·(pinnacle)体育平台官方网站相信,在不久的未来,多点触摸设备不仅仅是在实验室⾥了,⽽是遍布在学习室,绘图室甚⾄是厨房⾥,⽆限可能。
⿏标和图形⽤户界⾯⼀直是电脑可以在社会上⼤规模普及的重要原因。然⽽,传统的⼈机交互是间接的和需要识别的⼀种⽅法。建⽴在多点触摸上的⼈机⾃然交互是直观的,流畅的和令⼈回味的。基于⼿势的GUI 界⾯将进⼀步使计算机成为平博·(pinnacle)体育平台官方网站⽣活中的不可或缺的⼀部分。
从⼴义上说,“⼿势的概念涵盖很⼴泛,只要是为了让交流的⽬的更明确,更引⼊瞩⽬⽽采⽤的⼀切⾝体动作,都可以称作⼿势。”通过⼿势交流是⼈类发展历程中最古⽼的形式,当然,这超出了平博·(pinnacle)体育平台官方网站的讨论范围。GUI 系统是利⽤⼈们以往的阅历和认知来熟悉应⽤程序,⽽NUI 的界⾯充分利⽤了⼈们的设想和合乎情理的结论从⽽提出了⼀个直观的、基于⼿势的内容界⾯。这样⼀个基于⼿势的界⾯是社会化,任务协作,以及艺术性触摸的最佳候选⽅案。这个界⾯是符合⾃然规律的、更直观的⽤户界⾯。
然⽽,现在多点触摸硬件上所使⽤的⼿势是很少的,仍然存在很⼤的发展空间,当然也少不了继续探寻⼀些⼿势的可应⽤性。多点触摸界⾯需要⼀个全新的⽅案,⽽不是⽤GUI 或者WIMP 的⽅法来实现它。⼿势的类型决定了不管是多触摸⽤户还是单触摸多⽤户都能进⾏互动。平博·(pinnacle)体育平台官方网站将讨论需要的新⼿势,发展⼿势识别模块和⽀持框架能够充分利⽤多点触摸设备的潜⼒,⽀持可定制开发和易于使⽤的复杂的多点触摸应⽤。
2.3.2 ⼿势Widgets
NUI 的多点触摸⽅案提供了⼀套强⼤的⼿势界⾯平台,⽽且是基于对象的(⽽不是WIMP),从⽽消除了现实世界与应⽤程序之间的抽象化。界⾯的⽬的在于让⼈们能够直接操纵、更好的沉浸式体验和容纳界⾯上的低精度操作。流⾏的⼿势诸如⽤两个⼿指将图⽚缩放、旋转,这被称之为“操控⼿势”,也是⾃然⼿势的⼀个很好的例⼦。
图1:多点触摸程序中的⼿势范例
新类型的⼿势widgets[图2]对对象的直接操控要有⼀个全⾯的概念(在NUI的概念中,⼀切都是对象),有⼀个流畅且具有唤起性(evocative)的环境,不仅仅是模拟⿏标。
图2
Gesture Widgets 应该具有创造性思维,能够存储⽤户的反馈并进⾏处理。那么这些Gesture Widgets 就可以被扩展来设计开发更复杂的应⽤,它们还应该⽀持⾃定义⼿势。
2.3.3 ⼿势识别
⼿势识别研究的主要⽬的是建⽴⼀个能够识别⼈的特定的⼿势然后发送这些信息或者直接控制设备的系统。为了确保能够⽐较准确的识别⼿势和呈现⼀个直观的界⾯,在这个系统模型上会做⼀些限制。多点触摸设备应该提供⼀个以上的⽤户独⽴⼯作或者协同⼯作的能⼒,然后让多点触摸应⽤和多种多点触摸设置模式在⼀起⼯作。
图3:⼿势⽰例
⼿势(Gesture)⼀词被定义为起点和终点在⼀个范围内,⽽且在两点之间有动作。在多点触摸输⼊的时候,系统应该能够识别在空间和时间内有意义的⼿势。⼿势识别程序可分为三个渐进的过程。
检测意图:⼿势仅需要在⽤户操控应⽤程序窗⼝的时候解析,X 延展输⼊协议以及即将到来的X12 会通过X 服务器来担当继续地转述触摸事件的责任,通过软件的执⾏正确地反馈给应⽤界⾯。
⼿势区分:在同⼀个应⽤程序操作触摸事件的时候会有同样的⼀套动作,因此,触摸事件需要基于对象意向情况下被重新定义,这些被重新定义的数据会被发送给⼿势识别模块。
⼿势分类:⼿势识别模块会将被定义的数据映射到相对应的命令中,这会有各种⼿势识别能够⽤到,可以是单独的或者像Markov Models, Artifcial NeuralNetworks, Finite State Machine 等那样整合起来的。
其中最重要的技术是隐形马尔科夫模型(Hidden Markov Models,HMM)。它是根据历史数据,预测等时间间隔点上的各类对象分布状况。此⽅法的基本思想是根据过去对象变动的规律,推测未来对象变动的趋势。
⼀个仿真的神经⽹络(artificial neural network,ANN),通常只叫做NN(neuralnetwork),它是⼀个建⽴在⽣物神经⽹络理论上的计算机模型[图4],它在多变的环境中⾮常灵活。新的⽅法可以同时使⽤HMM 和较为常见的ANN 来识别对象。
⼿势识别模块还应提供联机和脱机识别功能,以及shot 和progressive 的⼿势。依照现在的观点,可以表⽰为:
图4:在离线模式下,触点追踪和⼿势识别的框架
从客户端架构分离的⼿势识别模块本⾝就可以构成MVC 架构,这样有助于稍后讲到的语⾳识别模块和其它的⼿势识别模块以适当的形式映射到界⾯控制器,然后更新视图和模型,使之成为更强⼤的界⾯。
2.3.4 开发框架
现在有⼀些框架已经发布了,它们正在制定帮助多点触摸应⽤发展的触摸事件界⾯管理⽅式。然⽽,现在设备输⼊管理的⽅式仍然是抽象的,触摸事件通过TUIO 发送(TUIO 是不考虑底层硬件的)。⽽⼿势识别能真正地挖掘多点触摸界⾯的潜⼒,这也是客户端的任务。现在⼀些通常的⼿势,特别是那些操控图⽚的⼿势已经出现了。这些框架不是侧重于⼿势界⾯,它们更侧重于发展多点触摸环境的GUI 和WIMP 的标准接⼝。
⼿势和⼿势识别模块随着NUI 界⾯的推出已经有了长⾜的发展。⼀些重要的框架有:
Sparsh-UI
Sparsh-UI 是⼀个发布在LGPL 许可证下的多点触摸⼿势识别框架,貌似也是第⼀个关于⼿势识别的框架。它可以连接各种硬件设备,并且可以跨平台使⽤,同时⽀持不同的编程语⾔和UI 框架。触摸信息从连接装置捕获之后会进⾏⼿势的处理和识别,每⼀个在客户端的可视化组件都可以被“联想”成⼀组特定的⼿势,然后试图去识别它。新的⼿势和识别算法可以添加到包中设为默认。
Gesture Definition Markup Language
GDML 是基于XML 的⼀种⽤来说明在输⼊界⾯上如何建⽴清晰的⼿势事件的标记语⾔。通过XML 来描述⼿势的状态,同时⽀持在指定的基础上创造新的⼿势,这也就是说,⼿势引擎⽀持⾃定义的⼿势。
这个项⽬设想成两部分:
描述⼀个标准的⼿势库(Gesturelib)来满⾜⼤部分应⽤的需要。
类库代码⽀持已经既定的⼿势,并且可以将⼿势事件发送给应⽤层。
Grafiti
Grafiti 是⼀个建⽴在TUIO 客户端上的C#框架,可以⽤来管理桌上界⾯多点触摸的交互⾏为,也⽀持⼀些既定的有形物体的触摸。这个项⽬的⽬的是⽀持使⽤第三⽅模块来加强(专业)⼿势识别算法。当然,⼀些基本的⼿势已经包含在⾥⾯了。
NUIFrame
NUIFrame 是⼀个基于上述讨论模式的C++框架(⽬前正在开发中)。它提供了⼀个单独的⼿势识别模块,除了处理⼀连串触摸事件之外,NUIFrame 也提供了客户端程序。这就可以确保不同的对象在使⽤相同⼿势的时候,可以根据背景做出不同的运算。它还将⽀持基于⽤户特定的规格来⾃定义⼿势。这套⼿势⼯具⽀持图形化的⾃动调试所⽣成的⼿势。
AME Patterns Library
AME Patterns Library 是⼀个新的C++模式识别库,⽬前的重点是实时⼿势识别(real-time gesture recognition)。它使⽤基于概念的程序设计来表达通⽤的⼿势识别算法。这个库最近作为AMELiA (the Arts, Media and Engineering LibraryAssortment,⼀个开源的库集)的⼀部分发布在了GNU 通⽤公共许可证下。它同时实现了两个多点触摸识别的隐形马尔科夫模型,同时减少了⼀些参数模型,简化需求条件,改进了运⾏时间性能,同时保持了良好的识别效果。
这⾥也有⼿势识别软件在准确性和实⽤性上存在的挑战:
⼿势识别中的图形噪声
不同的⼈在同⼀⼿势上存在差异
在给定的区域⾥找到普遍性的⼿势⽽不是去绘制难以记忆的⼿势
包容⼿势的可变性和复制性
慎重考虑与GUI 系统相⽐有冲突的地⽅
Distinguishing intentional gestures from unintentional postural adjustmentsknown as the gesture saliency problem.
悬空⼿臂式操作(gorilla arm):⼈类并不习惯于在操控⾏为的时候将⼿举在前⾯,在通过⼀段时间的操控后,⼿臂回变得酸痛、局促、浮肿等,就像⼀只⼤猩猩⼀样在触摸屏上操作着。尽管短时间的操控没有什么问题,但从1980 年早期开始将垂直式触摸屏作为主流输⼊技术,却阻碍了发展。
可以进⼀步改善NUI 界⾯,⽐如在⼿势识别模块上加⼊压⼒感应,语⾳输⼊,⾯部识别等。