魏为民, 孙 易, 孔志伟
(上海电力学院 计算机科学与技术学院, 上海 200090)
人体学输入设备轨迹识别与功能增强
魏为民, 孙易, 孔志伟
(上海电力学院 计算机科学与技术学院, 上海200090)
随着机器学习技术在轨迹识别中的广泛应用,提出了一种基于人工神经网络的浏览器鼠标手势扩展算法.该算法通过对轨迹进行分类并与动作建立映射来实现鼠标手势功能,可有效地识别各种复杂的轨迹并准确执行相应的动作.实验结果表明,该方法明显提高了用户的操作体验.
鼠标手势; 机器学习; BP神经网络; 浏览器扩展程序
随着图形化界面技术的不断发展,人们已经越来越依赖于使用鼠标、触控板等人体学输入设备来控制计算机.而目前的图形化界面设计存在一些问题,大部分控件都处于屏幕的边缘,每次操作控件都会分散用户的注意力.对此可采用一种称之为鼠标手势的方法,[1]用户只要在正文内容区域按住鼠标并拖动,绘出特定的轨迹,程序会自动识别出轨迹对应的动作,并执行这个动作,无需操作者过多的注意和思考.
在现有的鼠标手势程序中,主要使用方向向量轨迹识别法,即识别轨迹中的上下左右4个分量.这样的识别方法会损失轨迹的大量特征,甚至会发生误判.例如,矩形手势和逆时针的圆形手势均会被识别为“左—下—右—上”4个方向向量,这直接导致了程序识别率低和不良的用户交互体验.人工神经网络是目前较为流行的一种机器学习方法,在众多领域中都得到了广泛的应用.[2]与方向向量识别法相比,神经网络不依赖于上下左右4个简单的方向分量,而是将构成轨迹的一组向量视为一个整体,自动学习训练样本中的规律,排除噪声干扰并将学习结果推广到没有学习过的轨迹上.[3]因此,相较于传统的方向向量轨迹识别法,神经网络对于轨迹识别具有较强的自适应和自学习能力.但神经网络需要先训练再使用,并且训练结果存在一定的不稳定性,所以不能在手势识别程序中单独使用.因此,本文提出一种将神经网络与方向向量相结合的识别方法.该方法使用神经网络作为主要识别引擎,当神经网络没有准备好或者识别失败时,转为使用方向向量识别法进行简单识别,以保证程序能够正常运行,弥补两种方法各自的缺陷.
1.1系统框架
鼠标手势扩展程序的主要工作流程如下:根据存储的轨迹训练神经网络,学习轨迹特征;捕获鼠标事件记录轨迹,处理轨迹,将轨迹分别送入方向向量引擎与神经网络引擎中,根据两者的计算结果执行对应的预定动作,如图1所示.
图1 工作流程示意
作为一个鼠标手势扩展程序,其核心功能是识别并执行手势对应的动作,围绕这一核心功能,可以进行修饰和增强,以提高实用性.例如可增加以下功能:
(1) 任意添加、修改、删除手势,并为不同目标上的相同手势指定不同的功能,当出现手势冲突时,需要给出提示并引导用户解决冲突;
(2) 提供特殊手势的支持,例如提供滚轮手势的支持;
(3) 选择触发轨迹绘制的按键;
(4) 临时禁用鼠标手势;
(5) 选择鼠标手势轨迹的颜色;
(6) 为不同的用户提供不同的配置文件,配置文件之间必须相互独立,可以随意启停;
(7) 提供更加美观的交互界面,便于与用户进行交互.
为此,要求所实现的扩展程序能对用户输入的手势轨迹进行记录,提取代表轨迹的特征点.同时,要求能对已记录的手势轨迹进行训练,保证神经网络处于最新的状态.另外,扩展程序需要有一个良好的图形用户界面,让用户能够管理手势轨迹,了解神经网络学习进度.扩展程序还需要一个手势识别引擎,对用户输入的手势轨迹使用两种不同算法进行判定,确定并执行对应的预置动作.
1.2识别引擎设计
1.2.1轨迹压缩算法
轨迹压缩算法是完成神经网络识别的必要条件.其作用是将组成一段轨迹的数目不定的点压缩到一个恒定的数目N,在压缩的同时要尽可能地保留轨迹的特征以便于准确识别.同时,算法还需有较快的运行速度,以保证能够提供良好的用户体验.算法具体描述如下.
(1) 如果捕获到的轨迹中包含少于N个点,则向轨迹中最长向量的中点添加一个点.重复这一过程,直到新的轨迹中的点数达到N为止.
(2) 如果捕获到的轨迹中包含了数目大于2N个的点,则将这些点两两分组,取每组的中点连接成新的轨迹.重复这一过程,直到新的轨迹中的点数少于2N为止.
(3) 如果捕获到的轨迹中包含的点数介于N和2N之间,则取轨迹中长度最短的向量,删除向量的一端使其和相邻的向量融合成一个较短一点的向量.重复这一过程,直到新的轨迹中点数达到N为止.
在实际应用中,捕获的轨迹中的点数往往都非常多,文献[4]中所提到的方法每次只能压缩一个点,而本文提出的方法预先对大量的点进行了快速处理,在保留轨迹特征的同时提高了速度.
1.2.2神经网络引擎算法
(1)
取Pjmax所对应的预定义手势轨迹,即为最相似的手势轨迹.
图2 BP神经网络引擎结构
构造神经网络时,确定隐藏层的神经元个数的公式为:
(2)
式中:nh——隐藏层神经元的个数;
ni——输入层神经元的个数;
no——输出层神经元的个数;
a——0~10之间的常数.[5]
由于输出层神经元的个数不确定,因此隐藏层的神经元个数也需要做动态调整.
神经网络在使用前需要进行学习和训练,误差反向传播(Error Back Propagation,BP)算法是一种较为成熟的训练方法,即数据被送入网络后,输出的结果将与预期结果相比较,根据误差调整输出层的权重;再根据隐藏层误差调整隐藏层权重;这样完成一轮反向传播,重复这个过程,最后结果的误差平方和(Sum of the Squared Errors,SSE)小于一定的值,即可认为神经网络已经准备完成,可以投入应用.
由于用于训练的数据较为单一,而神经网络对单一数据的归纳推广能力有限,容易造成学习效果不佳.因此,每个轨迹都会被多次送入神经网络,每次被送入网络学习前,都需要添加噪声.[6]添加噪声的方法是对组成轨迹的每一个向量随机添加-1°到1°的偏转,使之与其他轨迹略有不同,采用这样的数据进行训练可以提高神经网络的归纳推广能力.训练过程中,选用的输出层误差计算公式为:[4]
(3)
式中:Ek——输出层第k个神经细胞的误差值;
tk——输出层第k个神经细胞的实际输出;
ok——输出层第k个神经细胞的期望输出值.
输出层第k个神经细胞与隐藏层第j个神经细胞连接的权重调整公式为:
(4)
式中:wjk——隐藏层第j个神经细胞与输出层第k个神经细胞相连接的权值;
oj——隐藏层第j个神经细胞的输出值;
L——神经网络的学习率.
在经典的BP神经网络算法中,学习率一般是固定值.在其他条件相同的情况下,学习率越高,网络的训练时间越短,但学习效果也会相应变差.由于学习率在整个训练过程中不会改变,其值在选择不当时可能会导致整个网络收敛过慢或者发生震荡.为了达到较好的学习效果,有时可以选用自适应学习率以进行动态调整,此时L的调整公式为:[7]
(5)
式中:Lm,Lm-1——本次和上一次迭代计算使用的学习率;
Lm+1——下一次迭代计算要用到的学习率;
Em,Em-1——本次和上一次迭代计算的误差平方和.
当Em
训练中选用的隐藏层误差计算公式为:[4]
(6)
式中:Ej——隐藏层第j个神经细胞的误差值.
隐藏层第j个神经细胞与输入层第i个神经细胞连接的权重调整公式为:[4]
(7)
式中:m——动量值,一般为0.9;
ΔWij——本次迭代中连接隐藏层第j个神经元和输入层第i个神经元的权重与上一次迭代中相同位置上权重的差值.
在式(7)中使用了动量对神经网络进行优化.在训练过程中,使用动量可以尽可能地避免神经网络陷入局部最优解,改善神经网络的收敛性.
1.2.3方向向量识别引擎算法
在传统的鼠标手势软件中,识别模块的核心就是方向向量识别引擎.在本文所实现的鼠标手势软件中,方向向量识别引擎将与神经网络引擎一起协同工作,保证识别的准确程度和可靠程度.方向向量的识别流程如图3所示.
图3 方向向量识别引擎识别流程
当用户的鼠标产生拖动事件时,会通知方向向量识别引擎,方向向量识别引擎会根据此次拖动所产生的方向向量将拖动方向判定为上、下、左、右中的一种,分别用U,D,L,R 4个英文字母表示.在下一次收到拖动事件时,同样也会判定出一个方向,如果拖动方向没有发生改变,则不增加新的方向,否则将增加新的方向.方向识别出的结果以Trie树(前缀树)的形式存储在对象中,这样的存储可以加快搜索速度,也可以降低空间占用率.图4为存储方向信息的前缀树示例,方向字符串“UDR”对应了命令A,“UDL”对应命令B,“ULD”对应命令C,“UL”对应命令D.可以看到,通过前缀树进行查找可以大大缩短查找时间,也更为直观.
图4 Trie树存储手势命令示例
1.2.4双引擎结果选择
从神经网络引擎和方向向量引擎中送出的结果不一定会相同,在这种情况下,就需要有一种方法对两个不同的结果进行选择.本文采用如下方法进行选择.
(1) 若神经网络输出的最佳匹配率低于阈值u,代表神经网络无法确定是否与已知轨迹高度相似,因此回退(fallback)到使用方向向量引擎的判别结果.若方向向量引擎也无法判别,则认为该手势不存在.
(2) 若神经网络输出的最佳匹配率高于阈值u,且与第二佳匹配率之差小于v,代表神经网络认为有多个已知轨迹与输入轨迹相似,无法确定应该选择哪一个,因此回退到使用方向向量引擎的判别结果.若方向向量引擎也无法判别,则认为该手势不存在.
(3) 若神经网络输出的最佳匹配率高于阈值u,且与第二佳匹配率之差大于v,说明神经网络能够确定输入轨迹与某个已知轨迹极为相似,因此使用神经网络引擎输出的判别结果.
2.1操作界面轨迹捕获逻辑设计
鼠标手势程序的另一个重点是捕获鼠标绘制的轨迹,只有捕获了绘制的轨迹,才可以让识别引擎对轨迹进行分类与识别.由于现代浏览器并未提供特殊拖动事件应用程序编程接口(Application Programming Interface,API),[8]本文实现的鼠标手势扩展程序是基于网页中的DOM鼠标事件来捕获轨迹的,这就需要程序自行处理拖动事件.本文采用有限状态机(Finite-state machine)来处理拖动事件,有限状态机处理捕获逻辑示意图如图5所示.
图5 有限状态机处理捕获逻辑示意
该状态机有4个状态:Free,Pushed,Ready,Working,通过DOM鼠标事件在不同状态间进行转移.使用有限状态机可以使代码的逻辑结构变得清晰,提高代码的可读性和可维护性.当触发预料之外的事件或转移到不正确的状态时,可以直接通过清除和复位状态来重置有限状态机,提高程序的可靠性.该有限状态机代码如下:
switch currentStatus
case"free":
if eventType =="mousedown" then
注册鼠标事件到本函数并初始化
状态机
将状态转移到pushed
case "pushed":
switch eventType:
case"mouseup":将状态转移到free
case"mousemove":将状态转移到ready
case"mousewheel":识别滚轮手势并执行动作
case"ready":
switch eventType:
case"mousemove":
在移动一段距离后转移到working状态
case "mouseup":将状态转移到free
case "working":
switch eventType:
case"mousemove":收集数据并绘制轨迹
case"mouseup":
调用识别引擎识别轨迹并执行相应的动作
将状态转移到free
其中,currentStatus代表有限状态机当前的状态,eventType代表DOM鼠标事件的类型.在程序初始化时,需要将鼠标事件绑定到这个函数上.当鼠标事件被触发时,通过对不同状态下不同的事件类型进行判断,便可执行与其对应的动作.同时,可以通过改变currentStatus的值在各状态之间进行转移.
2.2鼠标手势动作实现
在对轨迹进行识别后,需要执行与轨迹相对应的动作.在传统的鼠标手势程序中,一般通过在页面上运行JavaScript代码来执行动作.这样的设计存在一定的局限性,例如,由于DOM和BOM本身的局限性,只能执行较为简单的操作,对于一些涉及浏览器本身的操作就无能为力.同时出于安全方面的考虑,浏览器对运行在页面上下文环境中的JavaScript程序做了许多限制,无形中更加弱化了传统鼠标手势程序能够提供的功能.
为此,可使用在现代浏览器中专为扩展程序设计的API.以Google Chrome浏览器为例,其为扩展程序提供了一个安全可靠的JavaScript运行环境,该环境与常规页面中的脚本运行环境完全隔离,程序可以在其中调用chrome.*API家族提供的超过50种API来执行包括操作窗口和标签页内容、显示桌面通知、改变浏览器设置和外观,以及在用户授权的情况下录制屏幕内容、访问并操作浏览器书签和历史记录等实用功能,[8]这些都是传统的鼠标手势程序所无法做到的.
在开发过程中,可根据业界惯例预置一部分通用手势,提供开箱即用的用户体验.同时程序也会附带大量的动作,用户可以在设置页面中创建手势到动作的映射,为不同手势赋予不同的动作.用户还可以自行为动作编写代码,达到完全自定义动作的目的.此外,由于Google Chrome提供了扩展间通讯功能,因此手势可以执行的动作并不局限在本程序可以提供的功能内,还能够扩展到其他符合标准的通讯接口的扩展程序上,极大地丰富了程序可以使用的动作,提升了用户的交互体验.
在本实验中,依据本文所提出的方法对常见的6种轨迹进行识别,具体如图6所示.网络的具体参数如下:输入神经元个数ni为32,输出神经元个数no为6,隐藏层神经元个数nh为13,学习率L固定为0.1,动量值m为0.9,误差平方和(SSE)门限为0.001,采用sigmoid函数作为神经元的激励函数.阈值u为0.9,阈值v为0.1,噪声添加次数为每个向量500次.
图6 用于测试的6种鼠标手势轨迹
在实验前,为每个手势轨迹采集了101个样本,将其中的一个样本送入鼠标手势引擎中进行训练,剩下的作为待测样本进行测试,结果如表1所示,其中所有数据均为百分制的准确率.
表1 鼠标手势引擎识别准确率 %
由表1可以看到,在较为复杂的手势上,神经网络有着较高的识别率,五角星手势的识别率可以达到92%.但在其他手势上的表现就比较一般,L形手势甚至出现了因为误判而降低综合识别率的问题.这与本次实验所选用的阈值比较高有很大的关系,因为较高的阈值可以有效降低神经网络出现错判的可能,但也会大大降低神经网络的总体识别率,考虑到鼠标手势程序“宁可漏识别也不可错误识别”的需求,在选择阈值时选择较高的阈值,无法识别的部分将由方向向量引擎进行补充识别.方向向量引擎在简单的手势识别上有着极高的识别率,最简单的向右手势可以达到100%的识别.但是方向向量引擎在复杂手势的识别上表现非常差,在普通手势的识别上的表现也较一般,出现了不少的误判,总体表现不如神经网络引擎.在将两个引擎结合以后,综合识别率较业界通用的方向向量识别方法大幅提高.
本文详细介绍了为提高用户交互体验而制作的鼠标手势扩展程序的现状,提出了一种神经网络引擎与方向向量引擎相结合的鼠标手势扩展识别方法.基于该研究方案,阐述了扩展程序的需求分析、概要设计、详细设计等关键环节.测试结果表明,扩展程序的稳定性、轨迹的压缩方法、采用的识别策略都有明显提升.本文所实现的扩展程序功能目前已较为完善,可以日常使用.
[1]刘子慧,陈硕.鼠标手势的工效学研究进展[J].人类工效学,2009,15(1):53-55.
[2]刘天白,张舒白.机器学习技术在游戏中的应用研究——解决鼠标轨迹识别问题[J].电脑知识与技术,2011,7(13):3 100-3 102.
[3]成功.基于智能算法的鼠标手势识别的应用研究[D].大连:大连海事大学计算机科学与技术学院,2013.
[4]布克兰德.游戏编程中的人工智能技术[M].吴祖增,沙鹰,译.北京:清华大学出版社,2006:37-53.
[5]林梅燕.基于神经网络运动轨迹识别系统[D].福州:福建师范大学,2010.
[6]陈喆,周雷.基于BP 神经网络的鼠标轨迹识别技术[J].电脑知识与技术,2013(1):130-132.
[7]唐艳,付存君,魏建新.基于自适应学习速率的改进BP神经网络[J].计算机光盘软件与应用,2012(4):48-49.
[8]Chromium Authors.Google Chrome Extensions Development Documentation[CP/OL].[2014-05-20]https://developer.chrome.com/extensions.
(编辑桂金星)
Enhancing Human Input Device Features Based on Orbit Recognition
WEI Weimin, SUN Yi, KONG Zhiwei
(School of Computer Science and Technology, Shanghai University of Electric Power, Shanghai200090, China)
With machine learning technology widely used in the orbit recognition,a browser mouse gestures extension based on an artificial neural network is presented.The extension implements mouse gestures function by classifying and mapping orbits.Experimental results show that the extension can effectively identify a variety of complex orbits and execute the appropriate instructions,and can significantly improve the user experience.
mouse gestures; machine learning; BP neural network; browser extension
10.3969/j.issn.1006-4729.2016.03.015
2015-05-16
简介:魏为民(1970-),男,博士,副教授,湖北蒲圻人.主要研究方向为图像处理,数字取证,信息隐藏和工业控制信息安全.E-mail:wwm@shiep.edu.cn.
上海市自然科学基金(11ZR1414300); 上海市教育委员会科研创新项目(11YZ194).
TP391.412
A
1006-4729(2016)03-0277-06