浏览器手势识别原理

x33g5p2x  于2022-05-28 转载在 其他  
字(1.3k)|赞(0)|评价(0)|浏览(365)

以下内容转自:
链接:https://www.zhihu.com/question/20607813/answer/1396981185
来源:知乎
 

Stroke 是作者的一款开源鼠标手势,支持复杂手势。

对于这个问题,我觉得可以细分为这样两个子问题:

  1. 如何表示数据。
  2. 如何度量相似度

对于问题一,需要将用户划出的手势表示出来,同样的图形但大小不同应该识别成同一手势。我认为用一组单位向量是比较合适的。在 Stroke 的代码中,总是将用户划出的手势图形平分成 128 个向量,再将每个向量转换为单位向量(由于计算效率的原因实际上使用的是 127 倍的单位向量)。这样一来,无论用户划出的手势长或短、大或小,只要它们在结构上是一样的,那么表示它们的数据也是一样的。例如下图两种情况:

对于问题二,要比较单位向量的相似度,最自然想到的是使用余弦相似度来度量。即计算两个向量的余弦值,比较两组数据的每个相对应的向量,将它们产生的这 128 个余弦值累加起来,最终得到的结果应该会在 [-128, 128] 之间,数值越大表示越相似。此时,我们只需要设定一个阈值,超过这个阈值就认为匹配上了,若存在多个匹配成功的结果,则取最大值的即可。

关于具体实现,请点击以下链接:

https://github.com/poerin/Stroke/blob/master/Stroke/Gesture.cs​github.com/poerin/Stroke/blob/master/Stroke/Gesture.cs

以下内容转自:

浏览器鼠标手势原理简析 - 走看看

浏览器市场百家争鸣、百花齐放,每款浏览器都有自己的特色和亮点,但是基本功能都相差不大,其中一个比较通用的功能就是浏览器的鼠标手势,而且鼠标手势一般由8个中的两个或多个组成。例如淘宝浏览器的【回底部】是由组成,【刷新】是由组成。

鼠标手势在很多浏览器都有广泛使用,有浏览器自带的,可以直接使用,如360浏览器、sogou浏览器,也有需要用户安装扩展才能用的,如Chrome、Opera。鼠标手势之所以得到广大用户的亲睐,与其简单、作用范围广、功能常用有很大的关系。但是很少人知道鼠标手势的鼻祖是Opera浏览器。

那么鼠标手势是怎么实现的呢,从表现上看貌似很复杂,但是原理并不是想象的那么难。鼠标手势玩的就是算法,建立弧度向量表,根据鼠标轨迹的点计算方向,然后与预定义的鼠标手势进行对比,取出最相似的一组。这几个步骤当中都要用到不同的算法。首先是弧度向量表,以八个方向()的向量划分弧度,并按一定的精度建立一个弧度向量表。这还不够,在现实使用中,往往鼠标轨迹和定义的不是完全匹配,例如画直线可能会有点弯曲,斜向上的角度不一定正好是45度,当然这些问题都可以通过精度修正来解决,换句话说,就是允许有一定的误差。

VN:F [1.9.10_1130]

please wait...

Rating: 9.0/10 (2 votes cast)

浏览器鼠标手势原理简析, 9.0 out of 10 based on 2 ratings 转载务必注明出处Taobao QA Team,原文地址:http://qa.taobao.com/?p=15578

相关文章