【手势交互】4. Kinect for XBox

“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月.

原文地址:https://www.cnblogs.com/claireyuancy/p/7150808.html