feat: begin 3d calibration math

This commit is contained in:
Prohurtz 2024-03-27 16:49:58 -05:00
parent 193c6a9653
commit bea837ccca
2 changed files with 93 additions and 6 deletions

View File

@ -226,11 +226,6 @@ class LEAP_C(object):
if len(self.openlist) < 5000: # TODO expose as setting?
self.openlist.append(d)
else:
# if d >= np.percentile(self.openlist, 99) or d <= np.percentile(
# self.openlist, 1
# ):
# pass
# else:
self.openlist.pop(0)
self.openlist.append(d)
@ -243,7 +238,7 @@ class LEAP_C(object):
per = 1 - per
per = per - 0.2 # allow for eye widen? might require a more legit math way but this makes sense.
per = min(per, 1.0)
per = min(per, 1.0) # clamp to 1.0 max
print("new: ", per, "vs old: ", oldper)

View File

@ -0,0 +1,92 @@
import numpy as np
import socket
import threading
class TimeoutError(RuntimeError):
pass
class AsyncCall(object):
def __init__(self, fnc, callback=None):
self.Callable = fnc
self.Callback = callback
def __call__(self, *args, **kwargs):
self.Thread = threading.Thread(target=self.run, name=self.Callable.__name__, args=args, kwargs=kwargs)
self.Thread.start()
return self
def wait(self, timeout=None):
self.Thread.join(timeout)
if self.Thread.isAlive():
raise TimeoutError()
else:
return self.Result
def run(self, *args, **kwargs):
self.Result = self.Callable(*args, **kwargs)
if self.Callback:
self.Callback(self.Result)
class AsyncMethod(object):
def __init__(self, fnc, callback=None):
self.Callable = fnc
self.Callback = callback
def __call__(self, *args, **kwargs):
return AsyncCall(self.Callable, self.Callback)(*args, **kwargs)
def Async(fnc=None, callback=None):
if fnc == None:
def AddAsyncCallback(fnc):
return AsyncMethod(fnc, callback)
return AddAsyncCallback
else:
return AsyncMethod(fnc, callback)
@Async
def overlay_calibrate_3d(self):
try:
if self.overlay_active != True:
dirname = os.getcwd()
overlay_path = os.path.join(dirname, "calibrate.bat") # start overlay
os.startfile(overlay_path)
self.overlay_active = True
while var.overlay_active:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ("localhost", 2112)
sock.bind(server_address)
data, address = sock.recvfrom(4096)
received_int = struct.unpack("!l", data)[0] # this will hold until message received
self.point_trigger = True
self.calib_step = reveived_int
print(received_int)
except:
print("[WARN] Calibration overlay error. Make sure SteamVR is Running.")
self.settings.gui_recenter_eyes = False
var.overlay_active = False
class calibrate_3d:
overlay_active = False
point_trigger = False
calib_step = 0
calib_matrix = np.zeros((9, 2))
def nine_point_3d_calib(x, y): # dummy format
if calibrate_3d.point_trigger:
calibrate_3d.calib_matrix[calibrate_3d.calib_step][0] = x
calibrate_3d.calib_matrix[calibrate_3d.calib_step][1] = y
print(calibrate_3d.calib_matrix)
calibrate_3d.point_trigger = True
calibrate_3d.nine_point_3d_calib(1, 2)