SkillAgentSearch skills...

Heartbeat

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

Install / Use

/learn @prouast/Heartbeat

README

Heartbeat: Measuring heart rate using remote photoplethysmography (rPPG)

Looking for more powerful and up-to-date rPPG tools?
Check out our latest libraries and apps!

| 📌 Tool | 🚀 Features | ⚡ Methods | 🔗 Get Started | |---------|-------------|-------------|----------------| | Python Library | File analysis (HR, RR, HRV) | G, POS, CHROM, VitalLens API | GitHub | | JavaScript Library | Webcam or file analysis (HR, RR, HRV) | G, POS, CHROM, VitalLens API | GitHub | | iOS SDK | Webcam or file analysis (HR, RR, HRV) | VitalLens API | GitHub | | iOS App | Webcam processing (HR, RR) | VitalLens | App Store | | Rouast Labs | More about our research & tech | VitalLens | Website |

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

Related Skills

View on GitHub
GitHub Stars614
CategoryContent
Updated3d ago
Forks149

Languages

C++

Security Score

100/100

Audited on Mar 20, 2026

No findings