一文看懂手势交互的硬件方案与算法模型

2019-09-19 18:45:31来源:青亭网


早在语言出现之前,人类就习惯使用肢体和手势,这种近乎本能的沟通方式,来互相交流。

在机器被发明之后,手势因具备键盘、鼠标、触屏等交互方式所无法替代的天然优势,仍然有诸多应用场景。

在电影《钢铁侠》里面,主角一挥手,凭空推拉拖拽操控虚拟物体,简直不要太炫酷了。

无我VR 聚合新闻

做到像电影中那样高精度、稳定性好的手势识别,需要硬件和算法的加持,两者缺一不可。

手势识别都有哪些常见的硬件方案?工程师是如何用AI算法来优化识别效果的?常见的手势识别应用场景都有哪些?接下来,就让RokidR-Lab算法工程师张兆辉为我们娓娓道来。

无我VR 聚合新闻
图为openpose的手势关键点检测

相比深度摄像头方案,彩色摄像头方案缺乏深度信息,受光照影响非常大,夜间无法使用,稳定性和精度都没有深度相机方案好。

1.2深度摄像头方案

这个方案是通过深度摄像头来获取带有深度信息的图片。优势是更容易获取手部的3D信息,相对应的通过AI算法得到的手部3D关键点也更加准确和稳定。但缺点是需要额外的设备、硬件成本比较高。

深度相机又分三大类:ToF、结构光和双目成像。

其中,ToF和结构光得到的深度图比较准,但成本比较高,多用于手势的科研领域,商用的比较少,比如微软HoloLens、极鱼科技ThisVR。

双目成像因为视场角大,帧率高,很适合用来做手势识别,唯一缺点就是因为成像原理的限制,使得整个双目相机模组的体积对比ToF和结构光来说大很多。

采用双目成像的公司以目前最大的手势识别公司LeapMotion为代表,该公司使用的是主动双目成像方案,除了双目摄像头外还有三个补光单元,可捕获双手26DoF、静态手势、动态手势等。此外,LeapMotion还提供了非常完整的SDK,对各个平台支持都不错(除手机平台)。

无我VR 聚合新闻
图为LeapMotion的演示

国内也有在做双目手势的公司,比如uSensFingo是基于主动双目的视觉方案,提供双手26DoF、静态手势、动态手势识别等功能。相比于LeapMotion,uSens更专注于对手机以及其他低功耗嵌入式设备的支持。此外还有微动VidooPrimary也有基于双目的手势解决方案。

2、毫米波雷达

毫米波雷达方案的代表有谷歌推出的一款特殊设计的雷达传感器——ProjectSoli,它可以追踪亚毫米精准度的高速运动,但目前尚处在实验室阶段。

无我VR 聚合新闻

从其公布的演示来看,目前可以识别个别指定的手势,并在小范围内识别微小精确的手势操作,很适合发挥人类精准的小肌肉运动技能(finemotorskills)。但缺点是有效范围太小,无法得到手的所有自由度。[参考谷歌ProjectSoli深入解析]

无我VR 聚合新闻
图为ProjectSoli的演示

3、数据手套

数据手套是指在手上带一个内置传感器的特制手套,通过传感器检测手指的屈伸角度或位置,再根据Inversekinematics(逆运动学)来计算出手的位置。

一般用到的传感器有弯曲传感器、角度传感器、磁力传感器等。

弯曲传感器和角度传感器类似都是可检测手指的弯曲程度,我们以DEXMO力反馈手套为例,该手套使用旋转传感器捕捉11个自由度的手部运动,包括每根手指的伸展和弯曲,以及大拇指一个额外的旋转自由度。

无我VR 聚合新闻

此方案对手的局部动作检测很准,而且不受视觉方案中视野范围的限制。但缺点是手上必须戴手套不方便,且只能检测局部的手指动作,不能定位手部整体的位置角度。若想要检测手的位置角度,DEXMO需配合其他6自由度追踪器使用。

当然DEXMO的最大卖点其实不是手势识别,而是逼真的触觉反馈(haptics)+手势识别。手势识别+触觉反馈的方案肯定会是以后人机交互的重要一环。最近收购LeapMotion的UltraHaptics就是一家做触觉反馈的公司。

还有一种用磁力传感器的——trakSTAR电磁式空间位置追踪系统。通过在手上贴的磁力传感器的磁场变化,来确定传感器的位置角度,再根据反运动学确定手的具体位置。

无我VR 聚合新闻
图为trakSTAR使用示意图

