APP下载

基于交叉滑动窗口模型算法的非接触心率测量方法

2020-06-03汤春明张凯凯王慧泉

天津工业大学学报 2020年2期
关键词:测量方法准确度人脸

汤春明,张凯凯,王慧泉,田 磊,于 翔

(1.天津工业大学 电子与信息工程学院,天津 300387;2.天津工业大学 生命科学学院,天津 300387;3.天津工业大学 工程教学实习训练中心,天津 300387)

心率是反映人身体健康状况的一项重要生理指标,对于诊断心脑血管等疾病具有重要意义。据相关数据统计,全世界每年死于心脑血管疾病的人数高达1 500 万人,居各种死因首位。因此,准确、及时、便捷的心率测量对于疾病的预防与诊断具有重要意义。

目前,测量心率主要应用心电图(electrocardiogram,ECG)和基于光电容积描记法(photoplethysmography,PPG)的脉搏血氧仪。利用心电图测量心率操作复杂,而且设备昂贵,不适用于日常监护使用;测量时需要将电极与被测者的皮肤进行紧密接触,不仅给被测者带来不便,而且对于皮肤脆弱的老人和新生儿来说并不适用。利用脉搏血氧仪进行心率测量,则需要用弹簧夹长时间夹住手指或者耳垂,这样会给被测者带来不适。基于上述种种原因,不断有学者提出非接触式的心率测量方法,包括基于微波或毫米波的多普勒测量[1]、热力学图像测量[2]等等。其中,基于远程光电容积描记法(remote photoplethysmography,rPPG)的非接触式心率测量方法由于其成本低、易操作等特点越来越受到人们的关注。

基于rPPG 技术的心率测量主要是通过从摄像头拍摄到的人脸彩色图像序列中提取出含有脉搏成分的信号,然后使用各种方法提取出心率。影响心率提取准确度的因素主要有光照变化以及人脸刚性(比如人脸不自觉地晃动)和非刚性(比如眨眼睛、说话等)的运动。为克服这些因素,不断有学者提出各种算法:RGB 通道差值算法[3]、运动放大算法[4]、血容量变化模型算法[5]等。这些算法主要分2 步:第1 步是准确提取rPPG 波形;第2 步是对波形进行处理,计算出心率。提取rPPG 波形主要有2SR[6]、POS[7]等算法,这些算法主要是从色度模型构建、颜色空间转换等角度进行思考的,在限定运动或者光照等条件下能够取得不错的效果。对波形进行处理时,绝大部分算法都是在时域和频域分别进行滤波后运用滑窗法进行心率提取,这种方法很难兼顾心率测量的灵敏度和准确度。当时间窗口过大时,虽然准确度有所提升,但是灵敏度降低,因此,很难迅速检测出心率的微小变化;当时间窗口过小时,灵敏度提升,但是准确度下降,使得测出的心率波动幅度较大,很难接近真实值。

为了有效解决以上问题,本文提出了一种基于交叉滑动窗口模型(CSWM)算法的非接触心率测量方法,能够同时兼顾心率测量的灵敏度和准确度,并且使用高效的SSD300 人脸检测模型[8]和KCF 跟踪算法[9]实现心率测量的实时性。通过在公开标准数据集中进行测试,证明本方法相关指标完全满足临床要求。

1 心率测量方法及过程

1.1 测量方法

当光源照射到皮肤表面时,大部分光在皮肤表面发生反射,这部分光可被认为是恒定不变的,并不携带生物信息;另一部分光进入到皮肤内层,这部分光除了少量被皮内组织吸收和反射外,大量的光线会被血红蛋白吸收和反射,其中反射光会穿过皮肤被摄像头捕捉,它携带着大量的人体生理信息,最主要的就是心率。

本心率测量方法主要由人脸检测、人脸跟踪、皮肤区域分割、感光趣区域(ROI)选取、构建交叉滑动窗口5 部分组成,测量方法流程如图1 所示。

图1 测量方法流程图Fig.1 Flow chart of measurement method

1.2 人脸检测

