【手势交互】4. Kinect for XBox

来源:互联网 发布:架空线路设计软件 编辑:程序博客网 时间:2024/06/08 00:24

“You are the Controller”,Kinect for Xbox的广告词,明确说明了Kinect体感的交互方式。作为一款集成了诸多先进视觉技术的自然交互设备,Kinect在学术和游戏业界均享有很高的关注度。此外,Kinect硬件的研发与生产综合了声、光、电和机械学等多方面的技术,其主要零部件近百个,是目前市场上大批量生产中的最为复杂的电子消费产品。

 

Kinect 的关键技术有四点:骨骼跟踪、动作识别、人脸识别、语音识别。本文关注的是基于前两者,骨骼跟踪和动作识别,这是Kinect 1体感交互的主要模块。Kinect 体感交互的流程大致是:

1、红外激光投影机周期性发射光编码形成散斑空间;

2、红外摄像头采集反射的散斑图像;

3、散斑图像分别与参考散斑图案进行互相关运算,得到各个像素点的互相关峰值,这个峰值就是深度图像;

4、深度图像经USB传送到主机;

5、通过人体分类器在深度图像中找到可能的人体区域,并创建分割掩膜,分割出人体区域;

6、通过机器学习的结果,快速对玩家的身体部位(头部、肢体、躯干等)进行分类;

7、从人体部位识别出20个关节点的三维坐标,从而进行人体骨骼三维建模;

8、基于骨骼跟踪进行动作识别(广义上识别的内容包含肢体运动、手势以及静态姿势),需要预先设定一些合理的动作定义;

9、游戏系统按照预定的动作定义,执行命令。

  

Kinect for XBox

 Kinect1的视觉部分有三只“眼镜”,从左到右分别是红外激光投影机、彩色摄像头、红外摄像头。红外激光投影机投射红外激光,红外摄像头采集探测范围内反射回来的的红外光,依靠一定算法确定各反射点的距离,红外激光投影机和红外摄像头一起构成深度检测设备,为后续进一步的骨架提取提供基础。红外摄像头的深度图数据为320x240@30fps,每一个像素用16比特记录。深度检测设备的有效视角垂直方向43°,水平方向57°,有效视距0.8-3.5米,单人的最佳视距为2.26米,双人的最佳视距为2.5米。彩色摄像头主要用来做人脸识别等应用,红外摄像头对光照无要求,即使在黑夜里也能操作。但是彩色摄像头需要明亮的光照,否则人脸识别等功能无法完成。彩色摄像头的分辨率为640x480@30fps,没像素32比特。Kinect配备了自动追焦系统,如果追踪的玩家超出了有效视角范围,底座马达可驱动Kinect左右旋转27度。

 

为了让深度图像和彩色图像相互对应,必须进行“Prime Sense注册过程”。注册就是将彩色图像和深度图像进行对应,产生像素相互对应的影像,即彩色图像中的每个像素分别与深度图像中的一个像素对应。这能让应用程序准确了解收到的彩色图像中每个像素的深度。

 

Kinect1红外激光投影机投射的不是普通的红外光线,而是Prime Sense公司为微软提供的光编码(Light Coding)技术,这项技术属于结构光三维测量技术的一种。可能当时Prime Sense的开价比较贵,微软买入了另外两家利用TOF技术做三维测量的公司,而没有买Prime Sense,只是采用了Prime Sense的技术,Kinect1的核心运算单元就是Prime Sense的PS1080芯片(PS1080负责处理红外图像,然后逐帧生成准确的场景深度图像)。Light Coding使用的是连续的照明(而非脉冲),也不需要特制的感光芯片,只需要普通的CMOS感光芯片,这让方案的成本大大降低,对Kinect消费及电子产品的市场化至关重要。

 

Light Coding,是用光源照明给需要测量的空间编码,属于结构光技术。这种技术的基本原理是,加载一个激光投射器,在激光投射器外面放一个刻有特定图样的光栅,激光通过光栅进行投射成像时会发生折射,从而使得激光最终在物体表面上的落点产生位移。当物体距离激光投射器比较近的时候,折射而产生的散斑位移就较小;当物体距离较远时,折射而产生的散斑位移也就会相应的变大。这时使用一个摄像头来采集投射到物体表面上的散斑图样,通过某块散斑的位移变化,就能用算法计算出该块物体的位置和深度信息,进而复原整个三维空间。把一个物体放进这个空间,只要看看物体上面的散斑图案,就可以知道这个物体在什么位置。当然,在这之前要把整个空间的散斑图案都记录下来,所以要先做一次光源标定。

  

