手势识别调研(Gesture Recognition)

devxzh 于 2020-07-07 发布

发展现状

基于视觉的手势识别技术是人机交互的重要组成部分。在过去的几十年里,键盘和鼠标在人机交互中扮演着重要的角色。然而,由于硬件和软件的快速发展,需要新型的人机交互方法。特别是语音识别和手势识别技术在人机交互领域受到了广泛的关注。

从2014年VR/AR市场兴起之后,手势识别技术进入了大家的视野,国内外的初创公司和科技大佬都在手势交互上展开了行动。实际上,手势识别技术的历史并不短暂,按技术可以简单分为二维手势识别和三维手势识别,VR/AR设备中主要采用的是三维手势识别技术。

今年,市场分析公司Markets and Markets发表报告称,手势识别市场预计将从2020年的98亿美元增长到2025年的323亿美元,复合年增长率为27.0%。

从目前的市场状况来看,国内外的手势识别市场规模并不大,大多数公司都处于产品化、市场化的早期阶段,有些初创公司还处于技术研发阶段。除了技术原因之外,更重要的一个因素是手势识别还未找到合适的、能够支撑其爆发的应用场景。

在应用领域上,手势识别经历了一个发展阶段,早期Leap Motion以PC为主攻方向,但是并没有取代键盘鼠标,依靠庞大的电脑产业做大市场。现在,手势识别正处于一个拓荒期,VR/AR、智能家居、汽车系统、自动化系统这几个领域是大家都在尝试的方向。值得一提的是,VR/AR这一新兴行业为手势识别技术带来了希望,但是由于VR/AR设备还未在消费端普及,极具依附性的手势识别也未能实现一定量级的大规模出货。

从技术角度来说,手势识别的硬件基础是深度摄像头,目前国内外厂商主要采用的是结构光、双目成像和TOF(光飞时间)三种技术方案。

整体来看,国内外的手势识别公司并不多,但势头发展良好。通过公开报道可以发现,大部分是成立不久的创业公司,融资上处于A轮阶段,也有部分相对成熟的公司完成了C轮融资,另外,相当一部分视觉识别公司被大公司收购合并,这在一定程度上降低了其融资压力,加强了其研发实力。

手势识别交互方式的优势非常明显:识别人的自然手势,学习成本低,使用门槛低;识别多种手势,自然使用双手,灵活性强。但是,其也存在鲁棒性差、缺乏反馈、追踪范围有限、操作易疲劳等问题。如何开拓这个百亿市场,还需要技术、公司、资本等各方面的不懈努力与探索。

主要市场参与者

国家 公司
中国 百度,大疆,腾讯,阿里巴巴,凌感(uSens),诺亦腾(Noitom),锋时互动,英梅吉科技(IMG科技),极鱼科技(ThisVR),字节跳动,小米,华为,海康
美国 Microsoft,Google,Apple,Facebook,Amazon,Tesla,Microchip Technology,OmniVision Technologies,OBLONG INDUSTRIES,Intel,COGNIVUE,Leap Motion
德国 Infineon Technologies AG,Cognitec Systems GmbH,pmdtechnologies AG,German Auto Labs GmbH
日本 SONY,OMRON
英国 IrisGuard,Ultraleap,iPROOV Limited
以色列 PointGrab,Eyesight Technologies Ltd
加拿大 GestureTek,XYZ Interactive
比利时 Softkinetic Systems SA
挪威 Elliptic Labs
印度 Gesture Research

应用前景

虽然触摸屏和按钮是目前较为常见的输入形式,但手势界面还提供了其他优点,例如手势交互减少了非必要的接触,有效隔离了病毒的传播路径,从而改善了卫生状况。目前而言主要应用场景有:

面临挑战

识别精度

手势识别软件的准确性和实用性面临诸多挑战。对于基于图像的手势识别,使用的设备和图像噪声会对识别结果产生较大的影响。精确地识别背景和目标是整个视觉识别的前提。

基于视觉的手势识别的通用性会受到相机的限制。例如,为一台相机校准的算法可能不适用于另一台相机。背景噪声的数量,目标发生遮挡,同相机的距离,相机的分辨率等等也都会导致跟踪困难和降低识别精度。

社会接受度

在智能手机和智能手表之类的移动消费设备上采用手势界面的一个重大挑战是手势输入的社会可接受度。尽管手势可以在许多新型设备上进行快速,准确的输入,但是手势的采集和实用性通常受社会因素而非技术因素的限制。

手势规范

移动传感器和小型设备上的手势界面通常依赖于惯性测量单元(IMU)等运动传感器。在这些设备上执行手势,可能会使设备难以区分是自然运动还是噪音。同时,常见手势更容易为用户所接受,但是机器可能更加难以识破你的意图:是刻意为之,还是无意之举?而使用奇怪的手势,会让人不舒服,导致用户拒绝使用它们。

部署区域

可穿戴计算机通常与传统移动设备的不同之处在于它们的使用和交互位置发生在用户的身体上。在这些情况下,手势输入可能会比传统的输入方法更受青睐。但是,在手势交互方面,它们与移动设备一样面临许多相同的社会接受障碍。不过,可穿戴设备一般可隐藏在视线之外或集成在其他日常物品(例如衣服)中,可穿戴式设备交互的主要考虑因素是设备放置和交互的位置。在美国和韩国进行的一项探索第三方大众对可穿戴设备交互的态度的研究中,发现男女对可穿戴设备使用的感知存在差异,部分原因是身体的不同部位对外力的敏感度不同。另一项研究体感输入的社会可接受度的研究发现了相似的结果,两项研究都将腰围,腹部和上半身(女性)标记为最不可接受,而前臂和手腕周围的区域标记为最能接受区域。