此方案需在手部贴6个磁力传感器(5个指尖+1个手背),并在面前放一个磁力发射器。磁力发射器会在一定范围内形成一个特殊的电磁场,然后根据传感器在电磁场中不同位置角度检测到的电磁场强度的不同,来推断出指尖及手掌的位置角度。再通过反运动学,确定所有手部关节点的位置。

此方案的缺点是有效使用范围太小,价格太贵,适用场景太少。优点是精度很高,稳定性很好,并且可获得手部所有自由度。

目前此方案还只有纯科研在用,最近几个学术界公开的手势数据集FHAB、BigHand都是用此设备采集的。

无我VR 聚合新闻
图为FHAB数据集中的示意图

无我VR 聚合新闻
图为可视化后的21个手部3D关键点

目前学术界已经提出各种算法用于解决“基于深度的手势姿态估计问题“,这些算法大体可以分成模型驱动(model-driven)和数据驱动(data-driven)两种方式。

1、模型驱动类算法

此类算法通常是预先用手部pose(pose指位姿参数或节点位置,后文将统称为pose)生成一系列手的几何模型,并建立一个搜索空间(所有可能的手势几何模型的集合),然后在搜索空间内找到与输入深度图最匹配的模型。

此时,模型对应的参数就是所求的pose。此类算法属于生成式方法(GenerativeApproaches),我们以下图中的论文为例:

无我VR 聚合新闻

模型驱动类算法通常需要设计一种方式把pose转换成对应的几何模型。

此论文用了linearblendskinning(一种骨骼蒙皮动画算法):意思就是给骨架蒙上一层皮肤,并让皮肤跟随骨骼运动一起变化,多用于动画领域。

先把pose转换成对应的mesh(下图左侧),在进一步转换成光滑曲面模型(下图右侧)。我们可以理解为pose是自变量,几何模型可由pose算出,且几何模型与pose一一对应。

无我VR 聚合新闻
图为手部几何模型

输入的手部深度图可转化为点云,此点云就相当于在真实的手表面上采集到的一些3D点,如下图中的红点和蓝点:

无我VR 聚合新闻

这样就可以定义损失函数为点云中的点到模型表面的距离(上图中的红线),以此描述深度图和pose的相似度。损失函数的输入是深度图和pose,输出是差异度。损失函数的输出值越小,说明输入的深度图和pose越相似。

因此,只要在搜索空间中找到令损失函数最小的pose即为所求的pose。但因搜索空间不能写成解析形式,没法一次性求出损失函数的最小值,通常只能用数值计算方法,如PSO,ICP等,不断迭代计算得到最优解。

上图从左到右展示了迭代初期到迭代结束时的pose,这种迭代的数值解法通常对初始化要求较高,若初始化的不好,则需要很长时间才能迭代收敛,还有可能无法收敛到全局最小值(因为损失函数是非凸函数),所以算法实现时,通常利用上一帧的pose来初始化当前帧的计算。

这种模型驱动类方法需要手工设计几何模型和损失函数。简单的几何模型计算量小,复杂的几何模型准确度高。通常设计模型时需要在准确度和性能之间做权衡。

无我VR 聚合新闻
图为不同的手部几何模型

模型驱动类的算法优势是不需要任何训练数据,只要设计的好,写完就可以直接用。缺点是需要手工设计模型,计算量较大,容易误差累计导致漂移,对初始化要求高,通常只能用在手势追踪领域。

2、数据驱动类算法

此类算法是指利用收集数据中训练样本与其对应的标签关系,让机器学习一个从样本到标签的映射。此类算法属于判别式方法(DiscriminativeApproaches)。

无我VR 聚合新闻

这样的机器学习算法有很多,可以是早期使用的随机森林,SVM或是最近研究的火热的神经网络等。此类方法的优点是不需要设计复杂的模型,缺点是需要大数据。但现在大数据时代数据量已经不是问题,这种数据驱动的方式已经成为目前的主流研究方向。

早期学术界研究手势关键点回归的经典方法有Cascaderegression,LatentRegressionForest等。近些年研究主要集中在各类神经网络如:DeepPrior系列、REN、poseguided、3D-CNN、Multi-ViewCNNs、HandPointNet、FeedbackLoop等。

由于此处讨论的用于手势的神经网络与普通的图的神经网络并无本质差异,而神经网络的科普文章已经很多,这里就不做科普了,我们仅挑几个有代表性的网络结构介绍一下:

DeepPrior:网络结构大体如下图,通过初始网络得到粗略的pose,再用refine网络不断优化,并且在最后的全连接层前加了一个低维嵌入,迫使网络学习把特征空间压缩到更低维度。此网络后续有更优化的版本DeepPrior++。

