李光发,胡国清,陈 佳,蔡盛伟,付西敏
(1.华南理工大学 机械与汽车工程学院,广州 510000;2.广东药科大学 中医学院,广州 510000;3.广东寰宇智慧医疗科技有限公司,广州 510000)
心率作为人体的一个重要生理参数,能够反映人体的健康水平。当今世界,发达国家和部分发展中国家都面临人口老龄化的问题,如何为这一庞大的群体提供一个有效的健康监测系统,是一个亟待解决的问题。鉴于目前我国心血管疾病的发病率逐年升高,人们的健康状况越来越严峻的现状,心率信号的检测受到越来越多的重视[1]。当前,主流的心率检测方式采用接触式的设备,如指尖脉搏仪、心电图仪等[2]。这些接触式的测量方式需要穿戴特定设备进行检测,其优点是较为准确,但缺点是需要佩戴。随着近年来医疗技术水平的提升,心率检测技术已经由传统的接触式设备[3]逐渐转向非接触的方式发展。特别是在新冠肺炎病毒的极强传播性情况下,接触式检测设备容易带来病毒的传播风险[4],同时也给老年人的心率检测带来较大的身体负担[5],不利于恢复健康,因此非接触式的心率检测方式受到更加广泛的关注。
当前,非接触式心率检测算法主要基于远程光电容积描记法技术 (remote Photoplethysmography,rPPG)原理来进行算法研究和设计,再将设计好的算法与硬件系统结合,以实现非接触式的心率检测。rPPG是一种光学测量技术,通过分析面部区域反射光的变化,来检测血管组织内血容量的变化。由于血液比周围组织吸收光的能力更强,因此血液的体积变化会相应地影响光的透射和反射,依据这个原理,来国内外很多研究人员使用rPPG技术提出了非接触心率检测的解决方案。如de Haan等人[6]提出基于色彩空间投影的非接触心率检测算法,该算法直接使用面部视频来进行人体心率的估计;Wang等人[7]提出了基于一种皮肤反射模型的心率检测算法POS (Plane-Orthogonal-to-Skin),该算法结合面部皮肤的光学反射和生理特性来进行心率检测;Chen等人[8]提出基于深度学习的非接触心率检测模型DeepPhys,该模型通过学习面部视频序列中包含的心率信息来实现非远程心率估计;陈怡然等人[9]利用mini PC和外接摄像头等设备搭建了一个心率检测系统,可在真实环境下实现非接触式的心率检测,并进行实时通信;刘衍等人[10]利用移动端设备和服务器等设备开发了一套心率检测系统,可通过移动设备进行数据采集和保存,并对检测分析后的数据进行展示。这些非接触的心率检测研究在某种程度上解决了接触式心率检测存在的问题,并提出了一定的创新,但是它们大都围绕算法进行开发和研究,并且在真实环境的检测过程需要依靠复杂的硬件设备[11],其使用的范围有限,灵活性较差,难以在实际情况下得到广泛的普及应用[12]。
为此,针对非接触式心率检测研究过程中存在的问题,根据现有的经典非接触心率检测算法,开发了一款可在日常生活中使用的新型远程心率检测应用。该应用通过采集面部视频,并使用软件内嵌的心率检测算法对数据进行分析,实现实时的心率估计,记录日常的心率数据,让用户可以直观地了解身体心率的变化,为人们了解自己的心率健康状况提供宝贵的指导。
rPPG技术起源于光电容积描记法技术(photoplethysmography,PPG)[13],其原理为人体肤色会因血容量改变而发生变化,通过分析该信号变化的频率,进而估计人体的心率及血容量脉搏波等生理信号。
在正常的生理情况下,人体皮肤真皮层毛细血管中血红蛋白会对外界入射光产生散射,由于血液的流动会导致血管中血红蛋白含量发生变化,从而引发反射光强度的变化[14]。血液的流动由心脏周期性的收缩和舒张引起,因此血液的流动与心跳周期保持一致,并直接使得反射光强度呈现周期性变化[15]。
根据比尔-朗伯定律,具有特定波长的光进入一定厚度的介质后,该介质厚度l和介质吸光物质浓度c的乘积,与介质的吸光度ε成正比,如式所示。
(1)
式中,A表示吸光度,I0为入射光强度,I为透射光强度;ε为摩尔吸光率(L·mol-1·cm-1),c为物质浓度,l为液层厚度。
在稳定的光源照射下,使用消费级摄像头能够捕捉到该反射光强度的变化,在其拍摄的图片中表现为每帧图片中人体肤色的微弱改变,因此对该变化的频率进行分析即可获得人体心率[13]。
本节将提出一种新颖的非接触式心率检测方式的解决方案,主要内容包括对该方案的总体流程展开介绍;分析非接触心率检测基于的皮肤光学反射原理;研究用于实现非接触心率检测功能的欧拉视频放大技术。
根据人们对心率检测技术的需求,提出一种基于移动端设备的非接触心率检测解决方案。该方案的总体流程是:将非接触心率检测的相关算法整合到所开发的安卓应用中,通过应用的人机交互界面实施心率检测操作,进而实现随时随地的人体心率检测功能。
所开发的心率检测应用的心率检测过程由3个主要步骤构成,如图1所示。首先采集人体皮肤图像数据,该步骤通过移动端的摄像头来实现;接下来进行数据处理,数据处理包括数据预处理:对ROI区域进行检测和对图像的裁剪,心率分析检测:进行心率信号的提取工作,获取信号后的处理:对信号进行滤波处理和功率谱分析;最后是输出展示估计出的心率数值,并在移动端上的应用进行展示,便于人们实时观察自身心率情况。该应用具有简洁的操作界面,使用流程简便,灵活性高,具有很强的实用价值。
图1 心率检测流程
皮肤光学反射模型是基于人体皮肤组织的生理学和光学原理,提出的一种用于非接触式心率检测的模型,该模型是从面部视频数据中进行心率信息提取的理论基础[16]。如图2所示,在恒定的外界光源照射下,使用摄像头采集从皮肤反射和散射出来的图像数据,直接从皮肤表面反射出去的光称为镜面反射,还有一部分光线进入皮肤内部被吸收或者发生漫反射[17],这部分经由毛细血管后产生的漫反射光中携带心率信息,因此可通过研究这部分光线生成的图像来分析人体心率。
图2 皮肤光学反射模型
为了从获取的皮肤图像数据中提取出心率,需建立数学模型,将获取的图像中皮肤像素值的反射定义为RGB通道中的时变函数,表示为:
Ck(t)=I(t)·(vs(t)+vd(t))+vn(t)
(2)
其中:Ck(t)表示在t时刻图像RGB值的向量;I(t)表示光照强度水平,受光源强度控制;vs(t)表示镜面反射,代表由皮肤发出类似镜面的发射光,vd(t)表示漫反射,代表皮肤组织散射和吸收的光;vn(t)表示摄像头的量化噪音。
vd(t)、vs(t)和I(t)3个分量中都包含与心率相关的部分[7],同时也包含各种外界干扰噪音,其具体表达公式如下所示:
vd(t)=udd0+up·p(t)
(3)
vs(t)=us·(s0+φ(m(t),p(t)))
(4)
I(t)=I0·(1+φ(m(t),p(t)))
(5)
其中:ud表示皮肤组织的单位颜色向量;d0表示反射光强度中静止不变的部分;up表示血红蛋白吸收光线的相对脉搏强度;p(t)表示血容量脉搏波信号;us表示光源频谱的单位颜色向量,s0和φ(m(t),p(t))分别为镜面反射的静止与变化量;m(t)表示非生理信息的变化,例如光源强度和面部表情的变化;I0是光照强度的静止部分,I0·φ(m(t),p(t))是由照相机观测到的光照强度的变化;φ(·)和φ(·)表示生理信息与非生理信息之间的相互关系,它们通常是非线性的。
在以上模型中,可将镜面反射与漫反射的静止部分可以融合成一个单一的整体,用来表示皮肤静止部分的反射,如下所示:
uc·c0=us·s0+ud·d0
(6)
其中:uc表示皮肤反射的单位颜色向量;c0表示反射强度。
整理以上公式,并将其中时变分量的乘积项略去(因为该项为高阶微量),可得式:
Ck(t)≈uc·I0·c0+uc·I0·c0·φ(m(t),p(t))+
us·I0·φ(m(t),p(t))+up·I0·p(t)+vn(t)
(7)
其中:心率信号p(t)为目标信号即心率信号,非接触心率检测方法即为从原始数据集将该信息提取出来。该信号的特点是具有周期性且与心跳周期频率一致,但是由于该信号十分微弱并且容易受到外界环境的干扰,因此需要通过合适的信号处理算法来进行分析才可从中提取出可用的心率信息。
欧拉视频放大算法可用于视频图像中的颜色放大[18],增强人体面部以及其它皮肤区域的肤色变化效果,提升目标信号的信噪比,进而实现准确的心率预测。本节将结合皮肤光学反射原理,对实用欧拉视频放大技术实现心率检测的过程展开分析,其过程主要包括空间滤波、时域滤波和目标信号放大。
2.3.1 空间滤波
欧拉视频放大技术的实现首先需要对图像数据进行空间滤波。通过建立拉普拉斯金字塔或者高斯金字塔,获取图像数据中的不同空间频率的基带。高斯金字塔是常见的对图像颜色空间信号放大的方式[19],建立高斯金字塔的方式一般为从底层开始对图像进行一层一层向上的迭代计算。处理过程包括:使用低通滤波器对图像进行平滑处理,对平滑之后的图像进行下采样,获得一系列尺寸的图像。采样过程如下式所示:
(8)
其中:Gk(x,y)表示第k层高斯金字塔图像;w(m,n)表示二维可分离函数,且是具有低通特性的窗口函数。
在使用高斯金字塔的计算过程中,图像会因为卷积滤波和下采样而丢失部分高频细节,因此Burt等人[20]提出拉普拉斯金字塔的方式,通过将高斯金字塔的每一层图像减去上一层图像,再进行上采样和高斯卷积以得到处理后的图像,这种方式通常与高斯金字塔配合使用,并且在图像颜色变换方面相较于高斯金字塔能够获得更好的效果。该操作表示为:
Lk(x,y)=Gk(x,y)-Up(Gk+1(x,y))⊗G5×5
(9)
其中:Up表示向上采样,将源图像(x,y)位置的像素映射到目标图像(2x+1,2y+1)的位置;⊗表示卷积;G5×5表示尺寸为5×5的高斯内核。
2.3.2 时域滤波和信号放大
时域滤波用于从空间滤波后获得的基带中提取心率信号。由式中可知,时域滤波的处理对象为包含时间参数t的项,最终的目标为滤除与心率信号无关的分量,提取目标心率信号p(t)。实际的操作中,一般采用滤波器来实现该操作。例如提取[45,180]BPM区间的心率信号,则对信号属于[0.75-3.0]Hz的频率区间进行带通滤波。在欧拉视频放大技术中,一般采用窄通道的滤波器例如理想带通滤波器[9]来对信号滤波,可避免对其它频段信号的放大,减少噪音的影响。
完成时域滤波即可获得指定频率范围内的心率信号,接下里对提取出来的信号进行放大,以提升心率信号的信噪比。此处需结合带通滤波的过程进行分析,将时域滤波后得到的信号表示为I(x,t),则在t时刻的x点处像素值可表示为[18]下式:
(10)
式中,δ(t)表示变化信号。所需的处理目标是将变化的信号δ(t)放大α倍,如式所示:
(11)
为了将变化的部分δ(t)提取出来,接下来使用一阶泰勒级数逼近式来近似式,得到式:
(12)
在理想状态下对信号I(x,t)进行时域上的带通滤波,时不变分量h(x)项被滤除,随时间变化的项δ(t)被保留,滤波后结果如式所示:
(13)
(14)
联立式-,可得:
h(x+(1+α)δ(t))
(15)
式表示在t时刻,变化信号δ(t)放大为(1+α)δ(t)。通过这种方式即可将原本微弱的肤色变化增强,使得不可见的肤色变化能够被人眼观察刀,可视化视频中的心率信息。
2.3.3 心率估计
在经欧拉视频放大技术对图像数据处理之后,还需对该处理得到的信号进行后处理以便用于准确地估计心率。输出信号后处理为基于BVP信号的功率谱分析,该分析过程包括两个步骤,分别是BVP信号的滤波及其功率谱密度分析,具体过程如下:
1)计算欧拉视频放大技术获得视频每帧得像素均值,得到BVP信号,再对该BVP信号进行滤波处理,滤除人体心率以外的频率噪音,仅保留人体心率范围内的频率。对于一段经过离散采样获得的BVP原始信号x(t),假设信号长度为N,其自相关函数估计为Rx(n),如式所示:
(16)
使用快速傅里叶变换将该时域信号转换成频域信号,并将通频带区域外的频率置零,实现对该信号的滤波操作。对式进行傅里叶变换可得式。
(17)
式中,T表示信号的采样时长,[w1,w2]表示通频带。
功率谱密度表示单位频带内的信号功率。对于BVP信号而言,功率谱密度曲线图中峰值点对应的频率即为BVP信号的频率,该频率即为心率的频率。根据式可以绘制出BVP曲线对应的功率谱密度图,图3展示了一段BVP信号的功率谱密度图。
图3 BVP信号功率谱密度图
从图3中可知,最大功率对应的频率为0.97 Hz,根据心率转换公式,可求出该信号对应的心率为58.5 bpm。
HR=60·w
(18)
式中,HR表示心率,单位为次每分钟。
系统的软件部分主要为移动端设备中的安卓应用[10,21]。该应用设计过程包括功能需求分析、人机交互界面设计和心率检测算法封装等步骤。
基于实际使用的需要,对开发的应用进行功能分析。所开发的应用应包括用户登录,图像数据信息获取,心率的分析与计算,检测结果展示等功能,各项功能的具体描述如下。
1)用户登录功能:包含登录页面,可以实现不同用户的登录,需要登录时对登录用户的用户名以及登录密码进行验证,完成该步骤后方可进行登录主界面。
2)数据获取功能:通过所开发的应用调用移动端摄像头,采集外界图像数据,并将所采集的图像数据信息送入应用内部进行分析。
3)心率检测功能:调用检测算法,使用欧拉视频放大技术对图像数据进行分析,进而计算出人体的心率及脉搏波信号,并将心率数据和BVP数据展示在主页面上,实现实时监控心率状态。
综上分析可得,该心率检测应用各个模块实现的功能如表1所示。
基于移动端心率检测应用的功能需求,本节选取了开发过程所需的软硬件,并根据选型进行应用界面的设计。表2列出了开发过程所需的软件和硬件设备,主要包括电脑和移动端设备的配置、型号参数,基于Android studio的开发平台和相应得软件库等。
表1 心率检测界面及功能需求
表2 软硬件选型
用户登录与心率检测界面设计:
在应用开发过程,首先需要对登录界面进行设计。所开发的登录界面元素包括登录用户名、密码输入框、logo、“登录”和“取消”按钮。其次是对心率检测页面的设计,心率检测的主界面包括左上角预览窗口、图像展示主窗口、BVP曲线展示窗口、心率展示窗口、“开始检测”、“保存”和“暂停”按钮。图4表示完成设计的应用界面。
图4 登录界面与检测界面示意图
完成应用界面的设计后,还需将心率检测算法封装到应用后台中,用以处理获取的图像数据。本文采用欧拉视频放大算法用于心率检测,由于python语法简单,灵活性高,并且拥有丰富而强大的库,满足欧拉视频放大算法的编写要求,因此使用python语言编写该算法的代码程序,并封装在应用后台中。应用的前端界面采用Java代码编写,后台的心率检测算法与写前端之间通过Chaquopy插件实现数据交互,其实现逻辑如图5所示。
图5 Java层与Python层的交互
如图5表示应用前端与后端数据的交互,应用前端采用Java代码编写,内容包括登录页面、心率检测主页面、展示结果等部分的编写,后端为使用python编写的心率检测算法,内容包括数据预处理、心率的实时检测和数据后处理功能的编写。其实现逻辑如下:前端将摄像头采集到的图像数据使用python可读取的方式进行编码,传入后台的心率检测算法中分析,以获得心率;计算出来的心率数据再送入前端中并在主界面中展示出来。启动心率检测按钮后,该应用自动以4 s的时间间隔来刷新心率,以实时展示人体的心率情况。
为验证所开发的应用在心率检测方面的有效性,本节将在真实环境中开展实验测试,以检验其检测结果的准确性。实验选用小米7 Pro智能手表作为真实心率检测设备,该智能手表搭载了光学心率传感器,可接收皮肤反射光以实现接触式的心率检测[22],检测过程方便、操作简单且具有较高的检测精度,因此将其检测结果作为心率真实值进行误差计算有较高的可信度。实验条件如图6所示。
实验以如下方式进行:在外界光源充足且稳定的情况下,使用智能手表和心率检测应用对被测者的心率进行同步测量,并记录两种方式的检测结果,实验过程中一共采集了两组数据,每组数据15个值。接下来对两组测量结果进行误差分析。
为研究应用测得心率的准确性,本节将使用以下评价指标进行评估,分别为均方根误差(root mean squared error,RMSE)、平均绝对误差(mean absolute deviation,MAE)、皮尔逊相关系数(pearson correlation coefficient,ρ)和平均绝对误差百分比(mean absolute percentage error,MeRate),其计算公式如下所示。
1)均方根误差:
(19)
2)平均绝对误差:
(20)
3)皮尔逊相关系数:
(21)
4)平均绝对误差百分比:
(22)
以上评价指标中,标准差、均方根误差、平均绝对误差和平均绝对百分比误差的数值越小,说明真实值与预测值之间越接近;反之,当它们的值越大时,说明预测值与真实值之间存在较大误差;皮尔逊相关系数取值范围为[-1,1],当该值接近1或-1时,说明真实值与预测值存在很强的正相关关系或负相关关系,当该值为0时预测值与真实值不相关。
智能手表及心率检测应用测量得到的两组数据如表3所示,根据评价指标计算的相应误差值如表4所示。从表4数据中可以看出,两组心率检测数据的均方根误差为2.72,平均绝对误差为2.47,平均绝对误差百分比为4.00%;而皮尔逊相关系数为0.64,说明测量值与真实值间有较小的误差和较高的相关性,该心率检测应用可作为心率检测的重要参考。
Bland-Altman是一种数据绘图方法,可用于分析两组不同方式测量数据之间的相关性。本节对两组心率数据进行Bland-Altman一致性分析,根据表3中两组数据绘制一致性界限图形,以研究心率检测应用获得的数据与真实数据间一致性强弱,其结果如图7所示。
从图7可以看出,两组心率数据间的1.969倍标准差置信区间为(-4.958 8,5.624 9),差值平均值为0.333 3,图中所有数据点均位于一致性区间范围之内,因此测量值与真实值之间具有较强的一致性,结果说明本心率检测系统具有一定的稳定性与可靠性,对实际情况下的心率检测具有一定的指导作用。
表3 心率真实值与应用检测值
表4 检测值与真实值间的误差
图7 测量值与真实值间的Bland-Altman图
心率作为人体的基本指标之一,能反映人体的健康状况,因此心率检测对评估人们的健康状况有重要作用,为此设计开发了一款基于安卓移动端设备的非接触式心率检测应用,该应用具备简洁的人机交互功能,只需安装登录即可进行功能操作,并且实现了随时随地的心率检测功能,为用户提供了一种监控自己心率状态的便捷检测方式。该心率检测应用内部封装了欧拉视频放大算法,该算法能够有效地实现非接触式的心率检测,并通过应用前台与后台之间的数据交互,将检测结果在应用的主界面展示出来。在实际环境的检测结果表明,该心率检测应用测得数据的均方根误差达到2.72,皮尔逊相关系数达到0.64,且与真实心率具有较强的一致性,表明该系统对人体心率检测有足够的准确性和稳定行,为人体健康管理提供了较强的指导作用。在后续的研究工作将进一步丰富应用的功能,加入数据功能、远程医疗和危险预警等功能,并通过改善算法来进一步提升检测精度。