浏览器手势识别原理

举报
风吹稻花香 发表于 2022/05/28 22:15:24 2022/05/28
【摘要】 以下内容转自: 链接:https://www.zhihu.com/question/20607813/answer/1396981185 来源:知乎   Stroke 是作者的一款开源鼠标手势,支持复杂手势。 对于这个问题,我觉得可以细分为这样两个子问题: 如何表示数据。如何度量相似度。 对于问题一,需要将用户划出的...

以下内容转自:
链接: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

文章来源: blog.csdn.net,作者:AI视觉网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/125013618

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。