Added eyelids to config

Adding the eyelids to config and adding an invert bool makes this work with most peoples currently setup eyelids if they used eyetracking before native
This commit is contained in:
Etheri 2023-06-17 15:56:45 +02:00
parent 80af953b29
commit a1aecc9cdb
2 changed files with 26 additions and 14 deletions

View File

@ -69,6 +69,9 @@ class EyeTrackSettingsConfig(BaseModel):
ibo_average_output_samples: int = 0 ibo_average_output_samples: int = 0
ibo_fully_close_eye_threshold: float = 0.3 ibo_fully_close_eye_threshold: float = 0.3
calibration_samples: int = 600 calibration_samples: int = 600
osc_right_eye_close_address: str = "/avatar/parameters/RightEyeLidExpandedSqueeze"
osc_left_eye_close_address: str = "/avatar/parameters/LeftEyeLidExpandedSqueeze"
osc_invert_eye_close: bool = False

View File

@ -16,6 +16,13 @@ class EyeId(IntEnum):
ALGOSETTINGS = 4 ALGOSETTINGS = 4
from config import EyeTrackConfig from config import EyeTrackConfig
def eyelid_transformer(self,eye_blink):
if self.config.osc_invert_eye_close:
return float(1 - eye_blink)
else:
return float(eye_blink)
se = False se = False
def output_osc(eye_x, eye_y, eye_blink, last_blink, self): def output_osc(eye_x, eye_y, eye_blink, last_blink, self):
global se global se
@ -28,9 +35,11 @@ def output_osc(eye_x, eye_y, eye_blink, last_blink, self):
self.client.send_message("/avatar/parameters/LeftEyeX", eye_x) self.client.send_message("/avatar/parameters/LeftEyeX", eye_x)
self.client.send_message("/avatar/parameters/RightEyeX", eye_x) self.client.send_message("/avatar/parameters/RightEyeX", eye_x)
self.client.send_message("/avatar/parameters/EyesY", eye_y) self.client.send_message("/avatar/parameters/EyesY", eye_y)
self.client.send_message("/avatar/parameters/RightEyeLidExpandedSqueeze", float(eye_blink)) self.config.osc_left_eye_close_address
self.client.send_message("/avatar/parameters/LeftEyeLidExpandedSqueeze", float(eye_blink))
self.client.send_message(self.config.osc_right_eye_close_address, eyelid_transformer(self,eye_blink))
self.client.send_message(self.config.osc_left_eye_close_address, eyelid_transformer(self,eye_blink))
else: else:
se = False se = False
@ -41,18 +50,18 @@ def output_osc(eye_x, eye_y, eye_blink, last_blink, self):
if self.l_eye_blink == 0.0: if self.l_eye_blink == 0.0:
if last_blink > 0.7: #when binary blink is on, blinks may be too fast for OSC so we repeat them. if last_blink > 0.7: #when binary blink is on, blinks may be too fast for OSC so we repeat them.
for i in range(5): for i in range(5):
self.client.send_message("/avatar/parameters/LeftEyeLidExpandedSqueeze", float(self.l_eye_blink)) self.client.send_message(self.config.osc_left_eye_close_address, eyelid_transformer(self,self.l_eye_blink))
last_blink = time.time() - last_blink last_blink = time.time() - last_blink
if self.config.gui_eye_falloff: if self.config.gui_eye_falloff:
if self.r_eye_blink == 0.0: #if both eyes closed and DEF is enables, blink if self.r_eye_blink == 0.0: #if both eyes closed and DEF is enables, blink
self.client.send_message("/avatar/parameters/LeftEyeLidExpandedSqueeze", float(self.l_eye_blink)) self.client.send_message(self.config.osc_left_eye_close_address, eyelid_transformer(self,self.l_eye_blink))
self.client.send_message("/avatar/parameters/RightEyeLidExpandedSqueeze", float(self.l_eye_blink)) self.client.send_message(self.config.osc_right_eye_close_address, eyelid_transformer(self,self.l_eye_blink))
self.l_eye_x = self.r_eye_x self.l_eye_x = self.r_eye_x
self.client.send_message("/avatar/parameters/LeftEyeX", self.l_eye_x) self.client.send_message("/avatar/parameters/LeftEyeX", self.l_eye_x)
self.left_y = eye_y self.left_y = eye_y
self.client.send_message("/avatar/parameters/LeftEyeLidExpandedSqueeze", float(self.l_eye_blink)) self.client.send_message(self.config.osc_left_eye_close_address, eyelid_transformer(self,self.l_eye_blink))
elif self.eye_id in [EyeId.RIGHT] and not se: #Right eye, send data to right elif self.eye_id in [EyeId.RIGHT] and not se: #Right eye, send data to right
@ -62,19 +71,19 @@ def output_osc(eye_x, eye_y, eye_blink, last_blink, self):
if self.r_eye_blink == 0.0: if self.r_eye_blink == 0.0:
if last_blink > 0.7: #when binary blink is on, blinks may be too fast for OSC so we repeat them. if last_blink > 0.7: #when binary blink is on, blinks may be too fast for OSC so we repeat them.
for i in range(5): for i in range(5):
self.client.send_message("/avatar/parameters/RightEyeLidExpandedSqueeze", float(self.r_eye_blink)) self.client.send_message(self.config.osc_right_eye_close_address, eyelid_transformer(self,self.r_eye_blink))
last_blink = time.time() - last_blink last_blink = time.time() - last_blink
if self.config.gui_eye_falloff: if self.config.gui_eye_falloff:
if self.l_eye_blink == 0.0: #if both eyes closed and DEF is enables, blink if self.l_eye_blink == 0.0: #if both eyes closed and DEF is enables, blink
self.client.send_message("/avatar/parameters/LeftEyeLidExpandedSqueeze", float(self.r_eye_blink)) self.client.send_message(self.config.osc_left_eye_close_address, eyelid_transformer(self,self.r_eye_blink))
self.client.send_message("/avatar/parameters/RightEyeLidExpandedSqueeze", float(self.r_eye_blink)) self.client.send_message(self.config.osc_right_eye_close_address, eyelid_transformer(self,self.r_eye_blink))
self.r_eye_x = self.l_eye_x self.r_eye_x = self.l_eye_x
self.client.send_message("/avatar/parameters/RightEyeX", eye_x) self.client.send_message("/avatar/parameters/RightEyeX", eye_x)
self.right_y = eye_y self.right_y = eye_y
self.client.send_message("/avatar/parameters/RightEyeLidExpandedSqueeze", float(self.r_eye_blink)) self.client.send_message(self.config.osc_right_eye_close_address, eyelid_transformer(self,self.r_eye_blink))
if self.main_config.eye_display_id in [EyeId.BOTH] and self.right_y != 621 and self.left_y != 621: if self.main_config.eye_display_id in [EyeId.BOTH] and self.right_y != 621 and self.left_y != 621:
y = (self.right_y + self.left_y) / 2 y = (self.right_y + self.left_y) / 2
@ -97,7 +106,7 @@ def output_osc(eye_x, eye_y, eye_blink, last_blink, self):
self.l_eye_x = eye_x self.l_eye_x = eye_x
self.l_eye_blink = eye_blink self.l_eye_blink = eye_blink
self.left_y = eye_y self.left_y = eye_y
self.client.send_message("/avatar/parameters/LeftClosed",float(1 - eye_blink)) self.client.send_message(self.config.osc_left_eye_close_address,eyelid_transformer(self,eye_blink))
if self.l_eye_blink == 0.0: if self.l_eye_blink == 0.0:
if last_blink > 0.7: # when binary blink is on, blinks may be too fast for OSC so we repeat them. if last_blink > 0.7: # when binary blink is on, blinks may be too fast for OSC so we repeat them.
@ -119,7 +128,7 @@ def output_osc(eye_x, eye_y, eye_blink, last_blink, self):
self.r_eye_x = eye_x self.r_eye_x = eye_x
self.r_eye_blink = eye_blink self.r_eye_blink = eye_blink
self.right_y = eye_y self.right_y = eye_y
self.client.send_message("/avatar/parameters/RightClosed",float(1 - eye_blink)) self.client.send_message(self.config.osc_right_eye_close_address,eyelid_transformer(self,eye_blink))
if self.r_eye_blink == 0.0: if self.r_eye_blink == 0.0:
if last_blink > 0.7: # when binary blink is on, blinks may be too fast for OSC so we repeat them. if last_blink > 0.7: # when binary blink is on, blinks may be too fast for OSC so we repeat them.