Skip to main content

EVM Vital Signs Monitor

A non-invasive vital signs monitoring system that uses Eulerian Video Magnification (EVM) and AI-based facial detection to estimate heart rate (HR) and respiratory rate (RR) from video. The system amplifies subtle color and motion changes in facial regions to extract physiological signals without any physical contact.

Quick Start

Get up and running in minutes with a simple example

Installation

Detailed installation instructions for Python and Docker

Core Concepts

Understand how EVM extracts vital signs from video

Configuration

Learn how to configure the system for your use case

How It Works

The system processes video frames through a five-stage pipeline:
1

Face Detection

Locates facial region of interest (ROI) using AI models like MediaPipe, YOLOv8, Haar Cascade, or MTCNN
2

Pyramid Decomposition

Builds Laplacian pyramids from video frames for multi-scale analysis
3

Temporal Filtering

Applies dual-band bandpass filters:
  • Heart rate: 0.8-3 Hz (48-180 BPM)
  • Respiratory rate: 0.2-0.8 Hz (12-48 BPM)
4

Signal Amplification

Magnifies subtle color variations using configurable amplification factors
5

Frequency Analysis

Extracts dominant frequencies via FFT to determine HR and RR

Key Features

Non-invasive Monitoring

Extracts HR and RR from video feed without physical sensors

Multiple Detection Models

Choose from YOLOv8, MediaPipe, Haar Cascade, or MTCNN based on your accuracy and performance needs

Optimized Pipeline

Single-pass dual-band processing for simultaneous HR/RR extraction - 50-60% faster than traditional approaches

Real-time Capable

Runs on Raspberry Pi 4 with 30+ FPS face detection

Comprehensive Benchmarking

Performance and accuracy metrics validated against UBFC-RPPG dataset

ROI Stabilization

Temporal filtering and weighted smoothing for stable measurements

Performance on Raspberry Pi 4

Optimized for embedded systems deployment:
  • Detection: 30-40 FPS (MediaPipe)
  • EVM Processing: 1-2 seconds per 200-frame chunk
  • End-to-End: 3-4 seconds per measurement
  • Accuracy: MAE < 5 BPM for HR under optimal conditions

System Requirements

Minimum Requirements

  • Python: 3.8 or higher
  • RAM: 2GB minimum (4GB+ recommended for Raspberry Pi)
  • Camera: Any USB webcam or compatible video source
  • OS: Linux, macOS, or Windows

Hardware Recommendations

  • CPU: Dual-core processor (quad-core recommended)
  • RAM: 4GB+
  • GPU: Optional - can accelerate YOLO models with CUDA support
  • Model: Raspberry Pi 4 (4GB or 8GB RAM recommended)
  • OS: Raspberry Pi OS (64-bit) or Ubuntu Server
  • Camera: Raspberry Pi Camera Module v2 or USB webcam
  • Storage: 16GB+ microSD card (Class 10 or higher)

Software Dependencies

Core dependencies managed via requirements.txt:
  • OpenCV: 4.10.0.84 - Computer vision operations
  • NumPy: 1.24.0+ - Array operations
  • SciPy: 1.10.0+ - Signal processing
  • MediaPipe: 0.10.21 - Fast face detection
  • Ultralytics: 8.3.235 - YOLOv8/v12 models
  • TensorFlow: 2.16.1 - MTCNN support
For Raspberry Pi deployment, MediaPipe is recommended as the face detector for optimal balance between speed and accuracy.

Limitations

Important considerations for accurate measurements:
  • Requires stable lighting conditions (avoid rapid changes)
  • Subject must remain relatively still during measurement
  • Performance degrades with rapid head movements
  • Respiratory rate detection is less reliable than heart rate
  • Minimum 6-7 seconds of video needed for accurate measurements (200 frames at 30 FPS)

Use Cases

  • Remote health monitoring: Telehealth applications
  • Wellness tracking: Fitness and stress monitoring
  • Research: Physiological signal analysis
  • Education: Learning about computer vision and signal processing
This project is for research and educational purposes. Not intended for medical diagnosis or treatment.

Next Steps

Get Started

Run your first vital signs measurement

Learn EVM

Deep dive into Eulerian Video Magnification

Choose a Detector

Select the right face detection model

Run Benchmarks

Measure performance and accuracy

Build docs developers (and LLMs) love