Python 代码从绿色通道帧的视频中提取心率

问题描述 投票:0回答:1

这是我的代码,但心率值不准确。 请帮助我如何改进它。 正常bpm应该是60-100。 我试图通过绿色通道提取 hr,然后计算它的 fft 频率, 然后找到峰值并过滤它们,然后对峰值进行计数,然后将其转换为bpm。 当然这种方式是基于一些文章,现在我想实现它。

import numpy as np
from scipy.signal import find_peaks

class ExtractHeartRate:
   def __init__(self, green_channel, timer):
    self.green_channel = green_channel  # Green channel of the frame
    self.timer = timer
    self.heart_rate = 0

   def calc_hr_process(self):
    # Perform FFT on the Green Channel
    fft_result = np.fft.fft(self.green_channel)
    fft_result = np.abs(fft_result).flatten()
    fft_freq = np.fft.fftfreq(len(fft_result))

    # Locate peaks in the necessary frequency range
    peaks, _ = find_peaks(fft_result, height=0, threshold=0)

    # Filter peaks within the necessary frequency range
    valid_peaks = peaks[(fft_freq[peaks] >= 0.48) & (fft_freq[peaks] <= 4)]

    # Count the peaks within a set time range
    elapsed_time = self.timer.elapsed() / 1000  # Elapsed time in seconds
    if elapsed_time > 0:
        # Calculate the peak count within the set time range
        peak_count = len(valid_peaks)

        # Calculate the heart rate
        heart_rate = peak_count * 60 / elapsed_time  # Convert to BPM using elapsed time
        self.heart_rate = round(heart_rate)
    else:
        self.heart_rate = 0
    return self.heart_rate
python video signals fft heartrate
1个回答
0
投票

您找到问题的答案了吗?我也有同样的问题

© www.soinside.com 2019 - 2024. All rights reserved.