《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

3.2 基于“管道”的系统架构

Kinect for Xbox 360是一个基于“管道”的体系架构,如图3-3所示。
Kinect传感器设备提供三大类的原始数据信息,包括深度数据流(depth stream)、彩色视频流(color stream)、原始音频数据(raw audio stream),同时分别对应骨骼跟踪(Skeletal Tracking)、身份识别(Identify)、语音识别(Speech Pipeline)三个处理过程。

《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

1)骨骼跟踪具有以下特点:
从Kinect Primesense芯片组获取深度数据流,通过USB 2.0端口传输。
设定人体“分类”(Classification)的特征阈值,通过约定的字节编码,为每个被追踪的玩家在深度图像中创建“分割遮罩”(Segmentation)。
将深度数据中出现的游戏玩家(用户)与背景图像分割,发现玩家。
通过机器学习的结果,快速对人体部位进行分类。
通过机器学习的结果,从人体部位进一步识别关节点三维坐标,从而进行人体骨骼三维建模。
根据Xbox 360游戏场景需要进行后续的游戏渲染工作。
2)身份识别包括动作识别和人脸识别两部分,其具有以下特点:
从Kinect彩色摄像头获得视频流信息,通过USB 2.0端口传输。
玩家面部器官被分解成几个关键性的面部标志,通过彩色视频信息的特征采样进行人脸匹配。
为了提高识别精度和效率,同时结合人的着装信息、身高等因素来进行匹配。
玩家用户信息被识别,并从关联数据库中被检索。
根据玩家的个性化信息,Xbox 360游戏进行后续的游戏渲染工作。
3)语音识别处理具有以下特点:
从Kinect麦克风阵列中获取原始音频信息,通过USB 2.0端口传输。
根据特定算法进行多通道回声消除、回声抑制,适应玩家与Kinect麦克风一定距离及室内空旷回声等情况。
通过波束成形等机制,进行声源定位。
通过噪声抑制等机制,自动过滤环境噪声。
语音命令识别。
根据Xbox 360游戏场景需要进行后续的处理工作。
Kinect“体感操作”带来了全新的用户体验和交互设计,可以说用户体验、交互设计、创新技术正是Kinect成功的“三板斧”。Kinect for Xbox 360的关键技术特性归纳为如下四点:骨骼跟踪、动作识别、人脸识别、语音识别。
下面,我们逐一分析这些关键特性。

3.2.1 骨骼跟踪

骨骼跟踪是Kinect“体感操作”的基础,同时系统根据这一特性创建你的数字Avatar。
当你玩Xbox游戏时,根据Kinect传输过来的深度数据,系统将创建一个你的“数字骨架”。因此,无论当你向左或向右移动甚至跳跃时,你的Avatar都会保持一致的动作,就像照镜子一般,如图3-4所示。
《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

为什么Kinect的骨骼跟踪意义非凡?从用户交互设计的角度来看,之前游戏控制器的*度都是预先设定好的,比如键盘、鼠标、更多*度的遥杆、带重力感应的手柄及更为先进的数字手套。骨骼跟踪的设计目标是和玩家的运动保持一致,无论他是在跳华尔兹还是在打太极拳。这其中的*度和变换是无法穷举的,这也给Kinect For Xbox体感游戏创造了无限遐想的空间。
微软在2010年的E3上展示了Kinect Avatar,如图3-5所示。

《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

