李光發,胡國清,陳 佳,蔡盛偉,付西敏
(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,且與真實心率具有較強的一致性,表明該系統對人體心率檢測有足夠的準確性和穩定行,為人體健康管理提供了較強的指導作用。在后續的研究工作將進一步豐富應用的功能,加入數據功能、遠程醫療和危險預警等功能,并通過改善算法來進一步提升檢測精度。