mirror of
https://github.com/EyeTrackVR/EyeTrackVR.git
synced 2025-11-04 14:39:42 +08:00
fix HSF
This commit is contained in:
parent
8e5836575e
commit
3fee1a4e53
@ -152,7 +152,7 @@ class EyeProcessor:
|
|||||||
self.out_x = 0.0
|
self.out_x = 0.0
|
||||||
self.rawx = 0.0
|
self.rawx = 0.0
|
||||||
self.rawy = 0.0
|
self.rawy = 0.0
|
||||||
self.eyeopen = 0.7
|
self.eyeopen = 0.9
|
||||||
# blink
|
# blink
|
||||||
self.max_ints = []
|
self.max_ints = []
|
||||||
self.max_int = 0
|
self.max_int = 0
|
||||||
@ -351,7 +351,7 @@ class EyeProcessor:
|
|||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
# todo: add process to initialise er_hsf when resolution changes
|
# 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.out_x, self.out_y = cal.cal_osc(self, self.rawx, self.rawy)
|
||||||
self.current_algorithm = EyeInfoOrigin.HSF
|
self.current_algorithm = EyeInfoOrigin.HSF
|
||||||
|
|
||||||
@ -446,7 +446,9 @@ class EyeProcessor:
|
|||||||
|
|
||||||
# set algo priorities
|
# set algo priorities
|
||||||
if self.settings.gui_HSF:
|
if self.settings.gui_HSF:
|
||||||
|
print('yes hsf')
|
||||||
if self.er_hsf is None:
|
if self.er_hsf is None:
|
||||||
|
print('yes none')
|
||||||
if self.eye_id in [EyeId.LEFT]:
|
if self.eye_id in [EyeId.LEFT]:
|
||||||
self.er_hsf = External_Run_HSF(
|
self.er_hsf = External_Run_HSF(
|
||||||
self.settings.gui_skip_autoradius,
|
self.settings.gui_skip_autoradius,
|
||||||
@ -486,7 +488,7 @@ class EyeProcessor:
|
|||||||
pass
|
pass
|
||||||
algolist[self.settings.gui_HSRACP] = self.HSRACM
|
algolist[self.settings.gui_HSRACP] = self.HSRACM
|
||||||
else:
|
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
|
self.er_hsf = None
|
||||||
|
|
||||||
if self.settings.gui_DADDY:
|
if self.settings.gui_DADDY:
|
||||||
|
|||||||
@ -144,6 +144,8 @@ class IntensityBasedOpeness:
|
|||||||
self.fc = 0
|
self.fc = 0
|
||||||
self.filterlist = []
|
self.filterlist = []
|
||||||
self.averageList = []
|
self.averageList = []
|
||||||
|
self.openlist = []
|
||||||
|
|
||||||
self.eye_id = eye_id
|
self.eye_id = eye_id
|
||||||
|
|
||||||
self.maxinten = 0
|
self.maxinten = 0
|
||||||
@ -263,6 +265,12 @@ class IntensityBasedOpeness:
|
|||||||
# print('filter, assume blink')
|
# print('filter, assume blink')
|
||||||
intensity = self.maxval
|
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)
|
# self.tri_filter.append(intensity)
|
||||||
# if len(self.tri_filter) > 3:
|
# if len(self.tri_filter) > 3:
|
||||||
# self.tri_filter.pop(0)
|
# self.tri_filter.pop(0)
|
||||||
@ -353,6 +361,24 @@ class IntensityBasedOpeness:
|
|||||||
) # for whatever reason when input and maxp are too close it outputs high
|
) # for whatever reason when input and maxp are too close it outputs high
|
||||||
eyeopen = 1 - eyeopen
|
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 outputSamples > 0:
|
||||||
if len(self.averageList) < outputSamples:
|
if len(self.averageList) < outputSamples:
|
||||||
self.averageList.append(eyeopen)
|
self.averageList.append(eyeopen)
|
||||||
@ -361,6 +387,10 @@ class IntensityBasedOpeness:
|
|||||||
self.averageList.append(eyeopen)
|
self.averageList.append(eyeopen)
|
||||||
eyeopen = np.average(self.averageList)
|
eyeopen = np.average(self.averageList)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if changed and (
|
if changed and (
|
||||||
(time.time() - self.lct) > 5
|
(time.time() - self.lct) > 5
|
||||||
): # save every 5 seconds if something changed to save disk usage
|
): # save every 5 seconds if something changed to save disk usage
|
||||||
|
|||||||
@ -75,7 +75,7 @@ class LEAP_C(object):
|
|||||||
onnxruntime.disable_telemetry_events()
|
onnxruntime.disable_telemetry_events()
|
||||||
# Config variables
|
# 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.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.model_path = 'Models/mommy062023.onnx'
|
||||||
self.interval = 1 # FPS print update rate
|
self.interval = 1 # FPS print update rate
|
||||||
self.low_priority = True # set process priority to low
|
self.low_priority = True # set process priority to low
|
||||||
@ -121,6 +121,7 @@ class LEAP_C(object):
|
|||||||
)
|
)
|
||||||
self.dmax = 0
|
self.dmax = 0
|
||||||
self.dmin = 0
|
self.dmin = 0
|
||||||
|
self.openlist = []
|
||||||
self.x = 0
|
self.x = 0
|
||||||
self.y = 0
|
self.y = 0
|
||||||
|
|
||||||
@ -171,13 +172,20 @@ class LEAP_C(object):
|
|||||||
# print(pre_landmark)
|
# print(pre_landmark)
|
||||||
d = math.dist(pre_landmark[4], pre_landmark[12])
|
d = math.dist(pre_landmark[4], pre_landmark[12])
|
||||||
|
|
||||||
if d > self.dmax:
|
|
||||||
self.dmax = d
|
|
||||||
if d < self.dmin:
|
if len(self.openlist) < 1000: # TODO expose as setting?
|
||||||
self.dmin = d
|
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:
|
try:
|
||||||
per = (((d - self.dmax)) / (self.dmin - self.dmax))
|
per = ((d - max(self.openlist)) / (min(self.openlist) - max(self.openlist)))
|
||||||
per = 1 - per
|
per = 1 - per
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user