手势识别相关实现思路简谈

手势识别(Gesture Recognition)是一个很有趣的东西,是手势操作(Gesture Operation)的核心部分。

手势操作常见的应用场景就是我们平时在使用浏览器浏览网页或使用触摸设备上的APP时,通过简单易懂的手势来简化复杂的操作。例如画一个对勾“√”新建一个页面,画一个错叉“×”关闭一个页面,属于新一代的人机交互方式之一。

从技术原理上来讲,手势其实是一系列的点的集合,以链表或数组的形式存储在计算机中。手势识别则主要是通过算法将这一系列的采集到的点与预留的手势数据进行匹配。怎样在保证容差不能过大的情况下提高匹配率则是手势识别算法中的难点。(既不能把a识别成o,也不能将o和O识别成不同手势)而要实现上述目标,多用到计算机视觉和图像处理中的一个概念:特征提取。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。

到这里你会发现,其实就是计算机视觉和图象处理领域主题之一的图像匹配(Registration)。
前人已经在这个主题上探索了无数种方法,相关的Paper也是多得看不过来。(详情可查看维基百科:计算机视觉各主题列表
其中,研究得比较多的是边缘检测(Edge detection)、凸包(Convex hull)和广义霍夫变换(Hough transform),多用来对几何图形进行快速匹配。

边缘检测、凸包和广义霍夫变换都不是我们今天要讨论的东西,因为任何一个都可以写成好几篇Paper,合集出书了,改天再另开文章好好聊一聊。但是别误会,这几个任何一个都是可以很好的完成手势识别的需求的,或者说它们能做的远远不止这个。杀鸡焉用牛刀,我们只要做手势识别,用比较简单易用的算法就好了。

现有的手势软件(桌面程序,移动APP或浏览器插件),多用弧度向量表来识别手势轨迹,也是匹配特征值(弧度向量)的思维。
建立弧度向量表,根据手势轨迹的点计算方向,然后与预定义的手势轨迹进行对比匹配,取出最相似的一组。

1.首先是弧度向量表,以八个方向的向量划分弧度,并按一定的精度建立一个弧度向量表,用0-7表示8个方向,-1表示“.”。
如下图:
VList
2.根据这个向量表建立手势数据。例如:A可以表示为71 ; B可以表示为260123401234。
VListSample

是不是看起来特别简单?没错,思路很简单,将这个思路代码实现,然后再有针对的做进一步的优化。
有没有高端点的?那肯定有啊,上Paper!

2012年9月,发表在第29卷第9期《计算机应用研究》(ApplicationResearchof Computers, Vol.29 No.9, Sep.2012)上的一篇
《基于Kinect深度图像信息的手势轨迹识别及应用》(Gesture track recognition based on Kinect depth image information and its applications, ZHANGYi,ZHANGShuo,LUOYuan,XUXiao-dong)研究了动态手势轨迹特征选择和提取。
摘引如下:

动态手势不同于静态手势,因为静态手势仅仅是空间位置和形态上的变化,而动态手势同时涉及到时间及空间上的变化。实验表明,人的运动可以只通过运动信息来识别,因此手势可以转换为空间的运动轨迹来识别。
手势轨迹的基本特征是位置速度和角度对于速度而言,同一个手势差别也很大,因此不实用。手势轨迹曲线上点的坐标位置可以作为手势轨迹识别的显著特征,但如前所述,即使是相同的手势轨迹也会有出入,坐标点自然也会有变化。考虑使用手势轨迹不同时刻的切线角度变化作为轨迹特征。由Kinect传感器可获取t时刻和t-1时刻的手心位置(Xc^t,Yc^t)(Xc^t-1,Yc^t-1) ,通过式( 1) 可得出手势轨迹的角度φ^t。
faimath
根据所得角度,本文采用12方向链码进行离散化
faimathpic

如无注明,均为原创。转载请注明: 转载自MITGAI`S THINKING
本文链接地址: 手势识别相关实现思路简谈

知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

如果本文对您生活或工作产生了积极影响,那我非常高兴。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。
支付宝捐赠
anyShare分享到:

发表回复