【学习笔记】智能家居(11):Kinect在家庭智能监控系统中的应用
摘 要: 阐述了体感设备Kinect及其关键技术在家庭智能监控系统中的应用。利用Kinect设备,可以将其人体骨骼跟踪、深度数据探测、脸部识别、音频采集和声源定位、红外彩色摄像头等功能整合到家庭智能监控系统中,使家庭智能监控系统更加有效、精准,在整体性能上比传统的家庭智能监控系统有明显的提高。
1 Kinect设备的基本介绍及其先进性
Kinect是微软公司研制的一款体感外设,它是一种3D体感摄影机。起初是针对游戏主机XBOX360推出的一套外设产品,开始也仅仅适用在游戏领域,利用即时动态捕捉、影像辨识、麦克风输入、语音辨识等功能让玩家摆脱传统游戏手柄地束缚,以自己的身体作为遥控器在游戏中开车、与其他玩家互动、通过互联网与其他XBOX玩家分享图片和信息等。但是它高科技的含量和它本身的创意使得它逐渐应用于很多领域,随着Kinect for Windows的推出,越来越多的人投入到Kinect的研究中。
Kinect共有3个摄像头,中间的镜头是RGB彩色摄像机,主要用来对图像进行捕捉,左右两边镜头分别为红外线发射器和红外线CMOS传感器,作用是使得设备能识别3D空间。Kinect底部内置的用于语音识别的多点阵列麦克风系统可以为声音定位,而且还可以过滤背景噪声。此外,Kinect还搭配了追焦技术,底座马达可编程控制,会随着对焦物体的移动而转动从而能够获取最佳视角。
2 Kinect在家庭智能监控系统中的应用
在本家庭智能监控系统中将利用Kinect的以下几种关键特性。
2.1 骨骼追踪
Kinect的骨骼追踪技术是通过处理深度图像来建立人体各个关节的坐标,而Kinect的突出功能就是处理深度图像,它能够通过骨骼追踪技术来确定人体的各个部分以及他们的位置。深度图像指从观察视角看去,图像所包含信息与场景物体表面距离相关的一种图像或一个图像通道。与彩色图像相比,深度图像能直接反映物体表面的三维特征,且不受光照、阴影和色度等因素的影响,图1所示就是正常图像与深度图像的对比。
Kinect通过用20个关节点来表示一个骨架,如图2所示。当一个人进入Kinect的视野范围内时,Kinect就可以把他的20个关节点的位置找到,位置是通过(x,y,z)三维坐标来表示,Kinect就是通过这些坐标来识别人所做的复杂动作。x,y,z是深度感应器实体的空间坐标轴。坐标系满足右手螺旋规则,Kinect处于原点位置,y轴正向往上延伸,x轴正向往左延伸,z轴则与Kinect摄像头的方向相同,这些坐标表述的空间被称为骨架空间,如图3所示。
Kinect的两个深度传感器能够提供捕捉人体骨骼的功能,在目前最多能够同时定位6个人的骨骼位置,而且能最多同时获取两个人的骨骼追踪数据,站立模式可以跟踪20个关节点,坐姿模式可以跟踪10个关节点。
骨骼跟踪有两种跟踪模式,即主动模式和被动模式。在主动模式下,需要调用相关帧读取函数从而获得目标的骨骼追踪数据;在被动模式下,能够支持额外4人的骨骼跟踪,但是只能提供这4人的位置信息,无法获取详细的骨骼数据。比如说,如果Kinect视野范围内有6个人,Kinect能提供这6个人的具体位置,但只能提供其中两个人的关节点的数据,如图4所示。
在本监控系统中,Kinect能够同时跟踪6个人,并且能够确定他们的位置,它能够在上下方向移动从而扩展侦测视角范围,即使在夜间也可以侦查到是否有人在侦测视角范围内,就算人物出现身体遮挡、旋转和脸部被遮挡等情况也一样可以被辨别。Kinect还可以识别人的动作,如果被监控的人有可疑动作,将会实时报警,只是这种行为检测的技术,在本监控系统中只能很简单地应用,只能对一些特定的动作作出报警反应,在以后的功能扩展中可以在行为动作库中添加更多的动作实例并且能够有一定的动作行为预测功能。
本监控系统针对“不速之客”的来访进行探测和警告,Kinect会被安置在门窗等主要入口,所采用的算法是结合深度数据中的深度值数据和用户索引位实现一个近距离探测器。实现伪代码如下。
//用于获取目标物体的距离
Var depth=pixel>>DepthImageFrame.
PlayerIndexBitmaskWidth;
//用于创建用户索引编号
Var player=pixel>>&DepthImageFrame.PlayerIndexBitmask;
//遍历深度帧像素,判读Kinect监控区域内是否出现
//“不速之客”
If(player>0 && Depth>DetectionMinThreshold
&& depth<DetectionMaxThrshold)
{
//存在用户索引位数值不为0的像素,有“不速之客”出现
isInRange=true;
OnBodyDetection();
}
2.2 脸部识别
人脸识别是人的身份识别中最重要的一个组成部分,本监控系统就是通过人脸来进行身份识别的,其利用Kinect的人脸识别和骨骼追踪技术,对进入Kinect监控区域的人进行跟踪识别他们的身份,如果是陌生人,系统会发出警告,引起相关人员的注意。Kinect是伴随着游戏而生的,它能够通过脸部识别不同的玩家,从而提供个性化的体验,后来Kinect的人脸识别技术被应用在诸多领域中。人脸识别首先要判断人脸是否存在,其次是基于人的脸部特征对输入的人脸图像或者视频流进行进一步分析,包括脸的位置、大小和各个主要面部器官的位置信息,然后将这些面部特征信息进一步提取出来,并将其与人脸数据库进行对比,从而识别目标的身份。
目前,在体感游戏中,Kinect的人脸识别采用了抽取人脸中层结构特征的折中方式,但这种纯二维的图片识别算法只能提供85%的识别准确率,由于Kinect摄像头分辨率仅为640×480,在距离Kinect 1.8 m以上距离的情况下,摄像头所能采集的面部像素数据十分有限,并不适用于高维计算。而且,由于环境光照、色温和人脸表情的差异,会给人脸识别增加困难。
为了识别不同表情、不同光照条件下的人脸,一种新的人脸识别方法被提出来,这就是通过联想推测模型来识别人脸。联想推测模型的第一步是构建一个“通用”的人脸数据库。面部器官被分解成几个关键性的标志,如眼睛中心、嘴角等12个面部特征。这些信息作为识别引擎搜索到的人脸的基本“记忆”元素。第二步是将特定对象的面部与28种不同的“记忆”图像进行对比,也就是7种姿态乘以4种光照条件。识别引擎将目标面部特征与人脸数据库展开“关联”,通过一个或多个关键的面部特征进行匹配。最后系统使用这些信息来识别目标在不同条件下的人脸。
Kinect与传统的摄像头最大的区别在于增加了深度传感器,在现有的监控系统中,具备人脸识别功能的很少,具备人脸识别功能的往往会遇到识别率不高、效率低等问题,在基于Kinect的监控系统中,通过采用Kinect的景深摄像机和骨架识别,可以大大提高人脸识别的效率。
人脸识别模块需要实现的功能是将进入Kinect探测范围内的人脸识别出来,并判断是不是陌生人。然而,从视频流中实时识别出某个人的面部并非易事。最为简单的一种解决方案是首先检测出当前画面中所有人脸的位置,然后对每张人脸进行匹配。但是这种方法完全采用针对图像的人脸识别技术,在实时监控中并不实用。为了保证监控系统中人脸识别的有效性,本文使用实时学习的跟踪识别方法。在现有的实时学习-追踪-识别算法中,改进的TLD(Tracking Learning Detector)是一种效果比较好的跟踪算法。相比于其他跟踪算法,TLD跟踪算法最大的优点在于它能够通过对跟踪目标不断的学习来获取目标最新的外观特征,从而及时完善跟踪,达到比较好的跟踪效果。但即使是TLD算法,也存在着不足之处。在TLD算法中,所使用的知识主要来自于有时序关系的视频帧序列,这在一定程度上限制了其对空间信息的学习。而Kinect的深度摄像头恰好可以改善其不足之处,通过将Kinect捕捉到的深度数据传递给学习模块和跟踪器,在一定程度上可以提高TLD算法的准确性和可用性。但是Kinect的深度传感器返回的是比较粗糙的深度数据,这些数据只能反映物体的轮廓以及与整个物体的大概距离,不能反映物体表面精确的信息。在TLD算法中,学习和确认步骤是依靠物体表面的颜色特征来进行的,并且需要对比物体之间细小的差异,所以只能在追踪过程中使用深度信息来改进TLD算法。
本监控系统采用的追踪算法是以角点作为追踪特征的LK算法,将深度信息作为全局追踪的先验知识。在对视频图像执行追踪算法前,先对深度信息构成的灰度图进行简单的边缘提取,再对这些边缘信息进行追踪,从而能够对不同深度区域的位置变化进行粗略的估算;然后再对视频图像进行追踪,将估算的信息与追踪结果进行加权,从而得到最终的追踪结果。
Kinect的部分功能已经添加到家庭智能监控系统中,通过一个全新的设备来取代以往的传统摄像头,利用深度数据和骨骼追踪进行目标探测,通过人脸识别来识别目标身份,目前在传统监控系统的基础上只能实时地判断是否有人进入监控区域并识别身份,已经取得了较好的效果。Kinect是一个革命性的体感设备,还有很多的功能可以扩展,如果能很好地将它应用在监控系统中,将会带来监控系统的革命性变革。