常用的人脸检测器有Viola-Jones 人脸检测器[10],这是一种基于机器学习的将简单特征级联进行判别的检测器,该检测器检测人的正脸效果较好,但是对于人的侧脸检测效果较差。另外还有基于人脸特征点检测的DRMF[11]算法以及可变模型拟合[12]算法,这些算法对于人脸有遮挡的情况无法进行有效检测。

本文选择SSD300 模型作为最终的人脸检测器,它不仅可以检测到侧脸,而且对于旋转以及扭动一定角度的人脸都有很好的检测效果。在数据集VOC2007的测试下,当batch size 大小为1、Boxes 个数为8 732、输入图像分辨率为300×300[8]时,检测速率达到46 fps,完全满足实时性的要求。

1.3 人脸跟踪

视频相邻帧之间具有很强的相似性,帧率越大相似性越明显。因此,不必对每一帧都使用SSD300 模型检测人脸,故采用“检测-跟踪”循环交替的策略,检测频率和跟踪时间都可以通过参数来设置,从而提高心率测量速度。目前使用较多的跟踪算法是KLT[13](Kanade-Lucas-Tomasi)算法,该算法速度较快,但由于该算法是基于脸部特征点和仿射变换实现ROI 更新的,故受特征点变化影响较大,容易导致跟踪失败或者ROI 剧烈变化,从而对后期处理造成影响。另外还有基于显著性色度特征[14]和卡尔曼滤波技术[15]等进行目标跟踪的算法。通过对已知的跟踪算法在速度、准确度等方面进行比较后,本文使用KCF 算法对目标进行跟踪。KCF 算法是通过机器学习方法训练分类器,以当前帧的目标区域为正样本,背景为负样本,经过训练后得到一个判别模型用于跟踪。该算法中,当选用高斯核及梯度直方图(HOG)特征[9]进行跟踪时,在数据集[16]中的测试速率达到172 fps。此外,KCF 算法对于部分ROI 遮挡的情况同样可以进行准确跟踪,如图2 所示。

图2 上、下、左、右部分脸部遮挡情况下的KCF 跟踪效果Fig.2 KCF tracking efficiencies of upper,lower,left and right face with partial occlusion

1.4 皮肤区域分割

ROI 中不仅有人脸,还有部分背景区域,这些部分并不含有心率信息,故采用皮肤区域分割的算法去除背景区域。本文使用YCrCb颜色空间的Cr分量并结合Otsu 算法[17]对ROI 进行皮肤区域分割。另外,由于眼睛、嘴巴区域几乎不含心率信号,而且眼睛眨动和嘴巴说话会影响脸部皮肤的空间位置,从而对心率提取造成影响,故采用图像处理形态学中的腐蚀操作去除这些区域。经过对不同大小的腐蚀模板的腐蚀效果进行比较分析后,最终选择大小为12×12 的腐蚀模板。皮肤区域分割并腐蚀[18]后的效果如图3 所示。

图3 部分UBFC-RPPG 数据集中肤色分割并腐蚀后的效果Fig.3 Segmentation and erosion efficiency of partial UBFC-RPPG data set of skin color

1.5 ROI 选取

常用的ROI 选取方法是使用整个矩形框区域,然后对该区域中所有像素在R、G、B 三通道分别取均值作为原始信号,这种方法极易受到脸部局部区域变化的影响。文献[19]证明人脸不同区域所含信号强度是不同的,因而如何综合利用人脸不同区域的信号,从而提高心率测量的准确性成为众多学者关注的重点。文献[20]中将矩形框均分成5×5 的大小,然后对每一小块分别进行处理,再综合各个结果得到更为准确的心率;文献[21]将矩形框中的每一个像素分别作为独立的信号源用于信号提取,该方法计算量大,处理速度慢。综合考虑心率测量的速度和准确度之后,本文将矩形框均分成2×2 的大小,得到4 个sub-ROI,如图3所示,然后分别对每一个sub-ROI 进行处理,最后将结果进行融合,得到最终的实时变化的心率。

1.6 构建交叉滑动窗口

选取ROI 之后,使用对脸部运动和光线变化具有鲁棒性的CHROM 算法[22]提取rPPG 波形,然后用交叉滑动窗口从rPPG 波形中计算出心率。图4 为交叉滑动窗口示意图。

