基于多摄像头监控的人体跌倒检测算法❋

2019-05-21 07:26魏振钢孔勇强魏兆强张小龙
关键词:细粒度前景摄像头

魏振钢, 孔勇强, 魏兆强, 张小龙

(中国海洋大学信息科学与工程学院,山东 青岛266100)

经济社会的发展使老龄化日益严重,空巢老人数量也在逐年增加,这种现象无论是在发达国家还是发展中国家都很普遍[1]。人们对老年人生命健康的重视造就了一大批专为老人服务的医疗保健系统,提高其晚年的生活质量。统计表明,跌倒是威胁空巢老人生命安全的主要因素之一[2]。当老人跌倒时,轻则受伤影响正常生活,重则失去意识威胁生命。对于高龄老人来说,很多时候跌倒会导致失去行动能力,从而无法及时呼救。因此,室内跌倒检测系统在学术界和工业界都得到了广泛关注。

由于跌倒检测系统可以自动识别老人跌倒而不需要专门护士照看,所以其市场前景十分广阔。目前主流的跌倒检测系统分为两大派:一种是基于传感器的穿戴检测设备;另一种是基于计算机视觉的监控识别系统。穿戴式设备通常采用加速度传感器[3],陀螺仪[4]或辅助报警按钮[5]来实现实时跌倒检测。然而这类设备有很多致命缺点,主要体现在以下两个方面。一方面是传感器设备必须定期充电或者更换电池,记忆力不好的老年人一旦忘记这点,就会导致设备因电量不足无法工作。另一方面,长时间穿戴这种设备会引起身体不适,这导致很多老年人经常不穿戴相关设备。此外,对于使用辅助报警按钮的穿戴设备来说,如果老人因跌倒导致昏迷,报警按钮就变得毫无意义了。

计算机视觉为分析各种复杂的人体行为活动并进行异常检测提供了有效途径。为了克服穿戴式跌倒检测设备的缺点,研究者们提出了很多基于视觉的跌倒检测方法。文献[6]提取人体轮廓图像,使用轮廓匹配算法量化人体姿态,最后采用混合高斯模型(GMM)来区分跌倒和其他行为。文献[7]提出一种基于前景提取的跌倒检测算法,提取前景图像的变化作为特征,采用支持向量机(SVM)对各种人体活动进行分类。文献[8]提取视频中的形状,形态以及运动3种特征,然后结合特征融合算法训练一个集成学习分类器,从而识别出跌倒行为。基于视觉的方法最大优点是不需要老年用户穿戴任何传感器设备,而是从视频数据中挖掘出有用的信息并进行分析。视频数据来源于安装在室内的监控摄像机,包含人在室内的各种活动信息。然后通过一系列算法识别人体的各种行为,从而检测出跌倒行为。

本文提出一种基于计算机视觉的人体跌倒检测算法。该算法包含一个两级检测过程,核心思想是由粗粒度到细粒度(Coarse-to-Fine granularity)。粗粒度检测是对前景二值掩膜采用矩形框法(Bounding box)进行分析,较为粗略地检测出有可能是跌倒的行为。细粒度检测是在粗粒度检测结果的基础上,对人体前景图像做更精确的形态分析,从而检测出真正的跌倒行为。虽然直接对前景图像做细粒度检测也能达到最终目的,但是会增加算法的复杂度。因此本文引入的粗粒度筛选策略可以大大提高算法的运行效率,满足应用系统的实时性需求。

本文主要贡献包括:(1)经典的矩形宽高比特征作为跌倒检测有很大的局限性,本文引入多摄像头投票机制可以有效克服其缺点,既能保证检测率也能保持较低的算法复杂度;(2)对经典的前景检测滑动高斯平均法进行了改进,使用选择更新策略来防止原更新机制的“过度更新”情况。而且引入二值图像连通域技术去除前景闪烁点以及较大的图像空洞。

1 算法概要

对于基于计算机视觉的跌倒检测系统来说,最大的挑战是从各种日常生活行为中识别出跌倒行为。人类在室内可能做出的日常行为大致包含3种状态:直立状态(走),中间状态(蹲、跪或坐)以及卧倒状态(躺)。其中直立状态行为最容易与跌倒区分。而卧倒状态行为则难以与跌倒区分,比如往沙发或床上躺这类行为与跌倒十分相似。然而正常的室内活动与跌倒还是有一定区别的,比如姿态变化的速度,人体在跌倒过程中,其姿态变化要比正常躺下快很多。