Avatar可以将玩家的虚拟形象带入全新的世界中。除了步态一致的肢体控制外,系统甚至可以惟妙惟肖地克隆玩家的表情,当他笑、皱眉、点头或者说话时,虚拟形象也会做同样的动作。通过Avatar,玩家可以邀请好友加入各种虚拟环境,比如车尾野餐会场景。
骨骼跟踪要求系统在允许的延时范围内,快速构建玩家的躯干、肢体、头部甚至手指。目前这一代的Kinect技术有其自身的限制,比如视场角(FoV)有限,低于手指的分辨率,但这些限制本身应该也是更多因为相关芯片及工艺的成本,其中涉及以下三个关键点:

  1. 压缩感知
    前面在剖析Kinect硬件架构时,已经谈到黑客是利用USB记录仪截获数据进行分析的,当时令黑客大吃一惊的就是“数据洪水”(data flood)。如何从深度图像中抛弃背景图像信息,把人体骨骼抽象出来,这将是一件关键的工作。后面的原理分析会谈到,那将是“一个像素一个像素”地识别的工作,系统会通过机器学习和模式识别来压缩感知,处理这些原始数据(raw data)。
  2. 骨骼关节
    游戏中的Avatar人物与真实人体的匹配度的高低是“骨骼识别”的关键。匹配度的高低决定于能实时抽象出多少个关节点。关节点连线在一起就是一个“火柴人”,如图3-6所示。应该说关节点越多,骨骼就越真实。当然,游戏中的人物还会通过表面渲染来构建一个3D人物。

《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

  1. 关节点的精度问题
    另外一个关键点是骨骼关节点精度问题,这同时涉及几个层次:

激光散斑测距采样的精度(后面会具体谈到)。
红外摄像头的采样分辨率和频率(比如Kinect深度图像默认为每秒30帧,320×240的分辨率)。
通过深度图构建骨骼数据的延时。传输延时基本可以忽略不计(正如图像显示器的刷新率一样,延时的控制应该在人的生物识别范围内,人类对事物的反应速度几乎都超过100ms)。
国外调查发现Kinect的空间判断精准度为4mm, PlayStation Move则是1mm。对于运动类的游戏而言,不用携带额外控制器的好处完全可以弥补这点精度的下降。通过Kinect,玩家可以身体自如地加入运动或比赛:用脚射门、用手挥动打乒乓、身体倾斜控制皮划艇的漂流等。
关于这一话题后面会具体分析,值得注意的是,Kinect深度图像采样频率并不是产生延迟进而使空间精度下降的主因,延迟的主因是芯片处理速度和软件识别处理速度不够。我们相信,随着硬件发展和软件升级,Kinect的空间精度会不断提高。如果你希望通过Kinect做运动竞技分析,或是用于低成本电影的动作捕捉,空间精度和响应速度将是关键的技术评估点。

3.2.2 动作识别

动作识别的基础是骨骼跟踪,广义上识别的内容包含肢体运动、手势以及静态姿势。
美国著名心理学家艾伯特赫拉伯恩曾提出过一个公式:
信息交流的结果=7%的语言+38%的语调语速+55%的表情和动作
人们在人际交往中,多达93%的信息是通过非语言方式传递,其中又以肢体语言为主。比如在美剧《Lie to me》中,卡尔莱特曼博士无需测谎仪,无需确凿证据,即使嫌疑人保持沉默,也从其最终细微的表情变化和身体语言中洞察出端倪。因此,动作识别是“体感操作”的前提,引领着新一代的自然人机交互技术,也是Kinect for Xbox 360游戏的最大卖点,如图3-7所示。
我们可以把动作抽象为骨骼关节点的状态或运动序列。手语是一种较为复杂的手势,它的表达涉及动作的连续性和持续性,不同的组合可以表达丰富的词组或短句。
如何进行动作识别呢?最为朴素的算法是基于动作序列的算法分析。正如词组匹配算法那样,你会考虑准备一个足够长的队列,然后根据预设的算法不断地扫描,中间可以用一些决策树进行有效的删减;或者,你实现一个“有限状态机”,去触发你预先定义的动作事件。
《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

我们这里谈的动作识别包含两个层次的概念:
1)骨骼在某一时间点的状态,是为静态的姿势。比如图3-8所示是Kinect的“通用暂停或退出”姿势,玩家的左手倾斜举起,并与脊柱保持45度。
2)骨骼中的某一关节或是多个关节点在空间的运动序列,是为动态的行为。比如人挥动左手,或是用手在空气中划一个圈,或者双脚离地跳起,如图3-9所示。

