VPGLIB is the library for the blood pulse extraction from the video of the human face. HR measurement ranges from 55 bpm to 175 bpm and absolute error in most cases should be less than 5 bpm. Pay attention that ordinary PC is not certified as measurement tool, so measurement error could be high. Use library only at your own risk, no warranties are granted.
How to use:
#include <iostream> using namespace std; #include "vpg.h" int main() { cv::VideoCapture capture; // open default video capture device if(capture.open(0)) { // CASCADE_FILENAME is a path to haarcascade or lbpcascade file for the face detection vpg::FaceProcessor faceproc(CASCADE_FILENAME); // measure discretization period of the video float framePeriod = faceproc.measureFramePeriod(&capture); printf("measured frame period: %.2f ms",framePeriod); // create object that performs harmonic analysis of vpg-signal vpg::PulseProcessor pulseproc(framePeriod); cv::Mat frame; unsigned int k = 0; // frame counter float s = 0.0, t = 0.0; // 's' for vpg-signal count, 't' for actual frame time while(true) { if(capture.read(frame)) { // perform frame enrollment faceproc.enrollImage(frame, s, t); // update vpg-signal if face tracked if(faceproc.getFaceRect().area() > 0) { pulseproc.update(s,t); // draw rect for tracked face cv::rectangle(frame,faceproc.getFaceRect(),cv::Scalar(127,255,127),1,CV_AA); // periodically compute heart rate estimation if(k % 64 == 0) printf("\nHR measurement: %.0f bpm", pulseproc.computeFrequency()); } cv::imshow("Video probe", frame); } // increment counter k++; // exit if user pressed 'escape' if( cv::waitKey(1) == 27 ) break; } } return 0; }Dependencies:
Designed by Alex A. Taranov, 2015, list of the project sources