根据以上论点,本文提出一种基于前景提取和前景形态分析的跌倒检测算法。算法流程如图1所示。首先要进行背景消除,由于监控摄像机是静止的,我们的目标是分析人体行为,因此消除背景提取前景图像(二值掩膜)是很好的选择。第二步是采用形态学操作为提取出来的前景块画一个矩形边界,根据矩形的宽高比值对人体活动做粗粒度分析。受以往工作启发[9-10],我们规定:直立状态行为的比值小于1,中间状态行为的比值在1左右徘徊,跌倒行为的比值大于1。本文实验表明这种宽高比设定效果十分显著。粗粒度检测一般能排除全部直立状态的活动以及一大部分中间态活动。算法第三步是为人体前景绘制一个能恰好将其包含的椭圆形边界,对其形态变化做进一步分析。细粒度分析只针对粗粒度检测过程中未被排除的人体活动,这种机制既能保证算法的精确率,又可以大大提高算法的运行效率,使其能够不依赖于昂贵的设备就能应用于实时系统之中。由于宽高比检测有一个缺点就是无法识别人体垂直于镜头光轴方向的跌倒(即人体面对镜头向后跌倒的时候,其矩形宽高比不会大于1;注意面对镜头向前跌倒是可以检测出来的)。因此本文采用多摄像头监控来弥补这个缺点。在算法最后一步,我们引入一个简单的投票机制,根据装在不同位置的摄像头分析的结果进行投票表决,作为最后的检测结果。

图1 本文算法流程图Fig.1 Flow chart of the proposed algorithm

2 前景提取

前景检测(Foreground detection)又被称为背景减法(Background subtraction),目的是将视频中运动的物体从相对静止的背景中分离。本文采用文献[11]提出的滑动高斯平均法(Running Gaussian average)实现前景检测。首先建立并初始化背景模型,为视频帧的每一个像素保存其强度值,并且对其实时更新:

Bt=rIt+(1-r)Bt-1。

(1)

式中:Bt代表当前背景像素值;It是当前视频帧的像素值,像素值的取值范围为[0, 255];r是一个用来控制背景模型更新速度的超参数,其取值范围为[0, 1]。像素点分类策略如下式:

(2)

式中TB是一个给定阈值,用来衡量当前像素点与背景模型中相应位置的差距,合理分类前景和背景。然而这种更新机制的最大缺点是会存在“过度更新”情况,由于所有像素点在更新过程中都被用来更新背景模型,所以会在运动目标后方引入大块前景阴影。而且当前景目标停止运动时,相应位置会快速被更新为背景。本文对背景更新机制进行了简单的改进:

Bt=MBt-1+(1-M)[rIt+(1-r)Bt-1]。

(3)

式中M只能取值0或1。设t时间被判定为前景的区域为Ft,则M的取值条件如下:

(4)

结合公式(3)和(4)可以看出,对于在上一帧中像素值属于前景的区域,在背景模型中不会被更新。这种选择更新策略不会引入大块阴影,并且静止的前景也能够保留一段时间。

然而,对于在灯光照耀下的室内环境,用本方法进行前景提取是会有很多闪烁点和空洞。闪烁点主要是由于灯光以及摄像机自身性质产生的,空洞是由于运动目标走过的地方与自身的像素值很相近,导致相应区域被识别为背景没有更新。针对这两个问题,形态学中的开运算(相当于先腐蚀后膨胀)是一种经常被采用的方法。然而这种方法只能去除闪烁点以及填补较小的空洞,对于大的空洞区域是无法填补的。基于此,本文在现有更新机制基础上,对前景提取算法进行两方面的改进:闪烁点去除和空洞填补。本方法引入二值图像联通域(Connected component)概念,计算出更新背景的连通域,通过移除小面积的连通域去除闪烁点像素,并填充含有空洞的连通域。

图2 改进滑动高斯平均的前景掩模Fig.2 Foreground masks using modified running Gaussian average

具体来讲,首先进行图像中连通域标记,本文采用文献[12]提出的快速标记算法来计算并标记更新二值掩膜中的连通区域。然后定义一个连通域集合,假设L为连通域的数量:

(5)

3 粗粒度检测

