def __init__(self,g_pool,mode="Show Markers and Surfaces",min_marker_perimeter = 100,invert_image=False): super(Surface_Tracker, self).__init__(g_pool) self.order = .2 # all markers that are detected in the most recent frame self.markers = [] self.camera_calibration = load_camera_calibration(self.g_pool) self.load_surface_definitions_from_file() # edit surfaces self.edit_surfaces = [] self.edit_surf_verts = [] self.marker_edit_surface = None #plugin state self.mode = mode self.running = True self.robust_detection = 1 self.aperture = 11 self.min_marker_perimeter = min_marker_perimeter self.locate_3d = False self.invert_image = invert_image self.img_shape = None self.menu = None self.button = None self.add_button = None
def stop(self): # explicit release of VideoWriter self.writer.release() self.writer = None save_object(self.data, os.path.join(self.rec_path, "pupil_data")) try: copy2(os.path.join(self.g_pool.user_dir, "surface_definitions"), os.path.join(self.rec_path, "surface_definitions")) except: logger.info("No surface_definitions data found. You may want this if you do marker tracking.") camera_calibration = load_camera_calibration(self.g_pool) if camera_calibration is not None: save_object(camera_calibration, os.path.join(self.rec_path, "camera_calibration")) else: logger.info("No camera calibration found.") try: with open(self.meta_info_path, 'a', newline='') as csvfile: csv_utils.write_key_value_file(csvfile, { 'Duration Time': self.get_rec_time_str(), 'World Camera Frames': self.frame_count, 'World Camera Resolution': str(self.g_pool.capture.frame_size[0])+"x"+str(self.g_pool.capture.frame_size[1]), 'Capture Software Version': self.g_pool.version, 'Data Format Version': self.g_pool.version, 'System Info': get_system_info() }, append=True) except Exception: logger.exception("Could not save metadata. Please report this bug!") try: with open(os.path.join(self.rec_path, "user_info.csv"), 'w', newline='') as csvfile: csv_utils.write_key_value_file(csvfile, self.user_info) except Exception: logger.exception("Could not save userdata. Please report this bug!") self.close_info_menu() self.running = False self.menu.read_only = False self.button.status_text = '' self.data = {'pupil_positions': [], 'gaze_positions': []} self.pupil_pos_list = [] self.gaze_pos_list = [] logger.info("Saved Recording.") self.notify_all({'subject': 'recording.stopped', 'rec_path': self.rec_path})
def stop(self): # explicit release of VideoWriter self.writer.release() self.writer = None save_object(self.data, os.path.join(self.rec_path, "pupil_data")) try: copy2(os.path.join(self.g_pool.user_dir, "surface_definitions"), os.path.join(self.rec_path, "surface_definitions")) except: logger.info( "No surface_definitions data found. You may want this if you do marker tracking." ) camera_calibration = load_camera_calibration(self.g_pool) if camera_calibration is not None: save_object(camera_calibration, os.path.join(self.rec_path, "camera_calibration")) else: logger.info("No camera calibration found.") try: with open(self.meta_info_path, 'a', newline='') as csvfile: csv_utils.write_key_value_file(csvfile, { 'Duration Time': self.get_rec_time_str(), 'World Camera Frames': self.frame_count, 'World Camera Resolution': str(self.g_pool.capture.frame_size[0]) + "x" + str(self.g_pool.capture.frame_size[1]), 'Capture Software Version': self.g_pool.version, 'Data Format Version': self.g_pool.version, 'System Info': get_system_info() }, append=True) except Exception: logger.exception( "Could not save metadata. Please report this bug!") try: with open(os.path.join(self.rec_path, "user_info.csv"), 'w', newline='') as csvfile: csv_utils.write_key_value_file(csvfile, self.user_info) except Exception: logger.exception( "Could not save userdata. Please report this bug!") self.close_info_menu() self.running = False self.menu.read_only = False self.button.status_text = '' self.data = {'pupil_positions': [], 'gaze_positions': []} self.pupil_pos_list = [] self.gaze_pos_list = [] logger.info("Saved Recording.") self.notify_all({ 'subject': 'recording.stopped', 'rec_path': self.rec_path })
def stop(self): #explicit release of VideoWriter self.writer.release() self.writer = None if self.record_eye: for alive, pipe in zip(self.g_pool.eyes_are_alive,self.g_pool.eye_pipes): if alive.value: pipe.send(('Rec_Stop',None)) save_object(self.data,os.path.join(self.rec_path, "pupil_data")) timestamps_path = os.path.join(self.rec_path, "world_timestamps.npy") # ts = sanitize_timestamps(np.array(self.timestamps)) ts = np.array(self.timestamps) np.save(timestamps_path,ts) try: copy2(os.path.join(self.g_pool.user_dir,"surface_definitions"),os.path.join(self.rec_path,"surface_definitions")) except: logger.info("No surface_definitions data found. You may want this if you do marker tracking.") try: copy2(os.path.join(self.g_pool.user_dir,"user_calibration_data"),os.path.join(self.rec_path,"user_calibration_data")) except: logger.warning("No user calibration data found. Please calibrate first.") camera_calibration = load_camera_calibration(self.g_pool) if camera_calibration is not None: save_object(camera_calibration,os.path.join(self.rec_path, "camera_calibration")) else: logger.info("No camera calibration found.") try: with open(self.meta_info_path, 'a') as f: f.write("Duration Time\t"+ self.get_rec_time_str()+ "\n") f.write("World Camera Frames\t"+ str(self.frame_count)+ "\n") f.write("World Camera Resolution\t"+ str(self.g_pool.capture.frame_size[0])+"x"+str(self.g_pool.capture.frame_size[1])+"\n") f.write("Capture Software Version\t%s\n"%self.g_pool.version) f.write("System Info\t%s"%get_system_info()) except Exception: logger.exception("Could not save metadata. Please report this bug!") try: with open(os.path.join(self.rec_path, "user_info.csv"), 'w') as f: for name,val in self.user_info.iteritems(): f.write("%s\t%s\n"%(name,val)) except Exception: logger.exception("Could not save userdata. Please report this bug!") self.close_info_menu() if self.audio_writer: self.audio_writer = None self.running = False self.menu.read_only = False self.button.status_text = '' self.timestamps = [] self.data = {'pupil_positions':[],'gaze_positions':[]} self.pupil_pos_list = [] self.gaze_pos_list = [] logger.info("Saved Recording.") self.notify_all( {'subject':'rec_stopped','rec_path':self.rec_path,'network_propagate':True} )
def stop(self): #explicit release of VideoWriter self.writer.release() self.writer = None if self.record_eye: for alive, pipe in zip(self.g_pool.eyes_are_alive,self.g_pool.eye_pipes): if alive.value: pipe.send(('Rec_Stop',None)) save_object(self.data,os.path.join(self.rec_path, "pupil_data")) timestamps_path = os.path.join(self.rec_path, "world_timestamps.npy") # ts = sanitize_timestamps(np.array(self.timestamps)) ts = np.array(self.timestamps) np.save(timestamps_path,ts) try: copy2(os.path.join(self.g_pool.user_dir,"surface_definitions"),os.path.join(self.rec_path,"surface_definitions")) except: logger.info("No surface_definitions data found. You may want this if you do marker tracking.") try: copy2(os.path.join(self.g_pool.user_dir,"user_calibration_data"),os.path.join(self.rec_path,"user_calibration_data")) except: logger.warning("No user calibration data found. Please calibrate first.") camera_calibration = load_camera_calibration(self.g_pool) if camera_calibration is not None: save_object(camera_calibration,os.path.join(self.rec_path, "camera_calibration")) else: logger.info("No camera calibration found.") try: with open(self.meta_info_path, 'a') as f: f.write("Duration Time\t"+ self.get_rec_time_str()+ "\n") f.write("World Camera Frames\t"+ str(self.frame_count)+ "\n") f.write("World Camera Resolution\t"+ str(self.g_pool.capture.frame_size[0])+"x"+str(self.g_pool.capture.frame_size[1])+"\n") f.write("Capture Software Version\t%s\n"%self.g_pool.version) f.write("System Info\t%s"%get_system_info()) except Exception: logger.exception("Could not save metadata. Please report this bug!") try: with open(os.path.join(self.rec_path, "user_info.csv"), 'w') as f: for name,val in self.user_info.iteritems(): f.write("%s\t%s\n"%(name,val)) except Exception: logger.exception("Could not save userdata. Please report this bug!") self.close_info_menu() if self.audio_writer: self.audio_writer = None self.running = False self.menu.read_only = False self.button.status_text = '' self.timestamps = [] self.data = {'pupil_positions':[],'gaze_positions':[]} self.pupil_pos_list = [] self.gaze_pos_list = [] logger.info("Saved Recording.") self.notify_all( {'subject':'rec_stopped','rec_path':self.rec_path,'network_propagate':True} )
def stop(self): #explicit release of VideoWriter self.writer.release() self.writer = None save_object(self.data,os.path.join(self.rec_path, "pupil_data")) self.glint_pos_list = np.array(self.glint_pos_list) glint_list_path = os.path.join(self.rec_path, "glint_positions.npy") np.save(glint_list_path,self.glint_pos_list) timestamps_path = os.path.join(self.rec_path, "world_timestamps.npy") # ts = sanitize_timestamps(np.array(self.timestamps)) ts = np.array(self.timestamps) np.save(timestamps_path,ts) timestampsUnix_path = os.path.join(self.rec_path, "world_timestamps_unix.npy") tsUnix = np.array(self.timestampsUnix) np.save(timestampsUnix_path,tsUnix) try: copy2(os.path.join(self.g_pool.user_dir,"surface_definitions"),os.path.join(self.rec_path,"surface_definitions")) except: logger.info("No surface_definitions data found. You may want this if you do marker tracking.") try: copy2(os.path.join(self.g_pool.user_dir,"user_calibration_data"),os.path.join(self.rec_path,"user_calibration_data")) except: logger.warning("No user calibration data found. Please calibrate first.") try: copy2(os.path.join(self.g_pool.user_dir,"cal_pt_cloud_glint.npy"),os.path.join(self.rec_path,"cal_pt_cloud_glint.npy")) except: logger.warning("No pupil-glint-vector calibration data found. Please calibrate first.") try: copy2(os.path.join(self.g_pool.user_dir,"cal_ref_list.npy"),os.path.join(self.rec_path,"cal_ref_list.npy")) except: logger.warning("No calibration reference list found.") try: copy2(os.path.join(self.g_pool.user_dir,"accuracy_test_pt_cloud.npy"),os.path.join(self.rec_path,"accuracy_test_pt_cloud.npy")) copy2(os.path.join(self.g_pool.user_dir,"accuracy_test_ref_list.npy"),os.path.join(self.rec_path,"accuracy_test_ref_list.npy")) except: logger.warning("No accuracy test found.") try: copy2(os.path.join(self.g_pool.user_dir,"accuracy_test_pt_cloud_previous.npy"),os.path.join(self.rec_path,"accuracy_test_pt_cloud_previous.npy")) copy2(os.path.join(self.g_pool.user_dir,"accuracy_test_ref_list_previous.npy"),os.path.join(self.rec_path,"accuracy_test_ref_list_previous.npy")) except: logger.warning("No previous accuracy test results.") camera_calibration = load_camera_calibration(self.g_pool) if camera_calibration is not None: save_object(camera_calibration,os.path.join(self.rec_path, "camera_calibration")) else: logger.info("No camera calibration found.") try: with open(self.meta_info_path, 'a') as csvfile: csv_utils.write_key_value_file(csvfile, { 'Duration Time': self.get_rec_time_str(), 'World Camera Frames': self.frame_count, 'World Camera Resolution': str(self.g_pool.capture.frame_size[0])+"x"+str(self.g_pool.capture.frame_size[1]), 'Capture Software Version': self.g_pool.version, 'System Info': get_system_info() }, append=True) except Exception: logger.exception("Could not save metadata. Please report this bug!") try: with open(os.path.join(self.rec_path, "user_info.csv"), 'w') as csvfile: csv_utils.write_key_value_file(csvfile, self.user_info) except Exception: logger.exception("Could not save userdata. Please report this bug!") self.close_info_menu() if self.audio_writer: self.audio_writer = None self.running = False self.menu.read_only = False self.button.status_text = '' self.timestamps = [] self.data = {'pupil_positions':[],'gaze_positions':[]} self.pupil_pos_list = [] self.gaze_pos_list = [] logger.info("Saved Recording.") self.notify_all( {'subject':'rec_stopped','rec_path':self.rec_path,'network_propagate':True} ) self.notify_all( {'subject':'recording.stopped','rec_path':self.rec_path} ) copyfile(os.path.join(self.g_pool.user_dir,'capture.log'), os.path.join(self.rec_path,"capture.log"))