BreathPy
* Una
libreria per l’estrazione della frequenza respiratoria basata su Remote PPG
1st Vena Mael Vittorio
dept. of information technology
Università degli studi di Milano
Milano, Italia
contact@maelvena.it
Abstract—La respirazione è un processo fisiologico di importanza vitale per gli esseri umani, che comprende una serie di
attività utili ad assicurare un adeguato apporto di ossigeno ai
tessuti e lo smaltimento dell’anidride carbonica prodotta dal
metabolismo cellulare. Una frequenza respiratoria alta o bassa
è in genere indice di un problema in atto, e quando esce dallo
standard, di solito, significa che l’organismo ha un’insufficienza
respiratoria che tende a compensare con l’aumento del numero
di atti respiratori nel tempo. Per questo motivo la frequenza
respiratoria è un indice fondamentale per stabilire lo stato di
salute di un paziente. L’obiettivo di questo progetto è quello
di riuscire tramite metodi algoritmici ad estrarre la frequenza
respiratoria da un soggetto senza un conatto fisico e in modo
automatico.
I. I NTRODUZIONE
Per misurare la frequenza respiratoria è necessario poggiare
una mano sull’addome o sul torace e contare il numero di atti
respiratori a seconda dei movimenti eseguiti. Questa procedura
è lenta, richiede una pressione ed è prona ad errori, per questo
motivo nel tempo si è cercato di capire se fosse possibile
estrarre questa frequenza con altre tecniche. La mancanza di
una diagnosi veloce e accurata, infatti, porta alla morte di più
di 2 milioni di bambini all’anno nei paesi in via di sviluppo,
[1] dato che potrebbe essere ridotto tramite l’introduzione di
tecnologie che rendano questa diagnosi più veloce e precisa.
Un criterio essenziale presente in molte linee guida per la
diagnosi della polmonite nei bambini malati è la valutazione
di una frequenza respiratoria elevata ( 40 respiri al minuto). È
noto, infatti, che la frequenza respiratoria è strettamente legata
alla frequenza cardiaca, se essa sale per un’intensa attività
fisica del soggetto, anche la frequenza respiratoria sale, per
aumentare la ventilazione polmonare e soddisfare il fabbisogno
di ossigeno e facilitare l’espulsione del biossido di carbonio.
Al contrario, un soggetto in apnea registrerà un abbassamento
della frequenza cardiaca.
Quello che si è quindi cercato di fare in letteratura [2] è
cercare di stimare la frequenza respiratoria tramite il segnale
PPG (fotopletismografia) ottenuto tramite un pulsiossimetro.
Un pulsossimetro applica la legge di Beer-Lambert per
stimare l’ossigenazione dell’emoglobina. La legge descrive
che l’intensità della luce diminuisce esponenzialmente quando
viaggia in un mezzo assorbente e l’assorbimento dipende
dalla lunghezza d’onda. L’emoglobina ossigenata assorbe la
luce infrarossa e trasmette la luce rossa, mentre l’emoglobina
ossigenata si comporta in modo opposto. In un pulsiossimetro
due diodi luminosi emettono una luce rossa (660nm) e una
infrarossa (940nm) i quali vengono utilizzati per illuminare
attivamente il tessuto del paziente in modo alternato. La luce
non assorbita da ciascun led viene misurata con un fotodiodo
e il rapporto tra i due segnali permette di ottenere il livello di
ossigenazione del sangue, ma soprattutto il volume di sangue
nel dito nel tempo con un fotoplestimogramma (PPG) che ha
una componente pulsante e una costante. Dalla componente
pulsante è possibile ottenere la frequenza cardiaca.
II. S TATO DELL’ ARTE
A. Legame tra Frequenza respiratoria e Frequenza cardiaca
Il tronco encefalico, una sorta di stazione dalla quale transitano i messaggi da e per il cervello, è la struttura che connette
direttamente quest’ultimo al midollo spinale ed è diviso in
tre parti (mesencefalo, ponte e midollo allungato), che nel
loro insieme consentano di controllare funzioni vitali come
il respiro, la deglutizione e le funzioni vasomotorie. Questi
due segnali (respiratorio e cardiaco) sono quindi estremamente
legati tra loro andandosi ad influenzare reciprocamente.
B. Tecniche di estrazione della frequenza respiratoria tramite
PPG
La frequenza respiratoria modula la forma d’onda del segnale cardiaco come mostrato in fig. 1 in 3 modi :
1) La varizazione della frequenza cardiaca è sincronizata
con il ciclo respiratorio (aritmia sinusoidale respiratoria).
La frequenza cardiaca aumenta durante l’ispirazione
e diminuisce durante l’espirazione causando una variazione della frequenza di respirazione e della forma
d’onda (RIFV).
2) La presssione intratoracica provoca uno scambio di
sangue tra la circolazione polmonare e quella sistemica
che provoca una variazione di intensità nella respirzione
(RIIV)
3) Una diminuzione della gittata cardiacca dovuta a un
ridotto riempmento ventricolare provoca una variazione
dell’ampiezza della respirazione (RIAV).
Oltre alle variabili controllate, però, sono presenti anche
variabili estranee che mascherano l’effetto respiratorio del
segnale PPG, come ad esempio variabili fisiologiche, come la
Fig. 1. Segnali estratti dalla PPG. Immagine proveniente da [1]
Fig. 2. Estrazione della frequenza con più intensità. Immagine proveniente
da [1]
disidratazione che porta a una variabile d’ampiezza più forte
o malattie croniche come il diabete.
Pre-processing: per l’estrazione della frequenza respiratoria
è necessario estrarre dal segnale PPG due componenti periodiche :
1) Pulsazioni regolari del battito cariaco : RIAV
2) Pattern a frequenza più bassa appartennte alla RIIV
Il primo step è quello di applicare un filtro passaalto per
rimuovere la componente dc del segnale. questa fase viene
eseguita nel pulsiossimetro.
Pulse segmentation: il PPG viene segmentato in impulsi utilizzando la tecnica della sliding windows. L’unico parametro
da definire è quindi quello della lunghezza dei segmenti. Dopo
la segmentazione, ogni impulso PPG viene rappresentato come
un segnale a se stante da cui estrarre l’ampiezza dell’impulso,
l’intensità e il periodo .
C. RR Estimation
1) RIFV viene calcolato utilizzando una trasformata di
Fourier veloce (FFT) su il segnale estratto dall’analisi
del periodo dei picchi ricampionato a 4Hz. Lo spettro
viene infine analizzato per trovare la frequenza con
massima potenza all’interno dell’interallo.
2) RIIV: l’intensità massima degli impulsi viene utilizzata
per estrarre la RIIV. Come prima i dati del segnale vengono ricampionati a 4Hz tramite interpolazione lineare.
3) RIAV: come nei casi precedenti il segnale proveniente
dall’analisi della potenza dei picchi viene ricampionato
e ottenuta la frequenza con maggior intensità come
mostrato in fig. 2.
Smart Fusion: la tecnica di Smart fusion è un processo di
fusione che elimina i campioni con deviazione standard ¿ 4
respiri al min ottenendo invece la media tra i tre segnali dei
campioni rimanenti.
D. Remote Photoplethysmogram
La rPPG utilizza registrazioni video della pelle misurando
piccole variazioni di riflessione della luce indotte dalla quantità
di sangue nei vasi. Questo metodo consente l’estrazione di
parametri fisiologici come la frequenza cardiaca senza il
contatto. Questi tipi di algoritmi possono essere utilizzati
con webcam a basso costo in situazioni di luce ambientale
controllata. I principi dietro questo metodo sono simili a quelli
della PPG clasica : si misura la luce riflessa dalla pelle e da
questa si deduce la circolazione sanguigna vedendo quanto
questa viene assorbita in funzione della quantità di sangue
nelle arterie.
Per ottenere un segnale rPPG il video viene prima segmentato in pixel-skin e non skin; da quelli skin viene estratto il
colore e viene fatta una media spaziale con tutti gli altri in
modo da ridurre il rumore.
Il segnale 1D ottenuto è effettivamente l’rPPG ed è molto
simile alla PPG, con una qualità minore.
E. PyVHR
PyVHR è un framework che supporta i metodi principali
per l’estrazione della frequenza cardiaca rPPG, insieme a una
solida valutazione statistica delle prestazioni dei metodi. Il
framework è composto in :
1) una pipeline strutturata per monitorare l’input, l’output
e il controllo principale degli algoritmi rPPG e dei loro
parametri;
2) disponibilità all’utilizzo di più dataset;
3) api per la valutazione statistica delle prestazioni dei
metodi.
Oltre all’estrazione della rPPG è possibile, tramite pyVHR,
stimare il BPM e confrontarlo con quello estratto tramite PPG,
come mostrato nelle fig. 3 e fig. 4.
III. B REATH P Y
BreathPy è la libreria sviluppata per permettere l’estrazione
della frequenza respiratoria tramite fotopletismografia, sia
essa remota o meno. All’interno sono implementate diverse
tecniche che provengono dal framework di Charlton [2] e
anche la struttura del codice segue i blocchi logici dell’articolo
citato. Tramite le api, infatti, è possibile definire i metodi che
si preferisce utilizzare per l’estrazione e nel caso valutarne
la bontà tramite il confronto con un segnale ground truth
passabile come parametro.
Fig. 5. BVP frame
Fig. 3. BPM estratto dal file
Fig. 6. Plot dei picchi
Fig. 4. BPM estratto con pyVHR
2
A. Estrazione del BVP
Il primo passo per utilizzare la libreria è quello di ottenere il
segnale rPPG e la frequenza di campionamento. Il metodo più
semplice è quello di utilizzare pyVHR, ma non disponendo di
un metodo diretto di accesso è stato necessario modificare la
classe FromVideo creando MyFromVideo acessibile tramite il
path Utils come mostrato in fig. 5
1
from Utils.myFromVideo import Pipeline
2
3
pipe = Pipeline()
4
5
time, BPM, uncertainty,bvps, fps, sig = pipe.
run_video(videoFileName = ’file/path.avi’,
roi_approach="hol", roi_method="faceparsing",
method = "cpu_CHROM")
6
7
Listing 1. myFromVideo
Per ottenere la ground truth è stato invece necessario modificare la classe fileImport di pyVHR per rendere accessibile
e nello stesso formato il file xmp.
1
from Utils.fileImport import readSigfile
3
4
5
BvpFromFile, dataFromFile, srFromFile
(’file/path.xmp’)
BvpFromFile.getBPM(winsize = 8)
bpm = BvpFromFile.bpm
= readSigfile
6
Listing 2. readSigFile
B. Estrazione dei picchi
Una volta estratto il segnale il primo step del framework di
Charlton è quello di estrarre dalla finestra di rPPG i tre segnali
: RIAV, RIIV e RIFV. Per farlo, però, è prima necessario
estrarre i picchi del segnale. Questi tre sono accessibili tramite
la funzione peakDetector disponibile nel path Extraction che
richiede in ingresso una finestra rPPG e il tipo di estrazione
dei picchi. Il risultato del processing è accessibile tramite
la funzione peakDetectorPlotter anchessa accessibile nel path
extraction come mostrato in fig. 6.
Una volta estratti i picchi è necessario ottenere i 3 segnali
descritti nel framework attraverso il resampling a 4Hz e
l’estrazione della frequenza con ampiezza maggiore. Queste
due operazioni sono operate dalle funzioni calc rr e breathing
presenti nel path estimation. Queste funzioni utilizzano in
Fig. 7. Segnali delle tre tecniche estratti dalla rPPG
Fig. 9. Fusione dei tre segnali con SmartFusion
unire i segnali ottenuti nei passaggi precedenti attraverso il
lancio consequenziale di process rr, come mostrato in fig. 9
1
from Fusion.fusion import smartFusion
2
3
4
5
6
7
rSM = smartFusion(bvps, fps, method="welch",
resampleHz=4, windows=8)
plt.plot(rSM)
SM = smartFusion(dataFromFile, srFromFile, file=True
, method="welch", resampleHz=4, windows=8)
plt.plot(SM)
plt.legend([’rSmart fusion’, ’Smart fusion’], loc=’
best’)
8
Listing 4. smartFusion
Fig. 8. Segnali delle tre tecniche estratti da file PPG
input la lista dei picchi e il tipo di stimatore da utilizzare
: welch, fft o periodogramma.
C. Stima dei della frequenza respiratoria
La funzione process rr mette insieme le 3 attività descritte
finora in un’unica api che svolge anche la funzione di sliding
windows se viene passato in input una PPG, come mostrato
in fig. 7 e in fig. 8
1
from Utils.process import process_rr
2
3
4
5
rr_listH = process_rr(bvps, fps, typeOfPeak="height"
, method="welch")[0]
rr_listW = process_rr(bvps, fps, typeOfPeak="width",
method="welch")[0]
rr_listP = process_rr(bvps, fps, method="welch")[0]
6
7
Listing 3. process
D. Fusion
La funzione SmartFusion accessibile tramite il path Fusion
implementa la tecnica descritta nel framework di Charlton per
E. Altre funzioni di utils
All’interno della libreria, oltre alla pipeline principale (process rr), è disponibile una serie di altre funzioni che sfruttano
questa funzione per scopi di analisi statistica:
1) la funzione ”measures” prende in input i due segnali
stimati e ritorna una serie di metriche sulla bontà del
segnale stimato, come ad esempio : rms error, coefficente
di pearson, correlazione lineare ed errore massimo.
2) la funzione ”benchmark” prende in input una serie di
list di test da applicare : metodi di stima, tipi di picco,
frequenza di resampling e dimensione della finestra, e
svolge tutte le compbinazioni possibili ritornando una
serie di valutazioni statistiche sui risultati confrontati con
una ground truth.
IV. R ISULTATI
Per poter ottenere dei risultati dal framework è necessario
utilizzare per la rPPG dei dataset contententi file video RAW,
in quanto è necessario eliminare qualsiasi forma di commpressione. Di default si è utilizzato una finestra di 8 secondi e una
frequenza di resampling di 4 Hz, come descritto nell’articolo
[3]. Per il benchmarking sono state utilizzate invece tutte le
combinazioni disponibili.
[2] Peter H Charlton, Timothy Bonnici, Lionel Tarassenko, David A Clifton,
Richard Beale, and Peter J Watkinson. An assessment of algorithms to
estimate respiratory rate from the electrocardiogram and photoplethysmogram. Physiological measurement, 37(4):610, 2016.
[3] Duncan Luguern, Simon Perche, Yannick Benezeth, Virginie Moser,
L Andrea Dunbar, Fabian Braun, Alia Lemkaddem, Keisuke Nakamura,
Randy Gomez, and Julien Dubois. An assessment of algorithms to
estimate respiratory rate from the remote photoplethysmogram. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern
Recognition Workshops, pages 304–305, 2020.
Fig. 10. Plot dei risultati
A. Dataset
UBFC-RPPG Dataset (Univ. Bourgogne Franche-Comté
Remote PhotoPlethysmoGraphy) è composto da due dataset
focalizzati specificamente per l’analisi delle rPPG. Il database
UBFC-RPPG è stato creato utilizzando una semplice webcam
a basso costo (Logitech C920 HD Pro) a 30fps con risoluzione
640x480 in formato RGB a 8 bit non compresso ed un
pulsossimetro CMS50E che è stato utilizzato per ottenere i dati
PPG ground truth che comprendono la forma d’onda PPG e le
frequenze cardiache PPG. Durante la registrazione, il soggetto
si siede davanti alla telecamera (a circa 1 metro di distanza
dalla telecamera) con il viso visibile. Tutti gli esperimenti sono
condotti all’interno con una quantità variabile di luce solare
ed illuminazione interna.
B. Conclusioni
Analizzando i risultati ottenuti tramite la funzione benchmark sull’intero dataset è possibile vedere come effettivamente la qualità della stima dei due segnali respiratori
dipende fortemente dal segnale di partenza, in quanto quando
l’rPPG è molto differente dalla PPG il segnale respiratorio è
molto diverso. In ogni caso, la frequenza respiratoria ottenuta
dall’applicazione del framework risulta credibile, in quanto
rimane in un range realistico. Analizzando i risultati la tecnica
più robusta risulta essere : Smart fusion (quindi tutti e 3 i
picchi analizzati) con welch come metodo per l’estrazione del
segnale respiratorio, come mostrato in fig. 10
C. Sviluppi futuri
Tra gli sviluppi futuri della libreria vi è sicuramente quello
di implementare altri metodi presenti nel framework di Charlton per valutare se vi sono tecniche particolarmente migliori
rispetto ad altre.
R EFERENCES
[1] Walter Karlen, Srinivas Raman, J Mark Ansermino, and Guy A Dumont.
Multiparameter respiratory rate estimation from the photoplethysmogram.
IEEE Transactions on Biomedical Engineering, 60(7):1946–1953, 2013.