diff --git a/EyeTrackApp/eye_processor.py b/EyeTrackApp/eye_processor.py index 6da407f..b6a7da1 100644 --- a/EyeTrackApp/eye_processor.py +++ b/EyeTrackApp/eye_processor.py @@ -152,7 +152,7 @@ class EyeProcessor: self.out_x = 0.0 self.rawx = 0.0 self.rawy = 0.0 - self.eyeopen = 0.7 + self.eyeopen = 0.9 # blink self.max_ints = [] self.max_int = 0 @@ -351,7 +351,7 @@ class EyeProcessor: else: pass # todo: add process to initialise er_hsf when resolution changes - self.rawx, self.rawy, self.thresh = self.er_hsf.run(self.current_image_gray) + self.rawx, self.rawy, self.thresh, self.radius = self.er_hsf.run(self.current_image_gray) self.out_x, self.out_y = cal.cal_osc(self, self.rawx, self.rawy) self.current_algorithm = EyeInfoOrigin.HSF @@ -446,7 +446,9 @@ class EyeProcessor: # set algo priorities if self.settings.gui_HSF: + print('yes hsf') if self.er_hsf is None: + print('yes none') if self.eye_id in [EyeId.LEFT]: self.er_hsf = External_Run_HSF( self.settings.gui_skip_autoradius, @@ -486,7 +488,7 @@ class EyeProcessor: pass algolist[self.settings.gui_HSRACP] = self.HSRACM else: - if self.er_hsf is not None: + if not self.settings.gui_HSF and self.er_hsf is not None: self.er_hsf = None if self.settings.gui_DADDY: diff --git a/EyeTrackApp/intensity_based_openness.py b/EyeTrackApp/intensity_based_openness.py index 1f788fd..d3b3a72 100644 --- a/EyeTrackApp/intensity_based_openness.py +++ b/EyeTrackApp/intensity_based_openness.py @@ -144,6 +144,8 @@ class IntensityBasedOpeness: self.fc = 0 self.filterlist = [] self.averageList = [] + self.openlist = [] + self.eye_id = eye_id self.maxinten = 0 @@ -263,6 +265,12 @@ class IntensityBasedOpeness: # print('filter, assume blink') intensity = self.maxval + # if intensity <= np.percentile( # TODO test this + # self.filterlist, 1 + # ): # filter abnormally low values + # print('filter, assume blink') + # intensity = self.maxval + # self.tri_filter.append(intensity) # if len(self.tri_filter) > 3: # self.tri_filter.pop(0) @@ -353,6 +361,24 @@ class IntensityBasedOpeness: ) # for whatever reason when input and maxp are too close it outputs high eyeopen = 1 - eyeopen + + if len(self.openlist) < 1000: # TODO expose as setting? + self.openlist.append(eyeopen) + else: + if eyeopen >= np.percentile(self.openlist, 99) or eyeopen <= np.percentile(self.openlist, 1): + pass + else: + self.openlist.pop(0) + self.openlist.append(eyeopen) + + + try: + per = ((eyeopen - max(self.openlist)) / (min(self.openlist) - max(self.openlist))) + eyeopen = 1 - per + except: + pass + + if outputSamples > 0: if len(self.averageList) < outputSamples: self.averageList.append(eyeopen) @@ -361,6 +387,10 @@ class IntensityBasedOpeness: self.averageList.append(eyeopen) eyeopen = np.average(self.averageList) + + + + if changed and ( (time.time() - self.lct) > 5 ): # save every 5 seconds if something changed to save disk usage diff --git a/EyeTrackApp/leap.py b/EyeTrackApp/leap.py index 6719596..25d678d 100644 --- a/EyeTrackApp/leap.py +++ b/EyeTrackApp/leap.py @@ -75,7 +75,7 @@ class LEAP_C(object): onnxruntime.disable_telemetry_events() # Config variables self.num_threads = 2 # Number of python threads to use (using ~1 more than needed to acheive wanted fps yeilds lower cpu usage) - self.queue_max_size = 3 # Optimize for best CPU usage, Memory, and Latency. A maxsize is needed to not create a potential memory leak. + self.queue_max_size = 2 # Optimize for best CPU usage, Memory, and Latency. A maxsize is needed to not create a potential memory leak. self.model_path = 'Models/mommy062023.onnx' self.interval = 1 # FPS print update rate self.low_priority = True # set process priority to low @@ -121,6 +121,7 @@ class LEAP_C(object): ) self.dmax = 0 self.dmin = 0 + self.openlist = [] self.x = 0 self.y = 0 @@ -171,13 +172,20 @@ class LEAP_C(object): # print(pre_landmark) d = math.dist(pre_landmark[4], pre_landmark[12]) - if d > self.dmax: - self.dmax = d - if d < self.dmin: - self.dmin = d + + + if len(self.openlist) < 1000: # 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) + try: - per = (((d - self.dmax)) / (self.dmin - self.dmax)) + per = ((d - max(self.openlist)) / (min(self.openlist) - max(self.openlist))) per = 1 - per except: pass