diff --git a/EyeTrackApp/camera.py b/EyeTrackApp/camera.py index 68cd088..82d238c 100644 --- a/EyeTrackApp/camera.py +++ b/EyeTrackApp/camera.py @@ -90,9 +90,7 @@ class Camera: if should_push: self.push_image_to_queue(image, frame_number, fps) except: - print( - "Capture source problem, assuming camera disconnected, waiting for reconnect." - ) + print("\033[91m[WARN] Capture source problem, assuming camera disconnected, waiting for reconnect...\033[0m") self.camera_status = CameraState.DISCONNECTED pass @@ -101,8 +99,6 @@ class Camera: # some sort of capture event conflict though. qsize = self.camera_output_outgoing.qsize() if qsize > 1: - print( - f"CAPTURE QUEUE BACKPRESSURE OF {qsize}. CHECK FOR CRASH OR TIMING ISSUES IN ALGORITHM." - ) + print(f"\033[91mCAPTURE QUEUE BACKPRESSURE OF {qsize}. CHECK FOR CRASH OR TIMING ISSUES IN ALGORITHM.\033[0m") self.camera_output_outgoing.put((image, frame_number, fps)) self.capture_event.clear() diff --git a/EyeTrackApp/camera_widget.py b/EyeTrackApp/camera_widget.py index 914b111..7856c55 100644 --- a/EyeTrackApp/camera_widget.py +++ b/EyeTrackApp/camera_widget.py @@ -183,7 +183,7 @@ class CameraWidget: event == self.gui_save_tracking_button and values[self.gui_camera_addr] != self.config.capture_source ): - print("[INFO] New value: {}".format(values[self.gui_camera_addr])) + print("\033[94m[INFO] New value: {}\033[0m".format(values[self.gui_camera_addr])) try: # Try storing ints as ints, for those using wired cameras. self.config.capture_source = int(values[self.gui_camera_addr]) @@ -208,14 +208,14 @@ class CameraWidget: self.main_config.save() if event == self.gui_tracking_button: - print("[INFO] Moving to tracking mode") + print("\033[94m[INFO] Moving to tracking mode\033[0m") self.in_roi_mode = False self.camera.set_output_queue(self.capture_queue) window[self.gui_roi_layout].update(visible=False) window[self.gui_tracking_layout].update(visible=True) if event == self.gui_roi_button: - print("[INFO] Move to roi mode") + print("\033[94m[INFO] Move to roi mode\033[0m") self.in_roi_mode = True self.camera.set_output_queue(self.roi_queue) window[self.gui_roi_layout].update(visible=True) @@ -257,7 +257,7 @@ class CameraWidget: elif self.camera.camera_status == CameraState.DISCONNECTED: window[self.gui_mode_readout].update("CAMERA DISCONNECTED") elif needs_roi_set: - window[self.gui_mode_readout].update("Awaiting Eye Cropping Setting") + window[self.gui_mode_readout].update("Awaiting Eye Crop") elif self.ransac.calibration_frame_counter != None: window[self.gui_mode_readout].update("Calibration") else: @@ -301,9 +301,6 @@ class CameraWidget: if eye_info.info_type != InformationOrigin.FAILURE and not eye_info.blink: graph.update(background_color="white") - - #try: - # print(eye_info.x, eye_info.y) if not np.isnan(eye_info.x) and not np.isnan(eye_info.y): graph.draw_circle( @@ -313,15 +310,13 @@ class CameraWidget: line_color="white", ) else: - graph.draw_circle( (0.0 * -100, 0.0 * -100), 25, fill_color="black", line_color="white", ) - # except: - # pass + elif eye_info.blink: graph.update(background_color="#6f4ca1") elif eye_info.info_type == InformationOrigin.FAILURE: diff --git a/EyeTrackApp/eye_processor.py b/EyeTrackApp/eye_processor.py index 146ac07..b62c6e6 100644 --- a/EyeTrackApp/eye_processor.py +++ b/EyeTrackApp/eye_processor.py @@ -57,6 +57,9 @@ from ransac import * from hsrac import * from blink import * + +from intensity_eye_open import * + class InformationOrigin(Enum): RANSAC = 1 BLOB = 2 @@ -171,7 +174,7 @@ class EyeProcessor: min_cutoff = float(self.settings.gui_min_cutoff) # 0.0004 beta = float(self.settings.gui_speed_coefficient) # 0.9 except: - print('[WARN] OneEuroFilter values must be a legal number.') + print('\033[93m[WARN] OneEuroFilter values must be a legal number.\033[0m') min_cutoff = 0.0004 beta = 0.9 noisy_point = np.array([1, 1]) @@ -194,7 +197,7 @@ class EyeProcessor: self.previous_image = self.current_image self.previous_rotation = self.config.rotation_angle except: # If this fails it likely means that the images are not the same size for some reason. - print('[ERROR] Size of frames to display are of unequal sizes.') + print('\033[91m[ERROR] Size of frames to display are of unequal sizes.\033[0m') pass def capture_crop_rotate_image(self): @@ -214,7 +217,7 @@ class EyeProcessor: except: # Failure to process frame, reuse previous frame. self.current_image = self.previous_image - print("[ERROR] Frame capture issue detected.") + print("\033[91m[ERROR] Frame capture issue detected.\033[0m") try: # Apply rotation to cropped area. For any rotation area outside of the bounds of the image, @@ -265,6 +268,7 @@ class EyeProcessor: # self.output_images_and_update(thresh, EyeInformation(InformationOrigin.HSRAC, 0, 0, 0, False)) def HSFM(self): cx, cy, frame = External_Run_HSF.HSFS(self) + intense(cx, cy, frame) 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, True)) #update app diff --git a/EyeTrackApp/eyetrackapp.py b/EyeTrackApp/eyetrackapp.py index 7aad343..35a4015 100644 --- a/EyeTrackApp/eyetrackapp.py +++ b/EyeTrackApp/eyetrackapp.py @@ -50,8 +50,8 @@ def main(): # Check to see if we can connect to our video source first. If not, bring up camera finding # dialog. - - print("[INFO] Checking for updates...") + + print("\033[95m[INFO] Checking for updates...\033[0m") url = "https://raw.githubusercontent.com/RedHawk989/EyeTrackVR-Installer/master/Version-Data/Version_Num.txt" html = urlopen(url).read() soup = BeautifulSoup(html, features="html.parser") diff --git a/EyeTrackApp/haar_surround_feature.py b/EyeTrackApp/haar_surround_feature.py index 2a5920a..944b4f9 100644 --- a/EyeTrackApp/haar_surround_feature.py +++ b/EyeTrackApp/haar_surround_feature.py @@ -813,10 +813,10 @@ class HSRAC_cls(object): self.timedict["crop"].append(cv_end_time - crop_start_time) self.timedict["total_cv"].append(cv_end_time - cv_start_time) - if calc_print_enable: + # if calc_print_enable: # the lower the response the better the likelyhood of there being a pupil. you can adujst the radius and steps accordingly - print('Kernel response:', response) - print('Pixel position:', center_xy) + # print('Kernel response:', response) + # print('Pixel position:', center_xy) if imshow_enable: if self.now_modeo != self.cv_modeo[0] and self.now_modeo != self.cv_modeo[1]: diff --git a/EyeTrackApp/intensity_eye_open.py b/EyeTrackApp/intensity_eye_open.py index cfb05ac..311b91a 100644 --- a/EyeTrackApp/intensity_eye_open.py +++ b/EyeTrackApp/intensity_eye_open.py @@ -19,26 +19,40 @@ xy = 69 def intense(x, y, frame): xy = int(str(x) + str(y)) intensity = np.sum(frame) - print(intensity) + #print(intensity) - try: + try: #max pupil per cord dfb = data[data['xy']==xy].index.values.astype(int)[0] # find pandas index of line with matching xy value if intensity < data.at[dfb, 'intensity']: #if current intensity value is less (more pupil), save that data.at[dfb, 'intensity'] = intensity # set value data.to_csv(fname, encoding='utf-8', index=False) #save file since we made a change - if intensity > data.at[0, 'intensity']: #if current intensity value is more (less pupil), save that NOTE: we have the - data.at[0, 'intensity'] = intensity # set value - data.to_csv(fname, encoding='utf-8', index=False) #save file since we made a change - - - #e = data.at[dfb,'intensity'] #find intensity with value - except: # that value is not yet saved data.loc[len(data.index)] = [xy, intensity] #create new data on last line of csv with current intesity data.to_csv(fname, encoding='utf-8', index=False) #save file since we made a change + + try: # min pupil global + if intensity > data.at[0, 'intensity']: #if current intensity value is more (less pupil), save that NOTE: we have the + data.at[0, 'intensity'] = intensity # set value at 0 index + data.to_csv(fname, encoding='utf-8', index=False) #save file since we made a change + print("new max", intensity) + + except: # there is no max intensity yet, create + data.at[0, 'intensity'] = intensity # set value at 0 index + data.to_csv(fname, encoding='utf-8', index=False) #save file since we made a change + print("create max", intensity) + + maxp = data.at[dfb, 'intensity'] + minp = data.at[0, 'intensity'] + eyeopen = (intensity - maxp) / (minp - maxp) + print(f"EYEOPEN: {eyeopen}") + + #e = data.at[dfb,'intensity'] #find intensity with value + + + #data.at[dfb, 'intensity'] = 4 # set value #data.to_csv(fname, encoding='utf-8', index=False) #save file @@ -48,24 +62,25 @@ def intense(x, y, frame): return -vid = cv2.VideoCapture("http://192.168.1.43:4747/video") -x = int(input("x")) -y = int(input("y")) -while(True): - - ret, frame = vid.read() - - cv2.imshow('frame', frame) - upper_x = x + 20 - lower_x = x - 20 - upper_y = y + 20 - lower_y = y - 20 - - cropped_image = frame[lower_y:upper_y, lower_x:upper_x] - intense(x,y, cropped_image) +#vid = cv2.VideoCapture("http://192.168.1.43:4747/video") +#x = int(input("x")) +#y = int(input("y")) - if cv2.waitKey(1) & 0xFF == ord('q'): - break +#while(True): + + # ret, frame = vid.read() -vid.release() -cv2.destroyAllWindows() \ No newline at end of file + # cv2.imshow('frame', frame) + # upper_x = x + 20 + #lower_x = x - 20 + # upper_y = y + 20 + # lower_y = y - 20 + + # cropped_image = frame[lower_y:upper_y, lower_x:upper_x] + # intense(x,y, cropped_image) + + # if cv2.waitKey(1) & 0xFF == ord('q'): + # break + +#vid.release() +#cv2.destroyAllWindows() \ No newline at end of file diff --git a/EyeTrackApp/one_euro_filter.py b/EyeTrackApp/one_euro_filter.py index 70d482c..9b8e563 100644 --- a/EyeTrackApp/one_euro_filter.py +++ b/EyeTrackApp/one_euro_filter.py @@ -50,4 +50,4 @@ class OneEuroFilter: return x_hat except: - print("[WARN] One Euro Filter Error. Is your system clock running properly?") \ No newline at end of file + print("\033[91m[ERROR] One Euro Filter Error. Is your system clock running properly?\033[0m") \ No newline at end of file diff --git a/EyeTrackApp/osc.py b/EyeTrackApp/osc.py index e07a452..4ee62c0 100644 --- a/EyeTrackApp/osc.py +++ b/EyeTrackApp/osc.py @@ -163,7 +163,7 @@ class VRChatOSCReceiver: print(f"\033[91m[ERROR] OSC Recieve port: {self.config.gui_osc_receiver_port} occupied.\033[0m") def shutdown(self): - print("\033[94m[INFO] Exiting OSC receiver") + print("\033[94m[INFO] Exiting OSC receiver\033[0m") try: self.server.shutdown() except: diff --git a/EyeTrackApp/osc_calibrate_filter.py b/EyeTrackApp/osc_calibrate_filter.py index de5675c..eb76b0a 100644 --- a/EyeTrackApp/osc_calibrate_filter.py +++ b/EyeTrackApp/osc_calibrate_filter.py @@ -38,6 +38,8 @@ def cal_osc(self, cx, cy): self.ts = 10 try: + out_x = 0.5 + out_y = 0.5 xl = float( (cx - self.xoff) / (self.xmax - self.xoff) ) @@ -51,8 +53,6 @@ def cal_osc(self, cx, cy): (cy - self.yoff) / (self.ymax - self.yoff) ) - out_x = 0 - out_y = 0 if self.settings.gui_flip_y_axis: # check config on flipped values settings and apply accordingly if yd >= 0: out_y = max(0.0, min(1.0, yd)) @@ -76,6 +76,8 @@ def cal_osc(self, cx, cy): out_x = -abs(max(0.0, min(1.0, xl))) except: print("[ERROR] Eye Calibration Invalid!") + out_x = 0.5 + out_y = 0.5 try: noisy_point = np.array([float(out_x), float(out_y)]) # fliter our values with a One Euro Filter point_hat = self.one_euro_filter(noisy_point) diff --git a/EyeTrackApp/settings_widget.py b/EyeTrackApp/settings_widget.py index 517d0ee..b61a105 100644 --- a/EyeTrackApp/settings_widget.py +++ b/EyeTrackApp/settings_widget.py @@ -349,9 +349,9 @@ class SettingsWidget: self.config.gui_osc_port = int(values[self.gui_osc_port]) changed = True else: - print("[ERROR] OSC port value must be an integer 0-65535") + print("\033[91m[ERROR] OSC port value must be an integer 0-65535\033[0m") except: - print("[ERROR] OSC port value must be an integer 0-65535") + print("\033[91m[ERROR] OSC port value must be an integer 0-65535\033[0m") if self.config.gui_osc_receiver_port != values[self.gui_osc_receiver_port]: try: @@ -360,9 +360,9 @@ class SettingsWidget: self.config.gui_osc_receiver_port = int(values[self.gui_osc_receiver_port]) changed = True else: - print("[ERROR] OSC receive port value must be an integer 0-65535") + print("\033[91m[ERROR] OSC receive port value must be an integer 0-65535\033[0m") except: - print("[ERROR] OSC receive port value must be an integer 0-65535") + print("\033[91m[ERROR] OSC receive port value must be an integer 0-65535\033[0m") if self.config.gui_osc_address != values[self.gui_osc_address]: self.config.gui_osc_address = values[self.gui_osc_address]