于是,手部动作识别在已知的交互形式中成为最受欢迎形式。
三、手部动作识别是不是只有3D手势识别吗?
说起手部动作识别,大家耳熟能详的应该就是Leap Motion这家公司了。但实际上,手部动作识别的解决方案并不是只有Leap Motion一家公司有,技术原理上也并不是只有这一个方向。只不过因为Oculus的对Leap Motion的大力支持,伴随着Oculus Rift的高曝光率,使得Leap Motion的3D手势识别被公众所熟知。
3D手势识别并不是VR交互领域手部动作识别方案的唯一,其实可以分为二维手型识别、二维手势识别、三维手势识别三种。
二维手型识别
二维手型识别,也可称为静态二维手势识别,识别的是手势中最简单的一类。这种技术在获取二维信息输入之后,可以识别几个静态的手势,比如握拳或者五指张开。其代表公司是一年前被Google收购的Flutter。在使用了他家的软件之后,用户可以用几个手型来控制播放器。
“静态”是这种二维手势识别技术的重要特征,这种技术只能识别手势的“状态”,而不能感知手势的“持续变化”。举个例子来说,如果将这种技术用在猜拳上的话,它可以识别出石头、剪刀和布的手势状态。但是对除此之外的手势,它就一无所知了。所以这种技术说到底是一种模式匹配技术,通过计算机视觉算法分析图像,和预设的图像模式进行比对,从而理解这种手势的含义。
这种技术的不足之处显而易见:只可以识别预设好的状态,拓展性差,控制感很弱,用户只能实现最基础的人机交互功能。
二维手势识别
二维手势识别,比起二维手型识别来说稍难一些,但仍然基本不含深度信息,停留在二维的层面上。这种技术不仅可以识别手型,还可以识别一些简单的二维手势动作,比如对着摄像头挥挥手。其代表公司是来自以色列的PointGrab,EyeSight和ExtremeReality。
二维手势识别拥有了动态的特征,可以追踪手势的运动,进而识别将手势和手部运动结合在一起的复杂动作。这样一来,我们就把手势识别的范围真正拓展到二维平面了。我们不仅可以通过手势来控制计算机播放/暂停,我们还可以实现前进/后退/向上翻页/向下滚动这些需求二维坐标变更信息的复杂操作了。
这种技术虽然在硬件要求上和二维手型识别并无区别,但是得益于更加先进的计算机视觉算法,可以获得更加丰富的人机交互内容。在使用体验上也提高了一个档次,从纯粹的状态控制,变成了比较丰富的平面控制。
三维手势识别
三维手势识别需要的输入是包含有深度的信息,可以识别各种手型、手势和动作。相比于前两种二维手势识别技术,三维手势识别不能再只使用单个普通摄像头,因为单个普通摄像头无法提供深度信息。要得到深度信息需要特别的硬件,目前世界上主要有3种硬件实现方式,加上新的先进的计算机视觉软件算法就可以实现三维手势识别了。
1. 结构光(Structure Light)
结构光的代表应用产品就是PrimeSense的Kinect一代了。
这种技术的基本原理是,加载一个激光投射器,在激光投射器外面放一个刻有特定图样的光栅,激光通过光栅进行投射成像时会发生折射,从而使得激光最终在物体表面上的落点产生位移。
当物体距离激光投射器比较近的时候,折射而产生的位移就较小;当物体距离较远时,折射而产生的位移也就会相应的变大。这时使用一个摄像头来检测采集投射到物体表面上的图样,通过图样的位移变化,就能用算法计算出物体的位置和深度信息,进而复原整个三维空间。
以Kinect一代的结构光技术来说,因为依赖于激光折射后产生的落点位移,所以在太近的距离上,折射导致的位移尚不明显,使用该技术就不能太精确的计算出深度信息,所以1米到4米是其最佳应用范围。
2. 光飞时间(Time of Flight)
光飞时间是SoftKinetic公司所采用的技术,该公司为Intel提供带手势识别功能的三维摄像头。同时,这一硬件技术也是微软新一代Kinect所使用的。
这种技术的基本原理是加载一个发光元件,发光元件发出的光子在碰到物体表面后会反射回来。使用一个特别的CMOS传感器来捕捉这些由发光元件发出、又从物体表面反射回来的光子,就能得到光子的飞行时间。根据光子飞行时间进而可以推算出光子飞行的距离,也就得到了物体的深度信息。就计算上而言,光飞时间是三维手势识别中最简单的,不需要任何计算机视觉方面的计算。