修改心率部分,减小其负荷
This commit is contained in:
@@ -14,11 +14,17 @@ class HeartRateMonitor:
|
||||
self.b_buffer = collections.deque(maxlen=window_size)
|
||||
|
||||
# 滤波器状态
|
||||
self.bp_b, self.bp_a = self._create_bandpass_filter(0.75, 2.5, fps) # 45-150 BPM
|
||||
# 修改: 将最低频率从 0.75(45 BPM) 提高到 0.9(54 BPM) 以过滤低频噪声
|
||||
self.bp_b, self.bp_a = self._create_bandpass_filter(0.9, 2.5, fps) # 54-150 BPM
|
||||
|
||||
# 平滑结果用的
|
||||
self.bpm_history = collections.deque(maxlen=10)
|
||||
|
||||
# 优化: 降频计算
|
||||
self.frame_counter = 0
|
||||
self.process_interval = 15 # 每15帧(约0.5s)计算一次,其他时间收集数据
|
||||
self.last_bpm = None
|
||||
|
||||
def _create_bandpass_filter(self, lowcut, highcut, fs, order=5):
|
||||
"""创建巴特沃斯带通滤波器"""
|
||||
nyq = 0.5 * fs
|
||||
@@ -92,6 +98,12 @@ class HeartRateMonitor:
|
||||
progress = int(len(self.r_buffer) / self.buffer_size * 100)
|
||||
return None # 或者返回 progress 表示进度
|
||||
|
||||
# [优化] 降频计算策略
|
||||
# 我们每帧都需要收集数据(Buffer append),但不需要每帧都做 FFT
|
||||
self.frame_counter += 1
|
||||
if self.frame_counter % self.process_interval != 0:
|
||||
return self.last_bpm
|
||||
|
||||
# --- 3. 信号处理 (核心升级部分) ---
|
||||
r = np.array(self.r_buffer)
|
||||
g = np.array(self.g_buffer)
|
||||
@@ -119,13 +131,13 @@ class HeartRateMonitor:
|
||||
mag = np.abs(fft_res)
|
||||
|
||||
# D. 寻找峰值
|
||||
# 限制频率范围 (45 BPM - 180 BPM)
|
||||
interest_idx = np.where((freqs >= 0.75) & (freqs <= 3.0))
|
||||
# 限制频率范围 (54 BPM - 180 BPM)
|
||||
interest_idx = np.where((freqs >= 0.9) & (freqs <= 3.0))
|
||||
valid_freqs = freqs[interest_idx]
|
||||
valid_mags = mag[interest_idx]
|
||||
|
||||
if len(valid_mags) == 0:
|
||||
return None
|
||||
return self.last_bpm
|
||||
|
||||
max_idx = np.argmax(valid_mags)
|
||||
peak_freq = valid_freqs[max_idx]
|
||||
@@ -136,4 +148,5 @@ class HeartRateMonitor:
|
||||
self.bpm_history.append(bpm)
|
||||
avg_bpm = np.mean(self.bpm_history)
|
||||
|
||||
self.last_bpm = int(avg_bpm)
|
||||
return int(avg_bpm)
|
||||
Reference in New Issue
Block a user