Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

BreathPy

Una libreria per l'estrazione della frequenza respiratoria basata su Remote PPG

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.