Kinect1散斑图案 

(在黑暗的环境里,用夜视摄像机拍摄Kinect1的检测区域)

 在Prime Sense的专利上,标定的方法是这样的:每隔较短的一段距离,取一个参考平面,并把参考平面上的散斑图案记录下来。假设Kinect规定的用户距离是1~4米,每隔1cm取一个参考平面并把这个平面上的散斑图案记录下来,那么标定完成后就保存了300幅散斑图像。测量的时候,拍摄一幅待测量的散斑图像,将这幅图像和保存下来的300幅参考图案依次做互相关运算,进而得到300幅相关度图像。空间中有物体存在的位置,在相关度图像上就会显示出峰值。把这些峰值叠在一起,再经过一些插值,就会得到整个场景的三维形状了。可以看到Light Coding技术不是通过空间几何关系求解的,它的测量精度只和标定时取的参考面的距离密度有关,参考面越密测量将越精确。根据第三方的测试数据,Kinect对于在2米左右的物体,X、Y轴上的空间精度是3毫米,Z轴(前后)上的空间精度为1厘米。


Kinect的Light Coding依赖于激光折射后产生的落点位移,所以在太近的距离上,折射导致的位移尚不明显,使用该技术就不能太精确的计算出深度信息,所以1米到4米是其最佳应用范围。

深度图像的分辨率320x240,帧率为30fps。帧率是由Prime Sense的PS1080芯片处理能力限制的,对于一般性的运动游戏,30fps可以应付,对于电影级别的运动采集,30fps满足不了要求。深度图像的每个像素点表示该像素与红外摄像头之间的距离,用16比特来表示,其中低3位是用户ID,“000”表示该像素属于背景,“001”表示该像素属于玩家1,“010”表示该像素属于玩家2,以此类推。理论上除了000外,Kinect1可以标定7个人,但Kinect1输出最多6个人的深度信息。深度像素高13位是距离信息,黑色表示极远,白色表示极近。16比特全为0表示该像素深度信息不可获得(要么是极远,要么是极近)。

 

Kinect是通过人体分类器来分类类似人体的目标,因此类似人体的目标都有可能被识别为人体。例如挂在衣架上的衬衣,一个大的毛绒玩具熊等。Kinect的骨骼识别可以兼容不同身高的人体,从幼儿到成人都基本可以准确识别;除了站姿之外,还可以分辨出坐姿的人体。因为Kinect的分类器是基于人体来训练的,因此它不能识别其他非人体的动植物。Kinect不能识别人的正面和背面。透明物体,发光物体(台灯尤其是卤素灯、电脑屏幕等),镜子等反光物体,某些黑色物体,对Kinect的识别有影响。肤色、背景光照对骨架识别没有影响,但对彩色摄像机的工作有影响,例如黑人的人脸识别。对于被遮盖或重叠的人体部位,通过相邻的关节点以及机器学习的结果,Kinect可以推测出人体部位。

 

Kinect是先识别人体部位进而再推断出关节点,这是一个近似度概率匹配、评估的过程。在Kinect里面,人体骨骼是通过20个关节点来表示的。每一个关节由(x, y, z)三维坐标点来标注它在骨架空间中的位置。(从这点来看,不是深度摄像头的精度不够,而是微软就没有想要去检测手指的动作,因为整个手部是一个关节点坐标。类似的还有表情识别)。虽然理论上Kinect可以提供最大7个人的深度信息,但处于性能与实际情况的考虑,Kinect最多只跟踪两个骨骼,最多可以检测六个人。也就是说,假如Kinect面前站着六个人,Kinect能告诉你这六个人具体站在什么位置,但只能提供其中两个人的关节点数据。

 

 

Kinect 人体关节

 

动作识别包含静态姿势和动态动作。姿势是骨骼在某一时间点的状态,例如Kinect中玩家左手向下倾斜45度,表示“暂停或退出”命令。动作是骨骼中的某一关节或是多个关节点在空间的运动序列,是为动态的行为。比如挥动左手,或者离地跳起等。动态的行为分析要比静态的姿势识别要复杂得多。

 

 参考:余涛. 《Kinect应用开发实战:用最自然的方式与机器对话》 机械工业出版社. 2012年11月.

0 0
原创粉丝点击