《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

显然,动态的行为分析要比静态的姿势识别要复杂得多。这其中的区别,正如语音识别中“命令词识别”和“自然语义理解”一样。
Kinect游戏中的动作表达有大致可分为两类:
大开大合的肢体运动,比如运动、舞蹈或者武术。
手的运动,包括手指运动。
人体的各个关节从运动动力学的角度来看,有着不同的*度。其中手是人体*度最大的部位,它包含十根手指,除拇指外每根手指又有三个关节。通过手可以完成许多动作,简单的如挥手以引起别人的注意或表示再见,复杂点的如用手来控制镜像的机械手臂。翻译聋哑人的手语无疑是最具挑战的。Kinect手语识别示意图如图3-10所示。
《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

第6章会具体谈Xbox Kinect Hub的一些设计,其理念就是通过简单的手势来浏览信息、翻阅信息、暂停播放、返回主界面或是确定下一步的操作。
目前,Kinect for Window SDK v1.0中并不包含手势识别的部分,整个手在骨骼建模中只有一个点。但这并不意味着当前的Kinect版本不能进行相应的手势识别,你可以从最为原始的深度数据做起。这其中会有很多挑战,比如手指深度图像的精度不够,手指间的交替或是手指与身体的重叠都会产生很多噪声数据等。
微笑、害羞的表情、唇语,属于人脸识别的命题,虽不属于动作的范围,但又有共同之处。相信随着技术和硬件的提升,Kinect除了可以理解人类的行为外,也可以洞察人类的内在情感。

3.2.3 人脸识别

人脸识别是整个身份识别中最重要的一个组成部分,你的身份证、驾照或是毕业证上无一不记录了你的脸部照片。作为传奇人物,拿破仑在指挥作战中,不仅能准确地记住他的各个部队的具体战斗位置,而且能记住许多士兵的姓名和面容。
Kinect也将拥有如此博闻强识的本领,它能区分不同玩家、快速识别玩家的身份,从而提供更为个性化的体验,比如记住你上次听过的歌曲,或者最近玩过的游戏。通过人脸识别实现的个性化体验已经成为游戏体验的一部分,神奇之处恰恰在于你并没有做任何事情,你只是站在那里,Kinect通过人脸识别就知道你是谁,如图3-11所示。
“人脸识别”与“骨骼跟踪”类似,第一步首先定位人脸的存在,其次基于人的脸部特征,对输入的人脸图像或者视频流进行进一步的分析,包括脸的位置、大小和各个主要面部器官的位置信息,并依据这些信息,进一步提取每个人脸中所蕴涵的身份特征,并将其与已知的人脸进行对比,从而识别每个人的身份。
由于Kinect摄像头分辨率仅为640×480,在1.8m及以上距离的情况下,摄像头所能提供的面部的像素数据十分有限,并不适用于进行高维计算。另外,房间内光线会变,玩家时而接近时而远离Kinect,而且当玩家投入游戏时他们的面部表情也会改变,这些都会给人脸识别带来影响。还有,由于环境光照、色温和人表情的这种差异,会给人脸识别带来噪声。
目前,Kinect for Xbox的人脸识别采用了抽取人脸中层结构特征的折中方式,但这种方法无法提供100%的准确识别率(大约为85%)。前面我们提到过,这种纯二维的图片识别算法也被应用在Windows Live Photo Gallery中。同时,人脸识别还综合了着装的色彩以及玩家身高的分析,以帮助提高识别准确率。
抽象脸部特征作为Kinect的人脸识别的关键步骤。如果说Kinect骨骼跟踪是给每个玩家穿上动作捕捉“Marker”点,那么人脸识别中的脸部特征分解这一环节,恰恰就类似好莱坞电影面部捕捉的做法,如图3-12所示。
《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