无我VR 聚合新闻

无我VR 聚合新闻

FeedbackLoop:网络结构如下图,此网络在预测pose之后,反过来用pose生成深度图,并与输入的深度图一起预测更优的pose,此pose又可用来生成更优的深度图,以此迭代循环优化pose。

无我VR 聚合新闻

3DCNN:网络结构如下图,此网络把2D深度图上用像素的描述的深度信息,以TSDF的方式转化为体素(3D的像素),并用3D卷积代替了普通的2D卷积。

此处最大的贡献就是在网络结构上从2D走到了3D,因为传统2D卷积网络是为2D图像设计的,并不一定适合3D信息的提取,而用3D卷积网络则更容易获取3D特征,也就更适用于3D手部关键点回归的问题。

无我VR 聚合新闻

HandPointNet:网络结构如下图,此网络输入时把深度图转成点云,然后用PointNet做手部3D关键点回归。

HandPointNet的主要贡献是首次把PointNet用在了手势关键点回归上,其中的PointNet是很有代表性的网络。PointNet首次用3D点云来作为网络输入而不是2D图片。

PointNet比上一个介绍的3DCNN更进一步探索了在3D空间中的神经网络架构,以及如何更有效的提取3D特征,PointNet后续有更优化的版本PointNet++。

无我VR 聚合新闻

无我VR 聚合新闻

2、AR手势

以HoloLens为代表的很多公司都在做AR眼镜。AR眼镜可能会脱离实体的触屏和鼠标键盘这些输入工具,取而代之的输入是图像和语音等。此时手势交互便必不可少,不过AR还处在比VR市场更早期的阶段,需继续积累技术,等待市场成熟。

此类代表产品有:HoloLens、MagicLeap、RokidGlass、Nreal、ProjectNorthStar、亮风台等。

无我VR 聚合新闻
图为LeapMotionProjectNorthStar的演示片段

3、桌面手势

以SonyXperiaTouch为代表的投影仪+手势识别,将屏幕投影到任何平面上,再通过手势识别模拟触屏操作。

这里用到的手势识别比较简单,基本只要识别单点多点。但使用中手很容易挡住投影仪显示的屏幕,而且还有显示清晰度的问题。此场景可能更多的是一种探索,落地的可能性较小。

无我VR 聚合新闻

不过可以开个脑洞:如果把这里的平面手势识别改成空中手势识别,平面投影改成全息3D投影,那就可以实现文章开头提到《钢铁侠》里的全息控制台了。

空中手势识别已经能做到了,但目前还没有真正的全息投影的技术,只有一些伪全息投影。如反射式和风扇式的伪全息投影。

反射式伪全息投影只是把物体的影像反射到反射面板(塑料板)后成一个虚像。因板子透明,所以看起来似乎是在空中直接成像。风扇式伪全息投影是利用人眼的视觉暂留现象,让画面看起来像是直接在空中成像。

无我VR 聚合新闻
上图为反射式伪全息投影

无我VR 聚合新闻
上图为风扇式伪全息投影

这些伪全息投影的最大问题就是没法用手和虚拟影像交互。想要实现《钢铁侠》里面的全息工作台,最有可能的方式是在AR眼镜里面实现,只要把计算得到的手势位姿和显示设备联合标定对齐,就可以实现手和虚拟影像的交互了。

此类代表产品有:XperiaTouch、光影魔屏等。

4、车载手势

车载手势指的是在开车时用手势交互控制中控台的一些选项按键等。相比于传统方式,手势的优势是不用每次都去按按钮或戳屏幕,更智能方便。

在使用触屏时,司机需要看着屏幕才知道按钮在哪,看屏幕这一动作,有极大的安全隐患。而手势可以配合语音反馈直接操作,不需要盯着屏幕。

车载手势可以一定程度提高驾驶安全性,但它也有一些缺点,在空中做手势容易手累,再加上手势识别的准确性和延迟问题,远不如直接用手过去转转按钮、点点屏幕来的方便。所以目前业内基本都采用的都是传统方式+手势操作辅助的方式。

此类代表产品有:宝马7系、拜腾汽车、君马SEEK5等。

无我VR 聚合新闻

无我VR 聚合新闻

作者介绍:张兆辉,浙江大学竺可桢学院求是科学(物理)本科毕业,主要研究方向包括手势识别,姿态估计,立体视觉,深度学习等,现就职于RokidR-Lab图像算法工程师,负责手势算法研发等相关工作。

新闻媒体更多>>
  • VR网
  • Yivian
  • 青亭网
  • 麦逗VR
  • VR陀螺
  • 魔多VR