Merge pull request #86 from EtheriVR/Etheri-Fix-OSC-Calibrate

Fixes calibration values
This commit is contained in:
Prohurtz 2023-06-19 11:56:44 -07:00 committed by GitHub
commit 9a4e04d145
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -12,6 +12,11 @@ class EyeId(IntEnum):
class cal(): class cal():
def cal_osc(self, cx, cy): def cal_osc(self, cx, cy):
if cx == 0:
cx = 1
if cy == 0:
cy = 1
if self.eye_id == EyeId.RIGHT: if self.eye_id == EyeId.RIGHT:
flipx = self.settings.gui_flip_x_axis_right flipx = self.settings.gui_flip_x_axis_right
else: else:
@ -39,6 +44,7 @@ class cal():
self.config.calib_YMAX = cy self.config.calib_YMAX = cy
if cy < self.config.calib_YMIN: if cy < self.config.calib_YMIN:
self.config.calib_YMIN = cy self.config.calib_YMIN = cy
self.calibration_frame_counter -= 1 self.calibration_frame_counter -= 1
if self.settings.gui_recenter_eyes == True: if self.settings.gui_recenter_eyes == True:
@ -52,53 +58,62 @@ class cal():
else: else:
self.ts = 10 self.ts = 10
try: out_x = 0.5
out_x = 0.5 out_y = 0.5
out_y = 0.5
xl = float(
(cx - self.config.calib_XOFF) / (self.config.calib_XMAX - self.config.calib_XOFF)
)
xr = float(
(cx - self.config.calib_XOFF) / (self.config.calib_XMIN - self.config.calib_XOFF)
)
yu = float(
(cy - self.config.calib_YOFF) / (self.config.calib_YMIN - self.config.calib_YOFF)
)
yd = float(
(cy - self.config.calib_YOFF) / (self.config.calib_YMAX - self.config.calib_YOFF)
)
if self.settings.gui_flip_y_axis: # check config on flipped values settings and apply accordingly
if yd >= 0:
out_y = max(0.0, min(1.0, yd))
if yu > 0:
out_y = -abs(max(0.0, min(1.0, yu)))
else:
if yd >= 0:
out_y = -abs(max(0.0, min(1.0, yd)))
if yu > 0:
out_y = max(0.0, min(1.0, yu))
if flipx:
if xr >= 0: calib_diff_x_MAX = self.config.calib_XMAX - self.config.calib_XOFF
out_x = -abs(max(0.0, min(1.0, xr))) if calib_diff_x_MAX == 0:
if xl > 0: calib_diff_x_MAX = 1
out_x = max(0.0, min(1.0, xl))
else: calib_diff_x_MIN = self.config.calib_XMIN - self.config.calib_XOFF
if xr >= 0: if calib_diff_x_MIN == 0:
out_x = max(0.0, min(1.0, xr)) calib_diff_x_MIN = 1
if xl > 0:
out_x = -abs(max(0.0, min(1.0, xl))) calib_diff_y_MAX = self.config.calib_YMAX - self.config.calib_YOFF
except: if calib_diff_y_MAX == 0:
# print("\033[91m[ERROR] Eye Calibration Invalid!\033[0m") calib_diff_y_MAX = 1
self.config.calib_XOFF = 0
self.config.calib_YOFF = 0 calib_diff_y_MIN = self.config.calib_YMIN - self.config.calib_YOFF
self.config.calib_XMAX = 1 if calib_diff_y_MIN == 0:
self.config.calib_YMAX = 1 calib_diff_y_MIN = 1
self.config.calib_XMIN = 1
self.config.calib_YMIN = 1 xl = float(
out_x = 0.5 (cx - self.config.calib_XOFF) / calib_diff_x_MAX
out_y = 0.5 )
xr = float(
(cx - self.config.calib_XOFF) / calib_diff_x_MIN
)
yu = float(
(cy - self.config.calib_YOFF) / calib_diff_y_MIN
)
yd = float(
(cy - self.config.calib_YOFF) / calib_diff_y_MAX
)
if self.settings.gui_flip_y_axis: # check config on flipped values settings and apply accordingly
if yd >= 0:
out_y = max(0.0, min(1.0, yd))
if yu > 0:
out_y = -abs(max(0.0, min(1.0, yu)))
else:
if yd >= 0:
out_y = -abs(max(0.0, min(1.0, yd)))
if yu > 0:
out_y = max(0.0, min(1.0, yu))
if flipx:
if xr >= 0:
out_x = -abs(max(0.0, min(1.0, xr)))
if xl > 0:
out_x = max(0.0, min(1.0, xl))
else:
if xr >= 0:
out_x = max(0.0, min(1.0, xr))
if xl > 0:
out_x = -abs(max(0.0, min(1.0, xl)))
try: try:
noisy_point = np.array([float(out_x), float(out_y)]) # fliter our values with a One Euro Filter noisy_point = np.array([float(out_x), float(out_y)]) # fliter our values with a One Euro Filter
point_hat = self.one_euro_filter(noisy_point) point_hat = self.one_euro_filter(noisy_point)