diff --git a/EyeTrackApp/daddy.py b/EyeTrackApp/daddy.py index 8b5740a..2a35547 100644 --- a/EyeTrackApp/daddy.py +++ b/EyeTrackApp/daddy.py @@ -265,28 +265,26 @@ class DADDY_cls(object): kps = pred.astype(np.int32) # eyecenter = kps[:6].mean(axis=0).astype(int) - # temp_eyecenter = pred[:6].mean(axis=0) ear = self.beer.ear(pred) # ear=self.ear_oef(ear[np.newaxis])#memo: Parameters need tuning - if save_video or imshow_enable: - for i in range(kps.shape[0]): - if i < 6: - color = (0, 0, 255) - elif i == 6: - color = 128 # (0, 255, 0) - else: - color = (255, 0, 0) - cv2.circle(gray_frame, (kps[i, 0], kps[i, 1]), 1, color, 2) - cv2.putText(gray_frame, str(i), (kps[i, 0] - 10, kps[i, 1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (0, 0, 255), 1) - # cv2.circle(gray_frame, (eyecenter.tolist()), 1, (128, 128, 0), 2) - # cv2.circle(gray_frame, (iriscenter.tolist()), 1, (0, 128, 128), 2) - # cv2.circle(gray_frame,(eyecenter.tolist()),int(self.center_dist_med.median()),(0, 0, 255),1) - # cv2.ellipse(gray_frame, (eyecenter.tolist(), (int(self.iris_med_w.median()*2.5), int(self.iris_med_h.median()*2.5)), np.rad2deg(self.eye_med_rad.median())), (255, 0, 0), thickness=1) - cv2.putText(gray_frame, "EAR: "+str(ear), (self.current_image_gray.shape[1]//10, self.current_image_gray.shape[0]//10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (255,0,0), 1) - cv2.imshow("gray_frame", gray_frame) - if cv2.waitKey(1) & 0xFF == ord("q"): - pass + pupil_center = pred[7:].mean(axis=0) + pupil_center_x = int(pupil_center[0]) + pupil_center_y = int(pupil_center[1]) + + for i in range(kps.shape[0]): + if i < 6: + color = (0, 0, 255) + elif i == 6: + color = 128 + else: + color = (255, 0, 0) + # todo: We should have a proper variable for drawing. + cv2.circle(self.current_image_gray, (kps[i, 0], kps[i, 1]), 1, color, 2) + # cv2.putText(self.current_image_gray, str(i), (kps[i, 0] - 10, kps[i, 1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (0, 0, 255), 1) + # cv2.putText(self.current_image_gray, "EAR: "+str(ear), (self.current_image_gray.shape[1]//10, self.current_image_gray.shape[0]//10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (255,0,0), 1) + + # global loopnum # if loopnum < 1350*2: # # self.video.write(cv2.resize(gray_frame.copy(), (200, 150), None)) @@ -302,7 +300,8 @@ class DADDY_cls(object): # i == [0:6] = Inner and outer corners of eyes and eyelids # i == [6] = pupil # i == [7:] = iris - return ear + + return pupil_center_x, pupil_center_y, ear class External_Run_DADDY(object): @@ -311,8 +310,8 @@ class External_Run_DADDY(object): def run(self, current_image_gray): self.algo.current_image_gray = current_image_gray - pupil = self.algo.single_run() - return pupil + pupil_x, pupil_y, ear = self.algo.single_run() + return pupil_x, pupil_y, ear if __name__ == "__main__": diff --git a/EyeTrackApp/eye_processor.py b/EyeTrackApp/eye_processor.py index fea786a..00b727f 100644 --- a/EyeTrackApp/eye_processor.py +++ b/EyeTrackApp/eye_processor.py @@ -68,6 +68,7 @@ class InformationOrigin(Enum): FAILURE = 3 HSF = 4 HSRAC = 5 + DADDY = 6 bbb = 0 @dataclass @@ -153,6 +154,7 @@ class EyeProcessor: self.er_hsf = None self.er_hsrac = None + self.er_daddy = None self.ibo = IntensityBasedOpeness(eyeside=EyeLR.LEFT if self.eye_id is EyeId.LEFT else EyeLR.RIGHT if eye_id is EyeId.RIGHT else -1) self.roi_include_set = {"rotation_angle", "roi_window_x", "roi_window_y"} @@ -175,7 +177,6 @@ class EyeProcessor: self.prev_x = None self.prev_y = None - self.daddy = None self.current_algo = InformationOrigin.HSRAC @@ -278,7 +279,13 @@ class EyeProcessor: self.eyeopen = BLINK(self) def DADDYM(self): - landmark = self.daddy.run(self.current_image_gray) + # todo: We should have a proper variable for drawing. + self.thresh=self.current_image_gray.copy() + self.rawx, self.rawy, self.eyeopen = self.er_daddy.run(self.current_image_gray) + # Daddy also uses a one euro filter, so I'll have to use it twice, but I'm not going to think too much about it. + self.out_x, self.out_y = cal_osc(self, self.rawx, self.rawy) + + self.current_algorithm = InformationOrigin.DADDY def HSRACM(self): # todo: added process to initialise er_hsrac when resolution changes @@ -361,11 +368,6 @@ class EyeProcessor: algolist = [None, None, None, None, None] #set algo priorities - - - - - if self.settings.gui_HSF: if self.er_hsf is None: self.er_hsf = External_Run_HSF(self.settings.gui_skip_autoradius, self.settings.gui_HSF_radius) @@ -381,17 +383,16 @@ class EyeProcessor: else: if self.er_hsrac is not None: self.er_hsrac = None + + if self.settings.gui_DADDY: + if self.er_daddy is None: + self.er_daddy = External_Run_DADDY() + algolist[self.settings.gui_DADDYP] = self.DADDYM + else: + if self.er_daddy is not None: + self.er_daddy = None _, self.firstalgo, self.secondalgo, self.thirdalgo, self.fourthalgo = algolist - - if self.settings.gui_HSF and self.settings.gui_HSFP == 1: #I feel like this is super innefficient though it only runs at startup and no solution is coming to me atm - self.firstalgo = self.HSFM - elif self.settings.gui_HSF and self.settings.gui_HSFP == 2: - self.secondalgo = self.HSFM - elif self.settings.gui_HSF and self.settings.gui_HSFP == 3: - self.thirdalgo = self.HSFM - elif self.settings.gui_HSF and self.settings.gui_HSFP == 4: - self.fourthalgo = self.HSFM if self.settings.gui_RANSAC3D and self.settings.gui_RANSAC3DP == 1: self.firstalgo = self.RANSAC3DM @@ -402,15 +403,6 @@ class EyeProcessor: elif self.settings.gui_RANSAC3D and self.settings.gui_RANSAC3DP == 4: self.fourthalgo = self.RANSAC3DM - if self.settings.gui_HSRAC and self.settings.gui_HSRACP == 1: - self.firstalgo = self.HSRACM - elif self.settings.gui_HSRAC and self.settings.gui_HSRACP == 2: - self.secondalgo = self.HSRACM - elif self.settings.gui_HSRAC and self.settings.gui_HSRACP == 3: - self.thirdalgo = self.HSRACM - elif self.settings.gui_HSRAC and self.settings.gui_HSRACP == 4: - self.fourthalgo = self.HSRACM - if self.settings.gui_BLOB and self.settings.gui_BLOBP == 1: self.firstalgo = self.BLOBM elif self.settings.gui_BLOB and self.settings.gui_BLOBP == 2: