Validation and Benchmarking
============================
.. raw:: html
Colab Notebook
In this tutorial we will learn how to validate and benchmark the fiducial point extraction of photoplethysmogram (PPG) signal.
Our objectives are to:
* Compare the fiducial points annotations of two manual annotations
* Validate the fiducial points detection of *pyPPG*
* Benchmark the fiducial points detection of *pyPPG*, *PulseAnalyse*, *PPGFeat*
* Make Bland-Altman analysis for the annotations and detection results
* Saving all results
Download and extract the manual annotations of fiducial points by accessing the provided link: `PPG-BP manual annotations `__.
Additionally, acquire and extract the MATLAB codes essential for evaluating *PPGFeat* and *PulseAnalyse* by using the following link: `MATLAB codes `__.
Ensure that you place the extracted contents in the designated folder associated with this script.
Import Python packages:
-----------------------
* Install the pyPPG toolbox for PPG analysis
.. code-block:: python
pip install pyPPG==1.0.67
* Import required components from pyPPG
.. code-block:: python
import pyPPG.validation.pw_anal as PW
* Import other packages
.. code-block:: python
import pandas as pd
from datetime import datetime
import os
Initialisation:
-----------------
* Initialise the following input parameters to the validation and benchmarking
.. code-block:: python
# Initialise the pulse wave package
pwex = PW.PulseWaveAnal()
# Initialise the correction
correction = pd.DataFrame()
corr_on = ['on', 'v', 'w', 'f']
corr_off = ['dn', 'dp']
correction.loc[0, corr_on] = True
correction.loc[0, corr_off] = False
# Save time for the results of the output folders
date = datetime.now()
dname = str(date.year) + '_' + str(date.month) + '_' + str(date.day) + '_' + str(date.hour) + '_' + str(date.minute)
Validation of the fiducial points:
----------------------------------
* Evaluate the manual annotations and *pyPPG* detection of the fiducial points
.. code-block:: python
# Run PPG-BP Evaluation for the manual annotation and pyPPG
pwex.eval_PPG_BP(plts=True, correction=correction, dname=dname, prnt=False)
Extract other fiducial points:
--------------------------------
* Extract the detected the fiducial points of *PPGFeat* and *PulseAnalyse*
.. code-block:: python
# Command to run MATLAB script for PPGFeat
current_directory = os.getcwd()
script_folder = current_directory+os.sep+'PPGFeat'
scipt='get_PPGFeat_fps'
pwex.run_matlab_script(script_folder,scipt,dname,'')
# Command to run MATLAB script for PulseAnalyse
script_folder = current_directory+os.sep+'PulseAnalyse'
scipt='get_PA_fps'
pwex.run_matlab_script(script_folder,scipt,dname,'')
Benchmarking:
--------------
* Compare the results of *PPGFeat* and *PulseAnalyse* with *pyPPG*
.. code-block:: python
# Run Benchmarking
pwex.benchmark_PPG_BP(detector='PPGFeat', dname=dname, plt=True, prnt=False)
pwex.benchmark_PPG_BP(detector='PulseAnal', dname=dname, plt=True, prnt=False)
# Run Bland-Altman analysis
script_folder = current_directory+os.sep+'BlandAltman'
scipt='BlandAltman_anal'
pwex.run_matlab_script(script_folder, scipt, dname, 'MG_PC')
pwex.run_matlab_script(script_folder, scipt, dname, 'pyPPG')
pwex.run_matlab_script(script_folder, scipt, dname, 'PPGFeat')
pwex.run_matlab_script(script_folder, scipt, dname, 'PulseAnal')
The resulting figures and outcomes are stored within the *results* folder, which is automatically generated within the project directory.