Skip to content

Commit 677cd71

Browse files
committed
feat: More robust interpolation
1 parent 3241b91 commit 677cd71

File tree

3 files changed

+10
-11
lines changed

3 files changed

+10
-11
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ dependencies = [
2525
"importlib_resources>=5.12",
2626
"numpy>=1.24",
2727
"onnxruntime>=1.15.0",
28-
"prpy[ffmpeg,numpy_min]>=0.2.17",
28+
"prpy[ffmpeg,numpy_min]>=0.2.25",
2929
"python-dotenv>=1.0",
3030
"pyyaml>=6.0.1",
3131
"requests>=2.32.0",

vitallens/methods/simple_rppg_method.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import numpy as np
2323
from prpy.numpy.face import get_roi_from_det
2424
from prpy.numpy.image import reduce_roi, parse_image_inputs
25-
from prpy.numpy.signal import interpolate_cubic_spline
25+
from prpy.numpy.signal import interpolate_filtered
2626
from typing import Union, Tuple
2727

2828
from vitallens.buffer import SignalBuffer
@@ -116,8 +116,10 @@ def __call__(
116116
# Perform rppg algorithm step (n_frames_ds,)
117117
sig_ds = self.algorithm(rgb_ds, fps_ds)
118118
# Interpolate to original sampling rate (n_frames,)
119-
sig = interpolate_cubic_spline(
120-
x=np.arange(inputs_shape[0])[0::ds_factor], y=sig_ds, xs=np.arange(inputs_shape[0]), axis=1)
119+
sig = interpolate_filtered(t_in=np.arange(inputs_shape[0])[0::ds_factor],
120+
s_in=sig_ds,
121+
t_out=np.arange(inputs_shape[0]),
122+
axis=1, extrapolate=True)
121123
# Filter and add dim (1, n_frames)
122124
sig = self.pulse_filter(sig, fps)
123125
sig = np.expand_dims(sig, axis=0)

vitallens/methods/vitallens.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from prpy.numpy.face import get_roi_from_det
2626
from prpy.numpy.image import probe_image_inputs, parse_image_inputs
2727
from prpy.numpy.signal import detrend, moving_average, standardize
28-
from prpy.numpy.signal import interpolate_cubic_spline
28+
from prpy.numpy.signal import interpolate_filtered
2929
from prpy.numpy.utils import enough_memory_for_ndarray
3030
import json
3131
import logging
@@ -139,12 +139,9 @@ def __call__(
139139
conf_ds, _ = reassemble_from_windows(x=conf_results, idxs=idxs_results)
140140
live_ds = reassemble_from_windows(x=np.asarray(live_results)[:,np.newaxis], idxs=idxs_results)[0][0]
141141
# Interpolate to original sampling rate
142-
sig = interpolate_cubic_spline(
143-
x=idxs, y=sig_ds, xs=np.arange(inputs_n), axis=1)
144-
conf = interpolate_cubic_spline(
145-
x=idxs, y=conf_ds, xs=np.arange(inputs_n), axis=1)
146-
live = interpolate_cubic_spline(
147-
x=idxs, y=live_ds, xs=np.arange(inputs_n), axis=0)
142+
sig = interpolate_filtered(t_in=idxs, s_in=sig_ds, t_out=np.arange(inputs_n), axis=1, extrapolate=True)
143+
conf = interpolate_filtered(t_in=idxs, s_in=conf_ds, t_out=np.arange(inputs_n), axis=1, extrapolate=True)
144+
live = interpolate_filtered(t_in=idxs, s_in=live_ds, t_out=np.arange(inputs_n), axis=0, extrapolate=True)
148145
# Filter only in batch mode (2, n_frames)
149146
if self.op_mode == Mode.BATCH:
150147
sig = np.asarray([self.postprocess(p, fps, type=name) for p, name in zip(sig, ['ppg', 'resp'])])

0 commit comments

Comments
 (0)