一种基于rgb-nir摄像头的非接触式实时心率检测方法
技术领域
1.本发明属于图像视频处理领域,具体是一种基于rgb-nir摄像头的非接触式实时心率检测方法。
背景技术:2.在2020年发布的《中国心血管健康与疾病报告2020》显示,中国心血管病死亡占城乡居民总死亡原因的首位,其中农村为46.66%,城市为43.81%,已经成为威胁人们生命健康的头号杀手;因此,心血管病的预防、监测、治疗等工作显得尤为重要。
3.近几年来,基于视频的非接触式心率检测的研究在计算机视觉领域引起了很多关注;该方法主要利用远程光电容积脉搏波描记法,其基本原理:当光照经过皮肤组织然后再反射到接收端的光敏传感器时,获得的光信号强度是会有一定变化的;除去人体肌肉、骨骼、静脉和其他组织等等对光的吸收基本恒定的区域,流经皮肤下的动脉血管对光的吸收或者衰减却是时刻变化的,这种周期性的变化导致皮肤颜色轻微变化,从而通过分离血容量脉冲(blood volume pulse,bvp)信号来得到相应的生命体征估计;与传统的心率测量方法相比,该方法的最大优势是它的非接触式、低成本和便捷性,非常适合在日常场景下使用。
4.目前,基于rppg的心率检测方法主要面临的挑战是环境光照的变化和人体头部运动的影响;在实际场景中,环境光照往往是变化的,这种变化可能会带来周期性变化的噪声信号,对最终的心率信息检测造成较大的影响;特别是在当光照较暗时,皮肤对光照的反射和吸收量较小,并且摄像机在成像时会引入较多的噪声,这些因素会给生理指标的测量带来一定的挑战;在检测的过程中,受试者由于眨眼、说话、呼吸或者其他原因造成头部的运动,会引起人脸皮肤反射光的变化,进而影响摄像头对人脸皮肤周期性颜色变化的捕捉,如何消除这一影响,也是基于rppg的心率检测所面临的一个重要挑战。
5.在相同的光照环境下,造成人脸区域颜色变化的因素会比周边为背景区域多出由于人脸皮肤区域血液脉冲信号而引起的这部分信号分量,而两者都会存在着相同的由于光照变化而导致的区域颜色周期性变化的信号分量。
技术实现要素:6.(一)解决的技术问题
7.针对现有技术的不足,本发明提供了一种基于rgb-nir摄像头的非接触式实时心率检测方法,解决现有背景技术中提到的问题。
8.(二)技术方案
9.为实现以上目的,本发明通过以下技术方案予以实现:
10.一种基于rgb-nir摄像头的非接触式实时心率检测方法,包括如下步骤:
11.s1、使用rgb-nir摄像头采集人脸图像;
12.s2、使用opencv定位、识别和获取每帧图像内每个人脸的特征点,并将其分为若干
面部区域;而后建立基于高斯核密度估计的背景模型,根据面部区域得到若干背景区域;
13.s3、基于面部区域得到原始信号,将经过滤波处理后的原始信号作为原始心率信号;基于背景参考区域得到背景信号;
14.s4、经验模态分解得到本征模态分量;
15.s5、使用正交投影变换算法对本征模态分量作相似度分析,提取得到心率信号曲线;
16.s6、对心率信号曲线作峰值统计,估计出心率值;
17.s7、实时采集数据,重复上述步骤后得到实时心率。
18.进一步的,在所述s1中,
19.打开rgb-nir摄像头采集一段包含人脸的视频,得到rgb版和nir版的视频各一段;采用基于时间轴上滑动窗口的切片操作将原视频划分为10s的短视频。
20.进一步的,在所述s2中,
21.创建基于opencv中的dnn模型的人脸检测器,对rgb版视频的每一帧图像进行人脸检测并获得人脸区域,利用dlib库获取人脸特征点,并根据得到的人脸特征点将人脸区域划分成四个面部区域:前额区域、左脸区域、右脸区域和下颚区域,面部区域分为rgb版和nir版;建立基于高斯核密度估计的背景模型,以人脸区域质点为中心,利用搜索算法选取人脸区域周围的四个背景区域作为参考区域;
22.利用检测到的人脸特征点,计算前后两帧人脸特征点之间的欧氏距离,若小于预先设定阈值dist,则可认为同一张人脸,依此来实现对人脸的追踪;
23.否则,结束当前心率估计流程,重新以当前帧为第一帧开始重复s2;进一步根据人脸特征点提取面部的感兴趣区域:前额(a),左边面颊(b),右边面颊(c)和下嘴唇中心(d);
24.背景提取方法具体为,令x1,x2,
…
,xn为某像素的最近前n帧的灰度值,x
t
为该像素在当前t时刻的像素值,则该像素的概率密度函数为:
[0025][0026]
其中,公式(1)实质是用高斯核函数在样值点x1,x2,
…
,xn做内插形式的连续函数,那么可依据下式来获取背景点:
[0027][0028]
其中,t为阈值,m
t
(x,y)中0表示背景点,1表示前景目标点。
[0029]
然后从当前短视频中提取背景区域作为参考区域。
[0030]
进一步的,在所述s3中,
[0031]
所述原始信号提取是基于面部区域,提取g和n通道值并做均值化操作,将得到的g通道和n通道序列与输入时间轴一一对应,得到一组原始信号;
[0032]
所述背景信号提取是基于背景区域,提取r、g、b和n通道值并做均值化操作,将得到的r、g、b和n通道序列与输入时间轴一一对应,得到一组背景信号;
[0033]
得到原始心率信号和背景信号的具体过程为:
[0034]
首先,将同一时刻的rgb图像和nir图像作时空融合处理,分别获得混合前和混合
后的图像面部区域与参照区域g和n通道均值序列;
[0035]
然后,根据设定值获取时间轴,对上述序列进行非线性最小二乘法拟合,得到时间轴上的一维信号曲线;
[0036]
最后,采用带通滤波器对原始信号和背景信号曲线进行滤波,消除明显的噪声,然后将滤波后的原始信号作为原始心率信号,滤波后的参照区域信号作为背景信号。
[0037]
进一步的,在所述s4和s5中,
[0038]
所述bvp信号曲线提取是通过对原始心率信号和背景信号,采用经验模态分离的方法,将原始心率信号和背景信号分解为各个相互独立的成分的叠加,得到多个imf,然后通过正交投影运算得到bvp信号曲线;
[0039]
具体获得心率信号曲线的步骤为:
[0040]
首先,对原始心率信号和背景信号作基于经验模态分解的盲源信号分离处理,对每一个信号都得到若干个分离后的imf分量和一个残差分量;;
[0041]
而后,使用正交投影变换算法对分离后的imf分量作相似度分析,提取原始心率信号组中与背景信号组中相似度最低的一个imf分量,将该imf作为bvp信号曲线。
[0042]
进一步的,在所述s6中,
[0043]
所述心率信息估计是对时域上的bvp信号曲线作快速傅里叶变换,并计算频域响应最大值,通过频域上的峰值及对应频率值计算估计心率。
[0044]
(三)有益效果
[0045]
本发明提供一种基于rgb-nir摄像头的利用人脸皮肤区域和背景参考区域估计心率信息的方法,以提高在环境光照变化条件下心率检测结果的准确率;
[0046]
利用远程光电容积脉搏波描记法实现了准确的心率测量;与现有技术相比,具有以下优势:
[0047]
一是,根据rgb和nir图像计算提取结果,且通过将人脸图像与环境背景的对比一定程度上排除了光照的影响,准确性较现有技术有所上升;
[0048]
二是,选取适合医疗健康、家用环境的摄像头,使用场景扩大到健康监测用,符合心血管疾病“预防大于救治”的原则。
附图说明
[0049]
图1是本发明的整体流程图;
[0050]
图2是本发明提取面部感兴趣区域的示意图;
[0051]
图3是本发明的将原始心率信号曲线基于经验模态分解得到的本征模函数示例;
[0052]
图4是对面部皮肤区域和背景区域分解得到的imf函数相似度实例及心率估计示例。
具体实施方式
[0053]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。此外,下文为了描述方便,所引用的“上”、“下”、“左”、“右”等于附图本身的上、下、左、右等方向一致,下文中的“第一”、“第二”等为描述上加以区分,并没有其他特殊含义。
[0054]
一种基于rgb-nir摄像头的非接触式实时心率检测方法,包括如下步骤:
[0055]
s1、使用rgb-nir摄像头采集人脸图像;
[0056]
打开rgb-nir摄像头采集一段包含人脸的视频,得到rgb版和nir版的视频各一段;采用基于时间轴上滑动窗口的切片操作将原视频划分为10s的短视频;
[0057]
具体为,初始化设定摄像头帧率为f,当前帧计数fcount=0,清空服务器队列queue,设定布尔值isblocked=false表示可进行信号传输;
[0058]
当打开摄像头开始采集,fcount将对每帧图像计数,并基于rtsp协议实时获取当前采集到的图像;
[0059]
以下步骤对图像的处理仅会涉及对当前queue内0至10*f的图像做处理。
[0060]
s2、使用opencv定位、识别和获取每帧图像内每个人脸的特征点,并将其分为若干面部区域;而后建立基于高斯核密度估计的背景模型,根据面部区域得到若干背景区域;
[0061]
创建基于opencv中的dnn模型的人脸检测器,对rgb版视频的每一帧图像进行人脸检测并获得人脸区域,利用dlib库获取人脸特征点,并根据得到的人脸特征点将人脸区域划分成四个面部区域:前额区域、左脸区域、右脸区域和下颚区域,面部区域分为rgb版和nir版;建立基于高斯核密度估计的背景模型,以人脸区域质点为中心,利用搜索算法选取人脸区域周围的四个背景区域作为参考区域;
[0062]
背景提取方法具体为,令x1,x2,
…
,xn为某像素的最近前n帧的灰度值,x
t
为该像素在当前t时刻的像素值,则该像素的概率密度函数为:
[0063][0064]
其中,公式(1)实质是用高斯核函数在样值点x1,x2,
…
,xn做内插形式的连续函数,那么可依据下式来获取背景点:
[0065][0066]
其中,t为阈值,m
t
(x,y)中0表示背景点,1表示前景目标点。
[0067]
然后从当前短视频中提取背景区域作为参考区域;背景区域应该满足条件:
[0068]
一是,与面部区域任意像素不重叠;
[0069]
二是,区域内像素变化波动尽可能的小。
[0070]
上述的背景区域为通过高斯核密度估计的背景建模方法所得到的视频背景,然后以人脸区域质心为中心,顺时针方向从12点、3点、6点和9点方向开始搜索,最终分别取到四个背景区域,每个背景区域的大小为20
×
20,人脸区域质心与背景区域中心的默认初始距离为max(width
face
,height
face
)+40。
[0071]
参考区域选取具体步骤如下所示:
[0072]
(1)获取图像宽度weight和高度height,建立字典类型coveredmap,用以记录被人脸覆盖的区域;
[0073]
(2)遍历每一帧图像,对当前帧图像中的人脸记录下质心点坐标[c_x,c_y]和人脸
半径r,在coveredmap中添加记录为[key=[c_x,c_y],value=r];其中,以人脸两侧鬓角的中心点作为质心,质心到下巴的直线距离作为半径;
[0074]
(3)通过随机数得到图像图像中某坐标[p_x,p_y],将该坐标依次与coveredmap中的key计算距离dp,如果dp大于r,则跳出当前判断;
[0075]
如果dp始终不大于r可以认为当前坐标是一个潜在的参考区域选取点,记录potentialpoints[i]=[p_x,p_y],并更新coveredmap记录[key=[p_x,p_y],value=d];重复该步骤k次,得到包含k个潜在参考区域选取点的数组potentialpoints;
[0076]
其中,d和k为输入常数;
[0077]
(4)遍历每一帧图像,对于每一个潜在的参考区域选取点,计算其g通道值是否波动超过
±
10%,如果超过则舍弃该点,并将该点从potentialpoints中移除;最终得到的potentialpoints中的坐标即认为是参照区域的中心点。
[0078]
具体为:
[0079]
对于每一帧图像,采用利用opencv中的readnetfromcaffe方法加载dnn模型:res10_300x300_ssd_iter_140000.caffemodel,对帧图像中的人脸目标进行定位,
[0080]
然后使用dlib库中的类frontal_face_detector的detector方法获取帧图像中人脸区域内的68个特征点的坐标,记为[face_point1(x,y),
…
,face_point68(x,y)]。
[0081]
利用检测到的人脸特征点,计算前后两帧人脸特征点之间的欧氏距离,假如小于预先设定阈值dist则可认为同一张人脸,依此来实现对人脸的追踪,否则结束当前心率估计流程,重新以当前帧为第一帧开始重复步骤2;进一步根据人脸特征点提取面部的感兴趣区域(前额(a),左边面颊(b),右边面颊(c)和下嘴唇中心(d));
[0082]
注:本技术提到的感兴趣区域也可称为面部区域。
[0083]
s3、基于面部区域得到原始信号,将经过滤波处理后的原始信号作为原始心率信号;基于背景参考区域得到背景信号;
[0084]
所述原始信号提取是基于面部区域,提取g和n通道值并做均值化操作,将得到的g通道和n通道序列与输入时间轴一一对应,得到一组原始信号;
[0085]
所述背景信号提取是基于背景区域,提取r、g、b和n通道值并做均值化操作,将得到的r、g、b和n通道序列与输入时间轴一一对应,得到一组背景信号;
[0086]
得到原始信号和背景信号的具体过程为:
[0087]
首先,将同一时刻的rgb图像和nir图像作时空融合处理,分别获得混合前和混合后的图像面部区域与参照区域g和n通道均值序列;
[0088]
然后,根据设定值获取时间轴,对上述序列进行非线性最小二乘法拟合,得到时间轴上的一维信号曲线;
[0089]
最后,采用带通滤波器对原始信号和背景信号曲线进行滤波,消除明显的噪声,然后将滤波后的原始信号作为原始心率信号,滤波后的参照区域信号作为背景信号。
[0090]
具体的,
[0091]
对于rgb视频和nir视频在同一时间上的一帧图像,作以下处理:
[0092]
(1)使用双边滤波(bilateral filter,bf)和加权最小二乘滤波(weighted least squares,wls)对nir图像进行滤波操作,得到处理后的图像y1,y2;与原图i_nir相减,得到细节层图像y3,y4,即i_nir-y1=y3,i_nir-y2=y4;对y3和y4取平均,得到nir图像的细节
信息y_nir;
[0093]
(2)将rgb图像转到ycbcr空间内,对y层进行加权最小二乘滤波处理,得到rgb图像的信息y_rgb;
[0094]
(3)将y_nir和y_rgb相加即得到融合后的图像在ycbcr空间下的y层,即y_nir+y_rgb=y;
[0095]
(4)将y和原图的cbcr层重新组合,转化到rgb空间,即得到融合后的rgb-nir图像。
[0096]
对于融合后的rgb+nir图像,以及原图像,分别有如下操作:
[0097]
(1)对于原rgb图像,分别提取面部区域和背景区域g通道值并求均值,得到序列g_face和g_back;
[0098]
(2)对于原nir图像,需先转化到rgb空间后再做同样处理,得到序列n_face和n_back;
[0099]
(3)对于融合的rgb-nir图像,得到g-n_face和g-n_back。
[0100]
根据帧率可计算出每帧图像相对第一帧的相对时间,得到时间序列time=[t(1)....t(30)],与上述序列g_face=[gf(1)...gf(30)]一一对应,得到坐标点集合g_face_node=[gf-t(1)...gf-t(30)],预设y=func(x)=a*x^5+b*x^4+c*x^3+d*x^2+e*x+f,基于非线性最小二乘法求取系数,得到最优拟合曲线的函数y=func_gf(x);同理对于序列g_back,n_face,n_back,g-n_face,g-n_back,可以计算得到func_?(x)对func_gf,func_nf,func_gnf做均值处理,得到bvp信号曲线func_face;对func_gb,func_nb,func_gnb做均值处理,得到背景信号曲线func_back;采用带通滤波器对上述一维信号曲线进行滤波,得到滤波后的func_face_fil和func_back_fil。
[0101]
s4、经验模态分解得到本征模态分量;s5、使用正交投影变换算法对本征模态分量作相似度分析,提取得到bvp信号曲线;
[0102]
所述bvp信号曲线提取是通过对原始心率信号和背景信号,采用经验模态分离的方法,将原始心率信号和背景信号分解为各个相互独立的成分的叠加,得到多个imf,然后通过正交投影运算得到bvp信号曲线;
[0103]
具体获得心率信号曲线的步骤为:
[0104]
首先,对原始心率信号和背景信号作基于经验模态分解的盲源信号分离处理,对每一个信号都得到若干个分离后的imf分量和一个残差分量;;
[0105]
而后,使用正交投影变换算法对分离后的imf分量作相似度分析,提取原始心率信号组中与背景信号组中相似度最低的一个imf分量,将该imf作为心率信号曲线。
[0106]
具体的,
[0107]
对于每一条滤波后的信号曲线做经验模态分解emd处理,会得到分离后的k个imf分量和一个残差分量,将分离后的分量曲线序列记为imfs=[imf(1)....imf(k)];
[0108]
其中k为确定值且imfs结果是唯一确定的;
[0109]
对每个bvp信号分解得到的imf(i),计算与背景信号分解得到的imfs中所有imf的相似度,基于投票机制计算最终相似度similar(i)其中相似度最低的imf(j),可以认为包含了最多的心率信息,记为心率信号曲线characteristic_curve。
[0110]
s6、对bvp信号曲线作峰值统计,估计出心率值;
[0111]
所述心率信息估计是对时域上的bvp信号曲线作快速傅里叶变换,并计算频域响
应最大值,通过频域上的峰值及对应频率值计算估计心率;
[0112]
扫描心率信号曲线characteristic_curve,统计峰值个数p,峰值个数即为10秒内的心跳波动次数,返回10秒内的估计心率heart_rate=p/10。
[0113]
s7、实时采集数据,重复上述步骤(s1-s5)后得到实时心率。
[0114]
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。