mirror of
https://github.com/EyeTrackVR/EyeTrackVR.git
synced 2025-11-04 14:39:42 +08:00
feat: begin 3d calibration math
This commit is contained in:
parent
193c6a9653
commit
bea837ccca
@ -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)
|
||||
|
||||
|
||||
92
EyeTrackApp/utils/3d_calib.py
Normal file
92
EyeTrackApp/utils/3d_calib.py
Normal 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)
|
||||
Loading…
Reference in New Issue
Block a user