From a1aecc9cdbecfc47f082f4dc538babbda4896387 Mon Sep 17 00:00:00 2001 From: Etheri <77143489+EtheriVR@users.noreply.github.com> Date: Sat, 17 Jun 2023 15:56:45 +0200 Subject: [PATCH] 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 --- EyeTrackApp/config.py | 3 +++ EyeTrackApp/osc.py | 37 +++++++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/EyeTrackApp/config.py b/EyeTrackApp/config.py index d25d0f6..b7f8597 100644 --- a/EyeTrackApp/config.py +++ b/EyeTrackApp/config.py @@ -69,6 +69,9 @@ class EyeTrackSettingsConfig(BaseModel): ibo_average_output_samples: int = 0 ibo_fully_close_eye_threshold: float = 0.3 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 diff --git a/EyeTrackApp/osc.py b/EyeTrackApp/osc.py index d75ef5b..89b5b45 100644 --- a/EyeTrackApp/osc.py +++ b/EyeTrackApp/osc.py @@ -16,6 +16,13 @@ class EyeId(IntEnum): ALGOSETTINGS = 4 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 def output_osc(eye_x, eye_y, eye_blink, last_blink, self): 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/RightEyeX", eye_x) self.client.send_message("/avatar/parameters/EyesY", eye_y) - - self.client.send_message("/avatar/parameters/RightEyeLidExpandedSqueeze", float(eye_blink)) - self.client.send_message("/avatar/parameters/LeftEyeLidExpandedSqueeze", float(eye_blink)) + + self.config.osc_left_eye_close_address + + 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: 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 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): - 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 if self.config.gui_eye_falloff: 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("/avatar/parameters/RightEyeLidExpandedSqueeze", 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(self.config.osc_right_eye_close_address, eyelid_transformer(self,self.l_eye_blink)) self.l_eye_x = self.r_eye_x self.client.send_message("/avatar/parameters/LeftEyeX", self.l_eye_x) 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 @@ -62,19 +71,19 @@ def output_osc(eye_x, eye_y, eye_blink, last_blink, self): 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. 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 if self.config.gui_eye_falloff: 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("/avatar/parameters/RightEyeLidExpandedSqueeze", 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(self.config.osc_right_eye_close_address, eyelid_transformer(self,self.r_eye_blink)) self.r_eye_x = self.l_eye_x - + self.client.send_message("/avatar/parameters/RightEyeX", eye_x) 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: 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_blink = eye_blink 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 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_blink = eye_blink 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 last_blink > 0.7: # when binary blink is on, blinks may be too fast for OSC so we repeat them.