人脸识别另外一个需要攻克的难点在于同一个人的变化。人的面部在不同照明、表情或姿势等因素的影响下产生的差异有时让对同一个人的识别产生不同的结果。
为了识别不同表情、不同光照条件下的人脸,联想推测模型的第一步是构建一个“通用”的人脸数据库。面部器官被分解成几个关键性的标志,如眼睛中心、嘴角和其他12个面部特征。这些信息作为识别引擎搜索到的不同条件下或以不同姿势呈现的人脸的基本“记忆”元素。下一步,将特定对象的面孔,如Kinect玩家的面孔与28种不同的“记忆”图像进行对比,也就是7种姿态乘以4种光照条件。识别引擎将对目标对象面部与记忆库存储的人脸展开“关联”,对一个或多个关键的面部特征进行匹配,如处于脸部阴影一侧并且正在向左看的眼睛等。然后,系统使用这些信息就对象脸部在不同姿势和不同光照条件下的样子做出科学的猜测。

《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

关于人脸识别的技术和算法有很多种,包括几何特征识别、神经网络、弹性图匹配、线段Hausdorff距离等,本书就不再展开,读者如有兴趣可参考相关资料。
Kinect for Xbox 360的人脸识别是基于彩色摄像头的信息,同时结合人的着装信息、身高来匹配的,属于纯二维的图片识别算法,并没有用到深度数据。你可以尝试基于Kinect提供的深度数据进行特征采集,提高人脸识别的精度。
提示 Kinect for Windwos SDK v1.5中增加了人脸跟踪的开发包。读者还可以访问face.com,它提供开发的API接口,方便你构造自己的人脸识别应用程序。

3.2.4 语音识别

语音识别的技术大家一点也不陌生,从前面影片中提到的HAL9000、IBM尝试过的ViaVoice,到现今苹果iPhone 4S Siri以及微软的TellMe服务,都是语音识别的产品。
从技术应用的深度及广度而言,语音识别丝毫不逊色动作识别、人脸识别。
语音识别包括很多层次的技术,如最为简单的“语音命令”、声音特征识别、语种识别、分词、语气语调情感探测等多个方面。
Kinect麦克风阵列捕获的音频数据流通过音频增强效果算法处理来屏蔽环境噪声。即使在一个大的空间,即使人离麦克风一定的距离,也能够进行语音命令的识别。Kinect阵列技术包含有效的噪声消除和回波抑制(Acoustic Echo Cancellation,AEC)算法,同时采用波束成形(Beamforming)技术通过每个独立设备的响应时间确定音源位置,并尽可能避免环境噪声的影响。
从前面的产品设计分析中我们可以了解到,Kinect for Xbox 360的语音识别也仅仅定位在简单的“语音命令”的层次。比如说“Xbox, Let抯 Play”,这里Xbox就相当于是一个命令提示符,后面的话对应着一些常用操作命令,如图3-13所示。
《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

提示 Kinect for Windows SDK v1.5是基于Microsoft Speech SDK v11.0来实现的。后面开发章节,我们会有具体的例子。目前,Kinect SDK v1.5尚不支持中文语音命令支持。
在Kinect for Xbox 360中,语音识别通常用于Xbox控制中心的导航、菜单控制,以及多媒体的播放。
你可以对着Kinect说“Xbox Kinect”,进入Kinect控制中心,如图3-14所示。
对着Kinect说出“Xbox”,系统就会提示“if you see it, just say it”。比如打开光驱就说“Xbox Open Tray”,如果想去下一页就说“Xbox Next”,如果想退出Kinect控制中心就说“Xbox Dashboard”。
想用Xbox 360看电影,那就吩咐Kinect吧:Xbox Play(播放)、Xbox Pause(暂停)、Xbox Next(下一页)…
《Kinect应用开发实战:用最自然的方式与机器对话》一3.2 基于“管道”的系统架构

上一篇:使用delphi 开发多层应用(六)kbmMW返回流到客户端


下一篇:TextView使用SpannableString设置复合文本