粗粒度检测是通过分析前景图像的矩形边界来实现的,因此需要为人体前景画出合适的矩形框。在上一节中我们提到了二值图像的连通域标记,矩形框的绘制也是基于连通域的。具体来讲,标记过每个连通域后,对面积大于一个给定阈值(对于320 × 240的图像而言,此阈值为35比较合适)的前景块绘制矩形边界。如果只有一个满足条件的连通域的话,就会绘制出一个矩形边界。然而很多时候时候人体前景块是由多个连通域组成的,这时就可以将绘制出的多个矩形框合并为一个大矩形框。使用OpenCV库函数cvFindContours和cvRectangle能很方便地达到目的。图3给出了各种情况下绘制出的矩形框。

图3 不同人体活动的矩形框Fig.3 Bounding boxes of various human activities

假设矩形框的宽为w,高为h,我们规定正常人体活动的宽高比不会大于1。因此,如果w/h< 1,那么该活动就默认是正常活动,不需要进行细粒度检测。然而,满足w/h≥ 1的活动并不一定都是跌倒,也有可能是正常躺下或者大幅度弯腰等。所以对于粗粒度检测出来的候选动作,再对其前景形态变化做进一步分析,即细粒度检测。具体实现方法为:实时计算前景矩形框的宽高比,一旦宽高比大于1,就立即进行细粒度检测。

图4 本文算法对3种不同行为序列的检测示例Fig.4 Examples of the proposed algorithm on three action sequences

本文依据图像空间前景分割宽高比w/h≥ 1作为粗/细粒度检测控制条件。但这个控制条件与图像空间成像角度有密切关系。给定一个镜头,有部分跌倒状态前景块的宽高比不会大于1,因而无法启动细粒度检测,而且这种情况可能同时发生于多个镜头。当前供研究的数据集可能无法完全包含这些情况,因此在实际应用中,有两种方式可以弥补这类情况产生的误差。一个是减小宽高比设定,比如设宽高比大于0.8时就进入细粒度检测;另一种是适度放宽跌倒和非跌倒的票数比,比如设定如果半数摄像头判别当前活动为“跌倒”,就认定跌倒发生。

4 细粒度检测

如果一段前景活动序列没有在粗粒度检测中排除,那么我们就进一步分析相应视频序列的前景变化情况来判断是否出现跌倒。人类日常生活行为是复杂多样的,手持物品的运动更是极其常见,而相应物品也会被检测为前景图像的一部分。这时分析前景矩形框往往会得出错误结论(图3第一行最后一张“跪倒”的矩形框就是受物品干扰的情况),因此要排除物品对人体形态分析的干扰。利用统计矩(Moment)为人体前景绘制一个合适的椭圆边界是非常合理的选择[13-14]。设F(x,y)为一段连续的视频帧序列,其联合概率密度的矩M定义如下:

(6)

(7)

椭圆框的长轴(记为a)对应人体前景块,短轴(记为b)捕获了椭圆的方向信息。为了找到最合适的a与b,需要计算出相应的最大惯性矩MImax和最小惯性矩MImin:

(8)

根据公式(8),可以得到椭圆框的长轴a和短轴b:

(9)

本文第一节中提到,由于粗粒度检测无法识别出人体垂直于摄像机光轴方向的跌倒行为,这意味着算法不会为这类跌倒行为进行细粒度检测。因此,在细粒度检测中,我们主要针对不垂直于镜头光轴方向的跌倒行为。为实现这个目的,我们对一段连续时间内椭圆方向变化进行分析。首先必须量化这个变化过程,本文以椭圆长轴a与水平方向x之间的角度(记为θ)作为衡量指标:

(10)

根据公式(10),我们以一个时间段(通常是1 s)为单位实时计算θ的标准差(记为σθ)。假设一段视频序列帧速率为Nfps,那么时刻t对应的椭圆方向标准差定义如下:

(11)

式中θavg代表一段时间内θ的平均值。即如果一段视频帧速率为25 fps,那么至少从第25帧开始才有可能得到σθ的值。当人体跌倒的时候,前景形态将会大幅度变化,比其他正常活动更剧烈更快速,从而椭圆的方向变化也会很大。因此,当跌倒发生时,σθ的值会很大;而正常活动的σθ值会很小。利用这个性质可以有效区分与跌倒十分相似的人体活动(比如正常躺下与跌倒很相似,但是其σθ值却不会像跌倒时那么大)。我们规定如果σθ≥ 25,则认为跌倒发生。图4给出了几种不同动作视频序列的两级粒度检测结果。由图4可以看出,如果矩形框的宽高比不大于1的话,细粒度分析便不会启动。一旦发现宽高比大于1的行为,就立即绘制椭圆框并按公式(11)计算σθ。

