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

【手势交互】4. Kinect for XBox的更多相关文章

  1. 基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统)

    基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统) zouxy09@qq.com http://blog.csdn.net/zouxy09 一年多前开始接触计算机视觉这个领域的时候,年幼无 ...

  2. 手势交互之GestureDetector

    GsetureDetector 一.交互过程 触屏的一刹那,触发MotionEvent事件 被OnTouchListener监听,在onTouch()中获得MotionEvent对象 GestureD ...

  3. Kinect for Xbox one(v2) + Ubuntu 14.04 +ROS 安装

    相比于kinect for xbox 360(v1)通过结构光来获取深度,Kinect for Xbox one(v2) 采用time flight技术,极大改善了深度图像的性能. kinect fo ...

  4. 【手势交互】8. Nimble Sense

    早在2012.2013年度,手势识别领域就发生了几起重要的行业并购.比方英特尔对Omek的收购,谷歌对Flutter的收购.而苹果公司更是以3.45亿美金得高价收购了之前为微软Kinect提供技术支持 ...

  5. iOS查看3D效果的手势交互

    公司项目中用到的,仿的人家厂子的效果,看起来还是挺高大上的,其实实现起来很简单,是一种伪3D;用手势滑动查看一个商品的3D展示. 在手机上手指左右滑动可以360°无死角查看这个商品,有兴趣的可以下de ...

  6. 手势交互之GestureOverlayView

    一种用于手势输入的透明覆盖层,可以覆盖在其他空间的上方,也可包含在其他控件 android.gesture.GestureOverlayView 获得手势文件 需要用GesturesBuilder,如 ...

  7. 【手势交互】9. PS Move

    索尼研发体感控制技术已有10年,在过去那么多年里.尝试了3D摄像头.超声波和电磁感应等各种技术.最后还是觉得眼下的MOVE所使用的技术最为合适.PS Move是索尼于2010年9月份推出.用来让PS3 ...

  8. 【手势交互】6. 微动VID

    中国 天津 http://www.sharpnow.com/ 微动VID是天津锋时互动科技有限公司开发的中国Leap Motion. 它能够识别并跟踪用户手部的姿态.包含:指尖和掌心的三维空间位置:手 ...

  9. iOS7自定义back按钮和pop交互手势

    Clambake for iPhone有一个回退按钮在所有的导航条上.这是一个简单的没有文字箭头. 实现一个自定义按钮是简单的.类似这个设置controller 的navigationItem一个le ...

随机推荐

  1. DocView mode 3 -- 配置

    ;在当前页中滚动doc-view-continuous nil ;指定默认的字体大小doc-view-resolution ;gs生成的缓存的目录doc-view-cache-directory

  2. HTML5教程之本地存储SessionStorage

    SessionStorage: 将数据保存在session对象中,所谓session是指用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间会话,也就是用户浏览这个网站所花费的时间就是sess ...

  3. HDU 3271 SNIBB

    SNIBB Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 3271 ...

  4. Neural Networks and Deep Learning

    Neural Networks and Deep Learning This is the first course of the deep learning specialization at Co ...

  5. 【java基础 8】垃圾收集算法及内存分配策略

    本篇博客,主要介绍GC的收集算法以及根据算法要求所得的内存分配策略! 一.收集算法 收集算法,主要包括四种,分别是:Mark-Sweep(标记-清除).Copying(复制).Mark-Compact ...

  6. POJ-3352 Road Construction,tarjan缩点求边双连通!

    Road Construction 本来不想做这个题,下午总结的时候发现自己花了一周的时间学连通图却连什么是边双连通不清楚,于是百度了一下相关内容,原来就是一个点到另一个至少有两条不同的路. 题意:给 ...

  7. [UOJ#220][BZOJ4651][Noi2016]网格

    [UOJ#220][BZOJ4651][Noi2016]网格 试题描述 跳蚤国王和蛐蛐国王在玩一个游戏. 他们在一个 n 行 m 列的网格上排兵布阵.其中的 c 个格子中 (0≤c≤nm),每个格子有 ...

  8. Office 中的各种小tips(更新中)

    1.Word 中打字输入会擦掉之后原有字符,出现“吃字”的情况? 要将“改写”切换为“插入”,最简单的方法就是点击键盘上小键盘旁边的“insert”键. 其实仔细观察的话,在word文档下方,会看到如 ...

  9. 数字梯形(cogs 738)

    «问题描述:给定一个由n 行数字组成的数字梯形如下图所示.梯形的第一行有m 个数字.从梯形的顶部的m 个数字开始,在每个数字处可以沿左下或右下方向移动,形成一条从梯形的顶至底的路径.规则1:从梯形的顶 ...

  10. Bootstrap开启模态框后对数据处理(标记模态框的开启与关闭状态)

    JS用全局变量标记状态,方法中动态修改全局变量以标记状态是一个重要思想. 需求:组合条件查询数据,查询完之后填充到模态框中,开启模态框,模态框中有组合条件查询,此时查询只需要更新模态框表格数据不需要开 ...