手臂疲劳

长时间的手势输入,使用者的手臂开始感到疲劳和不适。

手势识别相关技术

概述

类别 手势识别是计算机科学语言技术中的一个主题,是模式识别和机器学习(PRML)的子类
目的 通过数学算法解释人的手势
途径 采用相机或传感器采集数据,基于计算机视觉算法解释识别
优点 用户可以使用简单的手势来控制设备或与设备进行交互,而无需实际触摸它们。手势识别可以认为是让计算机理解人体肢体语言的一种手段,因此与原始文本用户界面和图形用户界面(GUI)相比,手势识别在机器和人类之间架起了更为丰富的桥梁
扩展 手势可以源自任何身体动作或状态,但通常指脸部的运动,且面部表情识别和手势识别是该领域研究的重点。事实上,识别人的姿势,步态,行为也是手势识别的一个分支

硬件

传感器

识别手势的前提是捕获手势,常用的捕获设备有:

处理器

软件

根据输入数据的类型,可以以不同的方式完成手势识别的任务。但是,大多数技术都依赖于三维坐标系中的关键点。基于这些信号的相对运动,可以根据有效的输入和算法来精准检测手势。 为了解释身体的运动,必须根据共同的特性和运动可能表达的信息对它们进行分类。例如,在手语中,每个手势代表一个单词或短语。

建模方法

根据输入数据的类型,需要利用不同的方法建构手势模型。

三维模型

三维模型是将物体表示为三维多边形,利用大量的点和线条完整地描述物体表面。三维模型目前广泛应用在动画产业与计算机视觉领域。

此方法建构出的模型精细度较高,但需要大量的计算,对硬件要求很高,因此有一个简化的方法是将人体的重点部位以简单的物件表示,例如用圆柱体表示手臂、用球体表示头部,如此便能用简单的参数描述模型。

骨架模型

由于三维模型需要大量的参数,骨架模型便是其简化的版本。骨架模型利用关节的角度与每个分节的长度做为参数,因此极大地减少了计算量。

骨架模型具有下列优点:

外观模型

如果输入的数据是二维的图像,则必须使用外观模型来描述物体特征。外观模型可以是物体的轮廓、原始的图像,或由图像抽取出的特征。

三维模型 骨架模型 外观模型
img img img
肌电图模型

肌电图(EMG) 是研究全身肌肉产生的电信号,以及对手臂肌肉接收到的数据进行动作分类的手势识别方法。用户的EMG设备允许使用非侵入方法穿戴,例如绑在手臂或腿上,并通过蓝牙进行连接。因此,EMG具有优于视觉方法的优势,因为用户无需面对摄像机即可进行输入,从而可以实现更大的移动自由度。

算法

在得到手部模型后,要利用这些信息识别出手势。常用的方法是在识别前,先获得大量的训练集,建立各种手势的数据库,利用机器学习,训练出能够识别手势的模型,实际运用时,再将测试数据输入模型,便能得到识别结果。手势识别常用的机器学习方法有:

机器学习开源框架

如果不借助某种工具,机器学习对于大多数人而言就是一场噩梦。你不可能一切都从零开始,即使你想,在大多数情况下你也没有足够的时间来实现。所幸,我们站在巨人的肩膀上,以下罗列了一些比较流行的机器学习框架。

框架 底层语言 接口语言 开源 维护组织
TensorFlow C++/Python C++/Python/Java Github Google
PyTorch C/C++/Python Python Github Facebook
CAFFE C++ C++/Python/Matlab Github BVLC
Keras Python Python Github Google
Mxnet C++ C++/Python/Julia/R Github Amazon
CNTK C++ C++/Python/C#/Java Github Microsoft
Paddlepaddle C++/Python C++/Python Github Baidu
Deeplearning4j C/C++/Cuda Java/Scalar Github Eclipse
Darknet C C Github Joseph Redmon

由上表可见,掌握C++Python语言是一个开发者进行机器学习项目的必备技能。C++大多用于写底层组件,驱动,执行效率高,Python拥有丰富的第三方库,封装了大多数函数。对开发者很友好。

除此之外,Matlab/Octave也是很好的辅助工具,可以对一些数学公式进行简便和直观的测试。

各类资源

关系

计算机科学(CS)➡人工智能(AI)➡机器学习(ML)➡模式识别(PR)➡计算机视觉(CV)➡手势识别(GR)

数理知识

编程技能

主流会议

国内相关领域大牛/团队

网络资源

结语

近年来随着人工智能的大火,网络上与之相关的培训机构,图书资源,开源资料也铺天盖地而来,想要找到学习资料可谓易如反掌,但是在海量的信息中找到合适的、有用的反而变得棘手。正所谓乱花渐欲迷人眼,什么都想学,反而什么都学不好,不如术业有专攻来的踏实。在寻得资料后,应当加强对数学和图像处理相关理论的掌握,多动手推导公式,多编程实践,多关注行业动态,多反馈交流,多总结存档。

在学习或研究生涯,随着知识的推进,自己也会陷入一个知识无底洞,即当你想要解决一个问题时,会发现它又涉及到诸多学科的知识,等你回过头来,才发现已深陷无尽的知识海洋之中,方知自身微不足道。

真理无穷,可是进一寸也有一寸的欢喜。

参考

VR公司巡礼

Gesture_recognition

touchless-sensing-gesturing-market

机器学习流行框架

github