图4 交叉滑动窗口示意图Fig.4 Schematic diagram of cross slide window

图4 中,总时间窗口(简称总窗口)长度为L,每个总窗口被分成了n 个子窗口,并且每个子窗口与总窗口的起点相同。子窗口w1,w2,…,wn的长度分别为L1,L2,…,Ln。这些子窗口长度之间的关系为:

L 的大小以及子窗口的个数对心率测量的效果有着重要影响。L 过大,心率测量的灵敏度会下降;L 过小,则准确度会下降。子窗口的个数决定着心率测量的精度和复杂度。通过设置不同大小的L 以及不同个数的子窗口数进行实验,结果发现L 设置为12,子窗口的个数设为7 时,心率测量效果最佳。7 个子窗口的长度分别为 6~12 s,step 为 1 s。

设其中一个子窗口的rPPG 波形信号为:

式中:i 表示 sub-ROI 的标号,i=1、2、3、4 时,分别表示 ROI 中左上、右上、左下、右下的 sub-ROI;j 表示子窗口的标号。总窗口的长度是固定的,每次向后平移1 s,然后再将其分为n 个子窗口(子窗口向后扩展的长度也是1 s),再对每个子窗口进行心率计算,最后根据所有子窗口的心率综合得到总窗口的心率。

子窗口和总窗口的心率计算过程如下:对每个sub-ROI 的每个子窗口的 rPPG 信号 S(t)i,j进行 FFT(fast fourier transformation),将其从时域信号变换为频域信号,然后计算其功率谱密度Wi,j(f),取最大的功率谱密度对应的频率分量作为脉搏率PRi,j(f)的近似值:

此时该子窗口对应的心率为:

为评估 rPPG 信号 S(t)i,j的质量,参考文献[22]中信噪比的计算方法,计算S(t)i,j的功率谱密度Wi,j(f)的信噪比:

式中:[PRi,j(f)-h,PRi,j(f)+h]表示脉搏率PRi,j(f)附近的一个小区域,实验中h 取值为5/(Ln·FR)(Hz)效果最佳,FR 为视频帧率(fps);[B1,B2]为带通滤波器的通带范围(正常的脉搏率范围),B1=0.75 Hz,B1=4.0 Hz。

总窗口的心率是根据每个子窗口的信噪比选择的心率得到的。具体过程为:对于总窗口中的每一个子窗口,取对应4 个sub-ROI 中信噪比最大的心率作为该子窗口的心率,此时第j 个子窗口计算出的心率为:

然后去掉HRj中的最大值和最小值,再根据信噪比计算剩余n-2 个心率的权重:

式中:SNRj为HRj对应的Wi,j(f)的信噪比,此时总窗口的心率为:

当总窗口向后移动一个步长,再重复上述过程,得到一个新的心率,以此类推,最终得到整段视频实时变化的心率。

2 实验验证

2.1 实验环境

公开数据集UBFC-RPPG 中的视频(帧率为30 fps)在录制的同时,实验者展示给被测者一个数学游戏,要求其解决并尽可能保持脸部静止,从而营造出被测者心率变化的情况。因此,使用该数据集能够验证本心率测量方法的准确性与实时性。与此同时,实验者使用CMS50E 穿透式脉搏血氧仪记录被测者实时变化的心率(PPG 方法)作为金标准用于对照比较。在使用该数据集进行实验时:软件部分,使用Microsoft Visual Studio 2017 集成开发环境,通过C++编程并调用openCV3.4.4 中相关函数;硬件部分,CPU 为i5-4210M双核处理器,独立显存为2 GB,DDR3 低电压内存为4 GB。

2.2 CSWM算法验证

从数据集UBFC-RPPG 的46 组数据中找出有代表性的(不同年龄、性别等)10 组(第 13、38、46、35、10、42、36、40、43、09 组)数据用于验证 CSWM 算法的有效性,每组包含1 min 左右的视频及同时用脉搏血氧仪测量得到的心率。常用的评价指标有:

(1)平均误差Me,其中误差指的是金标准测量的心率减去本方法测量的心率;

(2)误差的标准差SDe;

