“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. yum安装的java配置

    vim /etc/profile JAVA_HOME=/usr/lib/jvm/javaJRE_HOME=$JAVA_HOME/jreCLASS_PATH=.:$JAVA_HOME/lib/dt.ja ...

  2. LDAP学习小结【仅原理和基础篇】

    此篇文章花费了好几个晚上,大部分是软件翻译的英文文档,加上自己的理解所写,希望学习者能尊重每个人的努力. 我有句话想送给每个看我文章的人: 慢就是快,快就是慢!!! 另外更希望更多人能从认真从原理学习 ...

  3. kali2018 安装****

    1.安装需要的依赖包: apt-get install qt5-qmake qtbase5-dev libqrencode-dev libappindicator-dev libzbar-dev ro ...

  4. Centos6虚拟主机的实现

    centos6上虚拟主机的实现   实现虚拟主机有三种方式:基于IP的实现.基于端口的实现.基于FQDN的实现 一.基于IP的实现 1.先创建三个站点: mkdir /app/site1 mkdir ...

  5. 大数据学习——hive的sql练习题

    ABC三个hive表 每个表中都只有一列int类型且列名相同,求三个表中互不重复的数 create table a(age int) row format delimited fields termi ...

  6. 使用Apriori算法进行关联分析

    关联分析是一种在大规模数据集中寻找有趣关系的任务.这些关系可以有两种形式:频繁项集或者关联规则.频繁项集是指经常出现在一块的物品的集合,关联规则暗示两种物品之间可能存在很强的关系.一个项集的支持度被定 ...

  7. 【Luogu】P1199三国游戏(博弈论)

    题目链接 来看一波有理有据的分析 三牧小明的那篇 代码 #include<cstdio> #include<cctype> #include<algorithm> ...

  8. BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸 ——动态规划

    状态设计的方法很巧妙,六个值 h1,h2,h3,t1,t2,t3,我们发现t1,t2,t3可以通过前缀和优化掉一维. 然后考虑把h留下还是t留下,如果留下h显然t是会发生改变的,一个int存不下. 如 ...

  9. 算法复习——bitset(bzoj3687简单题)

    题目: Description 小呆开始研究集合论了,他提出了关于一个数集四个问题:1.子集的异或和的算术和.2.子集的异或和的异或和.3.子集的算术和的算术和.4.子集的算术和的异或和.    目前 ...

  10. SHoj A序列

    A序列 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:05   时间限制: 1000ms   内存限制: 128M 描述 如果一个序列有奇数个正整数组成,不妨令 ...