Spaces:
Runtime error
Runtime error
import cv2 | |
#import pickle | |
import time | |
import numpy as np | |
import copy | |
from matplotlib import pyplot as plt | |
from tqdm import tqdm | |
class LowPassFilter: | |
def __init__(self): | |
self.prev_raw_value = None | |
self.prev_filtered_value = None | |
def process(self, value, alpha): | |
if self.prev_raw_value is None: | |
s = value | |
else: | |
s = alpha * value + (1.0 - alpha) * self.prev_filtered_value | |
self.prev_raw_value = value | |
self.prev_filtered_value = s | |
return s | |
class OneEuroFilter: | |
def __init__(self, mincutoff=1.0, beta=0.0, dcutoff=1.0, freq=30): | |
self.freq = freq | |
self.mincutoff = mincutoff | |
self.beta = beta | |
self.dcutoff = dcutoff | |
self.x_filter = LowPassFilter() | |
self.dx_filter = LowPassFilter() | |
def compute_alpha(self, cutoff): | |
te = 1.0 / self.freq | |
tau = 1.0 / (2 * np.pi * cutoff) | |
return 1.0 / (1.0 + tau / te) | |
def process(self, x): | |
prev_x = self.x_filter.prev_raw_value | |
dx = 0.0 if prev_x is None else (x - prev_x) * self.freq | |
edx = self.dx_filter.process(dx, self.compute_alpha(self.dcutoff)) | |
cutoff = self.mincutoff + self.beta * np.abs(edx) | |
return self.x_filter.process(x, self.compute_alpha(cutoff)) | |