我正在尝试构建心率监测器,使用户可以将他的手指放在闪光灯上的相机上,并向他显示心率。

到目前为止,我正在从手机中捕获视频,然后在笔记本电脑中使用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查找峰。
    任何帮助都会很棒。

    最佳答案

    我以30FPS的速度制作视频,对每帧r通道求和,并将平均和存储到列表中。然后,我在matplotlib中绘制列表,如下所示。

    python - 使用OpenCV的心率监测器-LMLPHP

    我们可以轻松地找到从帧90到帧300的八个峰值。换句话说,有7 periods in 200 frames( taken in 200/30 s),所以心率是7 / (200/30) = 21/20 => 63/60。就是说,我的心律是63

    也许Fourier Analysis会有所帮助。但是,不幸的是,我仍然不知道如何在程序中分析此曲线...

    (因为我忘记了Signals & SystemAlanV.Oppenh)

    ORZ ...

    心脏跳动的手指gif。

    python - 使用OpenCV的心率监测器-LMLPHP

    关于python - 使用OpenCV的心率监测器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34516323/

    10-11 17:13