表1 多摄像头跌倒数据集的定量描述Table 1 Quantitative specifications on multi-camera fall dataset

5 仿真及对照实验

本文算法在多摄像头跌倒数据集[15]上进行了仿真实验。数据集包含从8个室内监控摄像头中采集的视频数据,视频中既有各种日常活动,也有跌倒行为(见表1)。我们同时对8个摄像头中相同场景的视频进行检测,即建立了8个实时跌倒检测模型。然后引入投票机制,将每个模型对应的跌倒检测汇总进行投票表决出最终结果。如果人体在垂直于摄像头光轴方向向后跌倒,那么该摄像头对应的模型无法检测出跌倒行为。考虑到这一情况,我们将投票比例阈值设为3∶1。即8个摄像头模型中,至少有6个检测结果为跌倒的时候,才认为跌倒事件发生。为了评估本文算法的效果,我们采用文献[15]给出的度量标准:

·真阳性(True positive):包含跌倒的视频序列被检测为跌倒。

·假阳性(False positive):不包含跌倒的视频序列却被检测为跌倒。

·真阴性(True negative):不包含跌倒的视频序列没有被检测为跌倒。

·假阴性(False negative):包含跌倒的视频序列却没有被检测为跌倒。

我们规定:TP代表真阳性的个数,FP代表假阳性的个数,TN代表真阴性的个数,FN代表假阴性的个数。之后就可以得到算法的敏感度(Sensitivity)和特异度(Specificity):

(12)

本文算法与5个当前比较前沿的跌到检测方法(这些方法都是在多摄像头跌倒数据集[15]上进行的实验)进行了对比,对比结果如表2所示。

表2 不同跌倒检测方法的对比结果Table 2 Comparison of different fall detection methods

从表2可以看出,方法[7]的敏感度最高;方法[16]的特异度最高,但敏感度偏低;综合效果最好的是方法[8];本文方法有很高的敏感度和特异度,达到了当前先进方法的效果。在实验中我们发现本文方法错检了很多速度很快的人体活动,比如数据集中有相当一部分快速坐下,快速躺下的活动。因此本方法的特异度要比敏感度低很多。此外,由于遮挡和类间相似导致前景提取不准确也会导致检测错误。当前大部分跌到检测方法都是基于机器学习的,一般要有样本采集和训练的过程。相对于这些方法,本文算法最大的优点就是不需要耗时耗力的数据采集和训练,拥有较低的计算复杂度。并且本文算法对于日常生活中大部分活动可能都不会启动细粒度检测,这在实时系统中大大节省了资源。在低复杂度的前提下获得了很好的效果,证明本文算法是非常有实用价值的。

6 结语

本文提出了一种基于多摄像头监控的人体跌倒算法,包含从粗粒度到细粒度的两级检测过程。粗粒度检测能够筛选出大量变化幅度较小的日常生活行为,仅当类似跌倒的行为出现时才启动细粒度检测。这种机制不仅能够保证检测率,同时也大大减少了算法的计算复杂度。而且本文算法不需要数据采集和训练就能直接能够应用在实时监控系统之中。算法的缺点是对于变化速度较快的人体行为鲁棒性不够强,而且非常依赖于精确的前景提取。夜晚环境中前景提取捕捉不到任何信息。幸好近些年深度摄像头的出现可以弥补这一缺点,在无光环境也能捕获室内的深度图像。在未来的工作中我们会针对深度图像的跌倒检测进一步研究。

猜你喜欢
细粒度前景摄像头
融合判别性与细粒度特征的抗遮挡红外目标跟踪算法
浙江首试公路非现场执法新型摄像头
摄像头连接器可提供360°视角图像
我国旅游房地产开发前景的探讨
四种作物 北方种植有前景
基于SVM多分类的超分辨图像细粒度分类方法
离岸央票:需求与前景
基于型号装备?角色的IETM访问控制研究
基于web粒度可配的编辑锁设计
量子纠缠的来历及应用前景