2015-12-29 3 views
3

Я пытаюсь построить монитор сердечного ритма, где пользователь может нанести свой палец на камеру вспышкой и частота сердечных сокращений отображается ему.Монитор частоты сердечных сокращений с использованием OpenCV

На данный момент я снимаю видео с моего телефона, а затем обрабатываю его с помощью OpenCV на своем ноутбуке.

Шагов я Ниже приводится:

  • захвата видео
  • найти среднее красную плоскость значения для каждого кадра
  • фильтровать данные так, что нежелательные пики удаляются
  • вычислить пиков, а затем отображать частоту сердечных сокращений

    import numpy as np 
    import cv2 
    
    #connecting with the captured video file taken from mobile 
    cap = cv2.VideoCapture('heart_rate.mp4') 
    
    #getting the number of frames 
    no_of_frames = int(cap.get(7)) 
    
    #assigning an initial zero red value for every frame 
    red_plane = np.zeros(no_of_frames) 
    
    #time_list is used for storing occurence time of each frame in the video 
    time_list=[] 
    t=0 
    
    #camera frame per second is 30 and so each frame acccurs after 1/30th second 
    difference = 1/30 
    for i in range(no_of_frames): 
    
        #reading the frame 
        ret,frame = cap.read() 
        length,width,channels = frame.shape 
    
        #calculating average red value in the frame 
        red_plane[i] = np.sum(frame[:,:,2])/(length*width) 
        time_list.append(t) 
        t = t+ difference 
    
    
    cap.release() 
    

Я не могу применить фильтр нижних частот, чтобы сгладить мои данные, а также как найти пики с помощью OpenCV. Любая помощь будет замечательной.

+1

пожалуйста также Google для «FFT» и «эйлерового увеличения» – berak

+0

Почему вы хотите фильтр низких частот? Хорошо использовать гауссовский фильтр для размытия кадров для удаления деталей и шума. Для пиков я бы рассматривал это после того, как проанализированы все кадры –

+0

@tales_padua Я хочу фильтр нижних частот, чтобы сгладить график, так что нежелательные пики могут быть удалены и остались только желательные пики. Фактически я вычисляю одно красное значение, которое описывает отдельный кадр, и поэтому я нахожу красное значение для каждого кадра в своем видео, а затем я хочу найти пики – kkk

ответ

0

Я делаю видео в 30FPS, суммирую каждый кадр r-канала и сохраняю усредненную сумму в список. Затем я рисую список в matplotlib, как показано ниже.

enter image description here

Мы можем легко найти около восьми пиков от кадра к кадру 90300. Другими словами, есть 7 periods in 200 frames(taken in 200/30 s), поэтому частота сердечных сокращений 7/(200/30) = 21/20 => 63/60. Это означает, что мой сердечный ритм был 63.

Возможно, Fourier Analysis поможет. Но, к сожалению, я до сих пор не имеют ни малейшего представления о том, как анализ этой кривой в программах ...

(Потому что я забыл Signals & System по AlanV.Oppenh)

ОРЗ ...


сердечного ритма палец gif.

enter image description here

Смежные вопросы