def classify(self, *args, **kwargs): """ classify eye movement """ if self.g_pool.app == "exporter": return utils.logger.info("Gaze postions changed. Recalculating.") if self.eye_movement_task and self.eye_movement_task.running: self.eye_movement_task.kill(grace_period=1) capture = model.Immutable_Capture(self.g_pool.capture) min_data_confidence = self.min_data_confidence gaze_data: utils.Gaze_Data = [ gp.serialized for gp in self.g_pool.gaze_positions if gp["confidence"] > min_data_confidence ] self.eye_movement_task = worker.Offline_Detection_Task( args=(capture, gaze_data)) self.task_manager.add_task(self.eye_movement_task) self.eye_movement_task.add_observers( on_started=self._on_task_started, on_yield=self._on_task_yield, on_completed=self._on_task_completed, on_ended=self._on_task_ended, on_exception=self._on_task_exception, on_canceled_or_killed=self._on_task_canceled_or_killed, ) self.eye_movement_task.start()
def recent_events(self, events): gaze_data = events["gaze"] capture = model.Immutable_Capture(self.g_pool.capture) min_data_confidence = self.min_data_confidence gaze_data = [ datum for datum in gaze_data if datum["confidence"] > min_data_confidence ] self._buffered_detector.extend_gaze_data(gaze_data=gaze_data, capture=capture) if "frame" not in events: return frame_timestamp = events["frame"].timestamp self._recent_segments = self._buffered_detector.segments_at_timestamp( frame_timestamp) public_segments = [ segment.to_public_dict() for segment in self._recent_segments ] events[utils.EYE_MOVEMENT_EVENT_KEY] = public_segments