Desktop implementation of Remote Photoplethysmography – Measuring heart rate using facial video.
Switch branches/tags
Nothing to show
Clone or download
Latest commit 9bcf63e Apr 23, 2018

Heartbeat: Measuring heart rate using remote photoplethysmography (rPPG)


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 our publications on the topic:



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.


Compile the source code for your system, providing a number of required linker flags. This works with opencv 3.4.1 on macOS:

$ g++ -std=c++11 -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_objdetect -lopencv_video -lopencv_videoio -lavcodec Heartbeat.cpp opencv.cpp RPPG.cpp Baseline.cpp -o Heartbeat

Alternative compilation for Ubuntu. Works with opencv 3.1:

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