Skip to content

Commit

Permalink
Merge pull request #444 from pupil-labs/rename_base_key
Browse files Browse the repository at this point in the history
Rename base key
  • Loading branch information
mkassner authored Jul 21, 2016
2 parents e67498d + ef72f7b commit a4230c6
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 24 deletions.
39 changes: 33 additions & 6 deletions pupil_src/player/player_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,6 @@ def update_recording_to_recent(rec_dir):
update_recording_v04_to_v074(rec_dir)
elif rec_version >= VersionFormat('0.3'):
update_recording_v03_to_v074(rec_dir)
ts_path = os.path.join(rec_dir,"world_timestamps.npy")
ts_path_old = os.path.join(rec_dir,"timestamps.npy")
if not os.path.isfile(ts_path) and os.path.isfile(ts_path_old):
os.rename(ts_path_old, ts_path)

else:
logger.Error("This recording is too old. Sorry.")
return
Expand All @@ -85,6 +80,8 @@ def update_recording_to_recent(rec_dir):
# Incremental format updates
if rec_version < VersionFormat('0.8.2'):
update_recording_v074_to_v082(rec_dir)
if rec_version < VersionFormat('0.8.3'):
update_recording_v082_to_v083(rec_dir)
# How to extend:
# if rec_version < VersionFormat('FUTURE FORMAT'):
# update_recording_v081_to_FUTURE(rec_dir)
Expand Down Expand Up @@ -126,7 +123,32 @@ def update_meta_info(rec_dir, meta_info):
csv_utils.write_key_value_file(csvfile,meta_info)

def update_recording_v074_to_v082(rec_dir):
pass
meta_info_path = os.path.join(rec_dir,"info.csv")
with open(meta_info_path) as csvfile:
meta_info = csv_utils.read_key_value_file(csvfile)
meta_info['Capture Software Version'] = 'v0.8.2'
with open(meta_info_path,'w') as csvfile:
csv_utils.write_key_value_file(csvfile,meta_info)

def update_recording_v082_to_v083(rec_dir):
logger.info("Updating recording from v0.8.2 format to v0.8.3 format")
pupil_data = load_object(os.path.join(rec_dir, "pupil_data"))
meta_info_path = os.path.join(rec_dir,"info.csv")


for d in pupil_data['gaze_positions']:
if 'base' in d:
d['base_data'] = d.pop('base')

save_object(pupil_data,os.path.join(rec_dir, "pupil_data"))

with open(meta_info_path) as csvfile:
meta_info = csv_utils.read_key_value_file(csvfile)
meta_info['Capture Software Version'] = 'v0.8.3'

with open(meta_info_path,'w') as csvfile:
csv_utils.write_key_value_file(csvfile,meta_info)


def update_recording_v073_to_v074(rec_dir):
logger.info("Updating recording from v0.7x format to v0.7.4 format")
Expand Down Expand Up @@ -203,6 +225,11 @@ def update_recording_v03_to_v074(rec_dir):
except IOError:
pass

ts_path = os.path.join(rec_dir,"world_timestamps.npy")
ts_path_old = os.path.join(rec_dir,"timestamps.npy")
if not os.path.isfile(ts_path) and os.path.isfile(ts_path_old):
os.rename(ts_path_old, ts_path)

def is_pupil_rec_dir(rec_dir):
if not os.path.isdir(rec_dir):
logger.error("No valid dir supplied")
Expand Down
6 changes: 3 additions & 3 deletions pupil_src/player/raw_data_exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class Raw_Data_Exporter(Plugin):
confidence - computed confidence between 0 (not confident) -1 (confident)
norm_pos_x - x position in the world image frame in normalized coordinates
norm_pos_y - y position in the world image frame in normalized coordinates
base - "timestamp-id timestamp-id ..." of pupil data that this gaze position is computed from
base_data - "timestamp-id timestamp-id ..." of pupil data that this gaze position is computed from
#data made available by the 3d vector gaze mappers
gaze_point_3d_x - x position of the 3d gaze point (the point the sublejct lookes at) in the world camera coordinate system
Expand Down Expand Up @@ -218,7 +218,7 @@ def export_data(self,export_range,export_dir):
"confidence",
"norm_pos_x",
"norm_pos_y",
"base",
"base_data",
"gaze_point_3d_x",
"gaze_point_3d_y",
"gaze_point_3d_z",
Expand All @@ -237,7 +237,7 @@ def export_data(self,export_range,export_dir):
) )

