我正在尝试构建心率监测器,使用户可以将他的手指放在闪光灯上的相机上,并向他显示心率。
到目前为止,我正在从手机中捕获视频,然后在笔记本电脑中使用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中绘制列表,如下所示。
我们可以轻松地找到从帧90
到帧300
的八个峰值。换句话说,有7 periods in 200 frames( taken in 200/30 s)
,所以心率是7 / (200/30) = 21/20 => 63/60
。就是说,我的心律是63
。
也许Fourier Analysis
会有所帮助。但是,不幸的是,我仍然不知道如何在程序中分析此曲线...
(因为我忘记了Signals & System
的AlanV.Oppenh
)
ORZ ...
心脏跳动的手指gif。
关于python - 使用OpenCV的心率监测器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34516323/