Skip to the content.

Oxynet is a set of tools for automatic interpretation of cardiopulmonary exercising tests data.

💻 Try the web app

🐍 Install the Python package

📁 Read the docs

Contributing to the Oxynet project

There are challenges that transcend both national and continental boundaries and providing people with universal access to good quality health care is one of them. Emerging technologies in the field of AI and the availability of vast amounts of data can offer big opportunities to stimulate innovation and develop solutions.

Oxynet wants to become a tool for a quick and encompassing diagnosis of medical conditions with cardiopulmonary exercise tests (CPET) and promote accurate and timely clinical decisions, ultimately reducing the costs associated with current evaluation errors and delays.

The main building blocks of Oxynet are:

We are interested in creating more research opportunities with other Universities and Departments, hospitals and clinics, medical doctors and physiologists (also operating in intensive care units), companies involved in the development (including patenting and validation) and in the commercialization of medical devices (e.g. metabolic carts and medical software).

We want to bring together key actors from across sectors to jointly implement our R&D road map and: support the research activities financially (including scholarships for research fellows or publication fees for open access journals), provide intellectual contribution for scientific publications or grant application, share data for testing/developing new algorithms, develop web-based applications (e.g. crowd sourcing applications, automatic interpretation of new data, websites for communicating the outcomes of the project), conduct market and patent analyses, and validate the algorithms for clinical settings.

The Pyoxynet package

Pyoxynet is a collection of algorithms developed in the context of the Oxynet project. All the algorithms are constituted by deep neural networks, i.e. models conceived to process cardiopulmonary exercise test data (CPET).

All the models are Keras models trained and tested with Tensorflow, and they are included in Pyoxynet only in their TFLite inference version in versions <11.6. TFLite has been intentionally adopted to keep the package light and fast. However, after version 11.6 the Tensorflow models are directly used.

To date, mainly two type of models are implemented:

Pip install the package

☝️ This package was developed under Python 3.8, so it might not work properly under older versions. The reason why the 3.8 version is not updated to more recent versions is related to the way packages are now distributed and installed for versions >3.8.

To the best of my knowledge, this is the best solution for those Python users who would like to have Oxynet algorithms always on the tip of their fingers. Assuming you have pip installed on your machine, begin with:

pip install pyoxynet

Or, alternatively,

pip install git+

(back to top)


Data required for the inference include oxygen uptake (VO2), exhaled CO2 (VCO2), minute ventilation (VE), end tidal O2 (PetO2) and CO2(PetCO2), and ventilatory equivalents (VEVO2 and VEVCO2).

Oxynet inference models work on data over-sampled on a sec-by-sec basis. When dealing with breath-by-breath data, linear interpolation at 1 second is appropriate in my experience (little error is introduced). When dealing with averaged 5-by-5 second data or 10-by-10 second data, cubic interpolation is more appropriate in my experience. Pyoxynet however, can implement a number of interpolation algorithm to process raw data as well as data already processed.

If you want to see how Pyoxynet can work on sample data:

import pyoxynet

# Load the TFL model
tfl_model = pyoxynet.load_tf_model()

# Make inference on a random input

# Plot the inference on a test dataset

(back to top)


Pyoxynet also implements a Conditional Generative Adversarial Network, which has been trained to generate deceptive CPET data. As per the inference model, the generator is saved in a TFLite model file. Calling the related function and obtain a fake CPET data sample can be done as follows:

from pyoxynet import *
# Call the generator
generator = load_tf_generator()
# Generate a Pandas df with fake CPET data inside
df = generate_CPET(generator, plot=True)
# Call Oxynet for inference on fake data

Fake data provided during the generation include oxygen uptake (VO2), exhaled CO2 (VCO2), minute ventilation (VE), heart rate (HR), respiratory frequency (RF), and end tidal O2 (PetO2) and CO2(PetCO2) (generation therefore does not provide and ventilatory equivalents):

Importantly, given that RF data is generated, a complete breath-by-breath dataset can be generated. In the gif below, different epochs/steps of the training process are presented for the Conditional Adversarial Neural Network available in Pyoxynet.

(back to top)


📧 Feedback & Issues -

📧 PI: Andrea Zignoli -

(back to top)


You can read more about the rationale and the technology behind the Oxynet project at the following links:

(back to top)


The followings are valuable source of knowledge and inspiration for both the Pyoxynet and Oxynet projects:

(back to top)


All content found on this website, including: text, images, tables, or other formats are created for informational purposes only. The information provided by this software is not intended to be a substitute for professional medical advice, diagnosis, or treatment. Always seek the advice of your physician or other qualified health provider with any questions you may have regarding a medical condition. Never disregard professional medical advice or delay in seeking it because of something has been provided by this software.

(back to top)