for g in list(chain(*self.g_pool.gaze_positions_by_frame[export_range])):
data = ['%s'%g["timestamp"],g["index"],g["confidence"],g["norm_pos"][0],g["norm_pos"][1]," ".join(['%s-%s'%(b['timestamp'],b['id']) for b in g['base']]) ] #use str on timestamp to be consitant with csv lib.
data = ['%s'%g["timestamp"],g["index"],g["confidence"],g["norm_pos"][0],g["norm_pos"][1]," ".join(['%s-%s'%(b['timestamp'],b['id']) for b in g['base_data']]) ] #use str on timestamp to be consitant with csv lib.

#add 3d data if avaiblable
if g.get('gaze_point_3d',None) is not None:
Expand Down
16 changes: 8 additions & 8 deletions pupil_src/shared_modules/calibration_routines/gaze_mappers.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ def __init__(self, g_pool):
super(Dummy_Gaze_Mapper, self).__init__(g_pool)

def _map_monocular(self,p):
return {'norm_pos':p['norm_pos'],'confidence':p['confidence'],'timestamp':p['timestamp'],'base':[p]}
return {'norm_pos':p['norm_pos'],'confidence':p['confidence'],'timestamp':p['timestamp'],'base_data':[p]}

def get_init_dict(self):
return {}
Expand All @@ -119,7 +119,7 @@ def __init__(self, g_pool,params):

def _map_monocular(self,p):
gaze_point = self.map_fn(p['norm_pos'])
return {'norm_pos':gaze_point,'confidence':p['confidence'],'timestamp':p['timestamp'],'base':[p]}
return {'norm_pos':gaze_point,'confidence':p['confidence'],'timestamp':p['timestamp'],'base_data':[p]}


def get_init_dict(self):
Expand All @@ -136,7 +136,7 @@ def __init__(self, g_pool,params0,params1):

def _map_monocular(self,p):
gaze_point = self.map_fns[p['id']](p['norm_pos'])
return {'norm_pos':gaze_point,'confidence':p['confidence'],'id':p['id'],'timestamp':p['timestamp'],'base':[p]}
return {'norm_pos':gaze_point,'confidence':p['confidence'],'id':p['id'],'timestamp':p['timestamp'],'base_data':[p]}

def get_init_dict(self):
return {'params0':self.params0,'params1':self.params1}
Expand Down Expand Up @@ -170,11 +170,11 @@ def _map_binocular(self, p0, p1):
gaze_point = (gaze_point_eye0[0] + gaze_point_eye1[0])/2. , (gaze_point_eye0[1] + gaze_point_eye1[1])/2.
confidence = (p0['confidence'] + p1['confidence'])/2.
ts = (p0['timestamp'] + p1['timestamp'])/2.
return {'norm_pos':gaze_point,'confidence':confidence,'timestamp':ts,'base':[p0, p1]}
return {'norm_pos':gaze_point,'confidence':confidence,'timestamp':ts,'base_data':[p0, p1]}

def _map_monocular(self,p):
gaze_point = self.map_fn_fallback[p['id']](p['norm_pos'])
return {'norm_pos':gaze_point,'confidence':p['confidence'],'timestamp':p['timestamp'],'base':[p]}
return {'norm_pos':gaze_point,'confidence':p['confidence'],'timestamp':p['timestamp'],'base_data':[p]}

def deinit_gui(self):
if self.menu:
Expand Down Expand Up @@ -252,7 +252,7 @@ def _map_monocular(self,p):
'gaze_point_3d':gaze_3d.tolist(),
'confidence':p['confidence'],
'timestamp':p['timestamp'],
'base':[p]}
'base_data':[p]}

if self.visualizer.window:
self.gaze_pts_debug.append( gaze_3d )
Expand Down Expand Up @@ -367,7 +367,7 @@ def _map_monocular(self,p):
'gaze_point_3d':gaze_3d.tolist(),
'confidence':p['confidence'],
'timestamp':p['timestamp'],
'base':[p]}
'base_data':[p]}


if self.visualizer.window:
Expand Down Expand Up @@ -432,7 +432,7 @@ def _map_binocular(self, p0, p1):
'gaze_point_3d':nearest_intersection_point.tolist(),
'confidence':confidence,
'timestamp':ts,
'base':[p0,p1]}
'base_data':[p0,p1]}
return g

def gl_display(self):
Expand Down
4 changes: 2 additions & 2 deletions pupil_src/shared_modules/fixation_detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,10 @@ def dist_deg(p1,p2):
confidence = sum(g['confidence'] for g in fixation_support)/len(fixation_support)

# avg pupil size = mean of (mean of pupil size per gaze ) for all gaze points of support
avg_pupil_size = sum([sum([p['diameter'] for p in g['base']])/len(g['base']) for g in fixation_support])/len(fixation_support)
avg_pupil_size = sum([sum([p['diameter'] for p in g['base_data']])/len(g['base_data']) for g in fixation_support])/len(fixation_support)
new_fixation = {'id': len(fixations),
'norm_pos':fixation_centroid,
'gaze':fixation_support,
'base_data':fixation_support,
'duration':duration,
'dispersion':dispersion,
'start_frame_index':fixation_support[0]['index'],
Expand Down
2 changes: 1 addition & 1 deletion pupil_src/shared_modules/offline_reference_surface.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ def _on_srf_by_frame_idx(self,frame_idx,m_from_screen,data_by_frame):
mapped_pos = cv2.perspectiveTransform(pos , m_from_screen )
mapped_pos.shape = (2)
on_srf = bool((0 <= mapped_pos[0] <= 1) and (0 <= mapped_pos[1] <= 1))
data_on_srf.append( {'norm_pos':(mapped_pos[0],mapped_pos[1]),'on_srf':on_srf,'base':d } )
data_on_srf.append( {'norm_pos':(mapped_pos[0],mapped_pos[1]),'on_srf':on_srf,'base_data':d } )
return data_on_srf


Expand Down
8 changes: 4 additions & 4 deletions pupil_src/shared_modules/offline_surface_tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ def save_surface_statsics_to_file(self,export_range,export_dir):

for s in self.surfaces:
gaze_on_srf = s.gaze_on_srf_in_section(section)
gaze_on_srf = set([gp['base']['timestamp'] for gp in gaze_on_srf])
gaze_on_srf = set([gp['base_data']['timestamp'] for gp in gaze_on_srf])
not_on_any_srf -= gaze_on_srf
csv_writer.writerow( (s.name, len(gaze_on_srf)) )

Expand Down Expand Up @@ -483,7 +483,7 @@ def save_surface_statsics_to_file(self,export_range,export_dir):
if in_mark <= idx <= out_mark:
if ref_srf_data is not None and ref_srf_data is not False:
for gp in s.gaze_on_srf_by_frame_idx(idx,ref_srf_data['m_from_screen']):
csv_writer.writerow( (ts,idx,gp['base']['timestamp'],gp['norm_pos'][0],gp['norm_pos'][1],gp['norm_pos'][0]*s.real_world_size['x'],gp['norm_pos'][1]*s.real_world_size['y'],gp['on_srf']) )
csv_writer.writerow( (ts,idx,gp['base_data']['timestamp'],gp['norm_pos'][0],gp['norm_pos'][1],gp['norm_pos'][0]*s.real_world_size['x'],gp['norm_pos'][1]*s.real_world_size['y'],gp['on_srf']) )


# save fixation on srf as csv.
Expand All @@ -497,9 +497,9 @@ def save_surface_statsics_to_file(self,export_range,export_dir):
for f in s.fixations_on_srf_by_frame_idx(idx,ref_srf_data['m_from_screen']):
fixations_on_surface.append(f)

removed_dublicates = dict([(f['base']['id'],f) for f in fixations_on_surface]).values()
removed_dublicates = dict([(f['base_data']['id'],f) for f in fixations_on_surface]).values()
for f_on_s in removed_dublicates:
f = f_on_s['base']
f = f_on_s['base_data']
f_x,f_y = f_on_s['norm_pos']
f_on_srf = f_on_s['on_srf']
csv_writer.writerow( (f['id'],f['timestamp'],f['duration'],f['start_frame_index'],f['end_frame_index'],f_x,f_y,f_x*s.real_world_size['x'],f_y*s.real_world_size['y'],f_on_srf) )
Expand Down

0 comments on commit a4230c6

Please sign in to comment.