diff --git a/EyeTrackApp/IBO.csv b/EyeTrackApp/IBO.csv new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/EyeTrackApp/IBO.csv @@ -0,0 +1 @@ + diff --git a/EyeTrackApp/eye_processor.py b/EyeTrackApp/eye_processor.py index dc1fe30..00c6234 100644 --- a/EyeTrackApp/eye_processor.py +++ b/EyeTrackApp/eye_processor.py @@ -248,28 +248,28 @@ class EyeProcessor: def HSRACM(self): cx, cy, thresh, gray_frame = External_Run_HSRACS.HSRACS(self) self.current_image_gray = gray_frame - - # thresh = gray_frame if self.prev_x == None: self.prev_x = cx self.prev_y = cy - #print(self.prev_x, self.prev_y, cx, cy) + #print(self.prev_x, self.prev_y, cx, cy) + # #filter values with too much movement # if (cx - self.prev_x) <= 45 and (cy - self.prev_y) <= 45 : # self.prev_x = cx # self.prev_y = cy - print(self.blinkvalue) + eyeopen = intense(cx, cy, self.current_image_gray) out_x, out_y = cal_osc(self, cx, cy) + if cx == 0: - self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, self.blinkvalue)) #update app + self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, eyeopen)) #update app else: - self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, self.blinkvalue)) + self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, out_x, out_y, 0, eyeopen)) # else: # print("EYE MOVED TOO FAST") # self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, 0, 0, 0, False)) def HSFM(self): cx, cy, frame = External_Run_HSF.HSFS(self) - eyeopen = intense(cx, cy, self.current_image_gray) #not sure if i want this run on every algo or on the system.. + eyeopen = intense(cx, cy, self.current_image_gray) out_x, out_y = cal_osc(self, cx, cy) if cx == 0: self.output_images_and_update(frame, EyeInformation(InformationOrigin.HSF, out_x, out_y, 0, eyeopen)) #update app diff --git a/EyeTrackApp/intensity_eye_open.py b/EyeTrackApp/intensity_eye_open.py index 8eb8ffd..b0fdd7c 100644 --- a/EyeTrackApp/intensity_eye_open.py +++ b/EyeTrackApp/intensity_eye_open.py @@ -10,16 +10,27 @@ OSCport=9000 #VR Chat OSC port client = udp_client.SimpleUDPClient(OSCip, OSCport) #higher intensity means more closed/ more white/less pupil -# HOW THIS WORKS: -# Here is my idea: +#Hm I need an acronym for this, any ideas? +#IBO Intensity Based Openess + + +# HOW THIS WORKS: # we get the intensity of pupil area from HSF crop, When the eyelid starts to close, the pupil starts being obstructed by skin which is generally lighter than the pupil. # This causes the intensity to increase. We save all of the darkest intensities of each pupil position to calculate for pupil movement. # ex. when you look up there is less pupil visible, which results in an uncalculated change in intensity even though the eyelid has not moved in a meaningful way. # We compare the darkest intensity of that area, to the lightest (global) intensity to find the appropriate openness state via a float. -fname = "test_list.txt" -data = pd.read_csv(fname, sep=",") -#TODO we need more pixel points for smooth operation, lets get this setup in hsrac and add a .25 or .33 range? +fname = "IBO.csv" #TODO Expose as setting + +try: + data = pd.read_csv(fname, sep=",") +except: + cf = open(fname, "w") + cf.write("xy,intensity") + cf.close() + data = pd.read_csv(fname, sep=",") + +#TODO we need more pixel points for smooth operation, lets get this setup in hsrac def intense(x, y, frame): upper_x = x + 25 @@ -77,7 +88,7 @@ def intense(x, y, frame): print(intensity, maxp, minp, x, y) # eyeopen = max(0.0, min(1.0, eyeopen)) # print(f"EYEOPEN: {eyeopen}") - client.send_message("/avatar/parameters/RightEyeLidExpandedSqueeze", float(eyeopen)) # open r + client.send_message("/avatar/parameters/RightEyeLidExpandedSqueeze", float(eyeopen)) # open r client.send_message("/avatar/parameters/LeftEyeLidExpandedSqueeze", float(eyeopen)) except: print('[INFO] Something went wrong, assuming blink.') diff --git a/EyeTrackApp/osc.py b/EyeTrackApp/osc.py index 93279be..faa02b8 100644 --- a/EyeTrackApp/osc.py +++ b/EyeTrackApp/osc.py @@ -45,7 +45,8 @@ class VRChatOSC: except: continue #eye_info.blink - if not eye_info.blink: + print(eye_info.blink) + if eye_info.blink > 0.1: #if eye is not "closed" this will need tuning if self.config.tracker_single_eye == 1 or self.config.tracker_single_eye == 2: self.client.send_message("/avatar/parameters/LeftEyeX", eye_info.x) # only one eye is detected or there is an error. Send mirrored data to both eyes. self.client.send_message("/avatar/parameters/RightEyeX", eye_info.x)