/heartbeat

Desktop implementation of Remote Photoplethysmography – Measuring heart rate using facial video.

Primary LanguageC++GNU General Public License v3.0GPL-3.0

Heartbeat: Measuring heart rate using remote photoplethysmography (rPPG)

News: Try out VitalLens, my new free iOS app implementing a modern rPPG model based on AI. We also have an API with a Python Client which uses the same AI model. Find out more at https://www.rouast.com/vitallens and https://www.rouast.com/api.

This is a simple implementation of rPPG, a way to measure heart rate without skin contact. It uses a video recording or live feed of the face to analyse subtle changes in skin color.

Here's how it works:

  • The face is detected and continuously tracked
  • Signal series is obtained by determining the facial color in every frame
  • Heart rate is estimated using frequency analysis and filtering of the series

If you are interested in the specifics, feel free to have a read of my publications on the topic:

See also my minimal JavaScript implementation and Browser Demo.

Demo

Dependencies

The following libraries are required to run Heartbeat:

They must be installed on the system such that headers and libraries are found on the compiler's standard search path.

Installation

For building a Makefile is available that works on macOS:

$ make

Alternative compilation for Ubuntu. Works with opencv 3.1:

$ g++ -std=c++11 Heartbeat.cpp opencv.cpp RPPG.cpp `pkg-config --cflags --libs opencv` -o Heartbeat

Settings

After building, the app can be run via

$ ./Heartbeat

Several command line arguments are available:

Argument Options Description
-i Filepath to input video Omit flag to use webcam
-rppg g, pca (default: g) Specify rPPG algorithm variant - only green channel or rgb channels with pca
-facedet haar, deep (default: haar) Specify face detection classifier - Haar cascade or deep neural network
-r Re-detection interval (default: 1 s) Interval for face re-detection; tracking is used frame-to-frame
-f Sampling frequency (default: 1 Hz) Frequency for heart rate estimation
-max default: 5 Maximum size of signal sliding window
-min default: 5 Minimum size of signal sliding window
-gui true, false (default: true) Display the GUI
-log true, false (default: false) Detailed logging
-ds default: 1 If using video from file: Downsample by using every ith frame

License

GPL-3.0