(3)均方根误差RMSEe;

(4)心率结果的平均错误率HRMERP;

(5)皮尔逊系数P,用于衡量HRrPPG和HRPPG之间的线性关系,取值范围为[-1,1];

(6)Bland-Altman一致性系数BA,用于衡量HRrPPG和HRPPG变化的一致性程度,越接近于1 表示一致性越强。

在金标准中,视频每一帧计算出一个心率值,精度为1 bpm,为了便于与本测量方法测得的心率进行比较,本文每30 帧(即1 s)取30 个心率的均值作为这一秒被测者的心率。另外,由于本测量方法使用的测量窗口大小为12 s,故可认为第1 个窗口测得的心率为视频中第12 s 被测者的心率,因此,金标准的心率从第12 s 开始取,每过1 s 计算1 个心率均值,直到结束。

分别使用本测量方法计算所选10 组视频的实时变化心率,并根据对应的金标准计算上文所述的6 项指标,结果如表1 所示。

表1 10 组视频计算得到的心率与金标准之间的误差分析指标Tab.1 Error analysis indexes of heart rate between gold standard and calculation from 10 videos

由表1 可以发现,本测量方法计算得出的心率与对应的金标准计算得出的心率的平均误差、误差的标准差、均方根误差小于3 bpm,心率结果的平均错误率为2.078 3%,即平均准确率为97.921 7%,而且皮尔逊相关系数达到0.902 544,Blant-Altman 一致性系数BA 达到0.962 302,高于临床标准的0.95,证明该测量方法计算得出的心率完全满足临床要求。

为了更直观地看出本测量方法(rPPG 方法)计算出的心率和金标准(PPG 方法)测出来的心率的一致性,做出视频中人物的心率变化图和相关性分析图以及Bland-Altman 图,第10 组和第38 组实验结果分别如图5、图6 所示。

图5 第10 组实验结果Fig.5 Experimental results of group 10

图6 第38 组实验结果Fig.6 Experimental results of group 38

由图5、图6 可以看出:本测量方法计算出的心率与金标准测出的心率重合度较高,在心率变化图中的趋势变化非常一致;相关性较强,在相关分析图中的拟合曲线非常接近“Y=X”;一致性较好,在Blant-Altman 图中与金标准的差值更接近于零,且更集中于mean±1.96σ 范围内。由以上分析可知,基于CSWM算法的非接触心率测量方法与金标准的心率测量结果非常一致,表明该方法不仅准确度高,而且能够实时反映心率的变化趋势,相关测量指标也满足临床要求,从而证明了该方法的有效性。

3 结 语

针对传统接触式心率测量方法中存在的设备昂贵、操作复杂的问题,本文提出了一种基于CSWM 算法的非接触心率测量方法。首次使用了人脸检测模型SSD300,达到了良好的人脸检测效果,为后期处理做了铺垫;首次使用Otsu 算法对ROI 进行皮肤区域分割,有效去除了背景以及眼睛眨动、嘴巴说话产生的干扰;与此同时,为了提高心率测量的速度,使用KCF跟踪算法对人脸进行跟踪,做到了心率测量的实时性,从而满足现实场景中的应用需求;在心率提取部分,首次提出CSWM 算法取代了传统的固定窗口大小的滑窗法,兼顾了心率测量的准确度与灵敏度。在UBFCRPPG 数据集中进行对照实验,结果表明,该方法的平均准确率达97.921 7%,所计算出的心率与同时用脉博血氧仪测出的心率之间的Bland-Altman 一致性系数达0.962 302(临床标准为0.95),完全满足临床要求。需要说明的是,本文针对的是普遍的单人场景下的心率测量方法,对于多人的心率测量还需作进一步研究。

猜你喜欢

测量方法准确度人脸
基于OpenCV的车身匹配间隙测量方法
影响重力式自动装料衡器准确度的因素分析
有特点的人脸
一起学画人脸
玻璃窗上的人脸
航空发动机推力测量方法
论提高装备故障预测准确度的方法途径
Word中“邮件合并”功能及应用
基于应变原理随钻钻压测量方法研究
自由风扇声功率级测量方法与测量不确定度