Video measurement


The SDK outputs results once required success conditions were satisfied for 1 minute.

Success conditions

The following conditions are required for a successful measurement:

  • the extracted photoplethysmographic signal quality must be above a threshold that enables unambigous interpretation
  • human face must be stable and properly positioned within the camera frame

Final metrics

Final measurement metrics are provided based on all full heart cycles observed during the last 1 minute of the measurement. The measurement itself may take longer if some conditions were not satisfied (such as lighting issue or user leaving the view of the camera).

Base metrics

IBI (interbeat intervals) are computed based on advanced filtering and analysis of the extracted dense photoplethysmographic signal. Start and end time of each detected heartbeat is provided, as well as it's duration rounded to full milliseconds.

HR (heart rate) is computed based on the average duration of observed heart cycles.

HRV (heart rate variability) metrics are computed as statistical measures of the observed heart cycles. The SDNN and lnRMSDD metrics are provided.

BR (breathing rate) is computed based on advanced analysis of the observed heart cycles.


Breathing rate will only be available if the SDK has high confidence about the computed result, so it might not be returned for some measurements (for example in cases of very slow, very fast or highly irregular breath). Breathing rate will always be returned if the measurement is done in the Relaxed precision mode.

Beta metrics

BP (blood pressure) is computed using a custom-trained deep-learning AI model (beta feature).

SI (stress index) is computed based on the statistical distribution of time intervals between the successive heartbeats detected during the video measurement. It is similar to the Baevsky stress index but has been adapted for short measurements (1 minute).

Accessing the results

The results can be obtained with getMeasurementResults() call providing metrics computed for the latest measurement (invalid if no measurement was finished successfully) of the following structure:

class MeasurementResults {
  double heart_rate_bpm;                   // Heart rate, rounded to 1 BPM   
  double hrv_sdnn_ms;                      // Heart rate variability, SDNN metric, rounded to 1 ms
  double hrv_lnrmssd_ms;                   // Heart rate variability, lnRMSSD metric, rounded to 0.1 ms
  double stress_index;                     // Baevsky's Stress index, rounded to 0.1, 0.0-10.0 
  double? breathing_rate_bpm;              // Breathing rate, rounded to 1 BPM       
  double? systolic_blood_pressure_mmhg;    // Systolic blood pressure, rounded to 1 mmHg                 
  double? diastolic_blood_pressure_mmhg;   // Diastolic blood pressure, rounded to 1 mmHg                   
  List<Heartbeat?> heartbeats;             // Heartbeat locations
  double average_signal_quality;           // Average signal quality metric
class Heartbeat {
  double start_location_sec;  // exact start location in seconds
  double end_location_sec;    // exact end location in seconds
  double duration_ms;         // heartbeat duration, rounded to 1 ms
var results = await ShenaiSDK.getMeasurementResults();