@@ -42,6 +42,34 @@ def create_video_files(directory, devices, resolution, framerate, codec):
4242 return files
4343
4444
45+ def create_row (index , animal_skeletons , experiment_status , experiment_trial , start_time = None ):
46+ """
47+ Create a pd.Series for each frame from each camera with joints position
48+ :param experiment_trial: current trial name
49+ :param experiment_status: current experiment status
50+ :param index: frame index
51+ :param animal_skeletons: skeletons for that frame
52+ :param start_time: (optional) starting time point for Time column
53+ """
54+ row_dict = {}
55+ # creating joints columns
56+ for num , animal in enumerate (animal_skeletons ):
57+ for joint , value in animal .items ():
58+ row_dict [("Animal{}" .format (num + 1 ),
59+ joint , 'x' )], row_dict [("Animal{}" .format (num + 1 ), joint , 'y' )] = value
60+ # optional time column
61+ if start_time is not None :
62+ row_dict [('Time' , '' , '' )] = round (time .time () - start_time , 3 )
63+ # experiment columns
64+ row_dict [('Experiment' , 'Status' , '' )] = experiment_status
65+ if experiment_trial is None and experiment_status :
66+ row_dict [('Experiment' , 'Trial' , '' )] = 'InterTrial'
67+ else :
68+ row_dict [('Experiment' , 'Trial' , '' )] = experiment_trial
69+ row = pd .Series (row_dict , name = index )
70+ return row
71+
72+
4573def show_stream (frames ):
4674 """
4775 Shows some number of stream frames, depending on cameras quantity
@@ -74,7 +102,6 @@ def __init__(self):
74102 """
75103 self ._camera_manager = self .set_camera_manager () # camera manager, used to get frames from the camera
76104 self ._video_codec = cv2 .VideoWriter_fourcc (* 'DIVX' ) # codec in which we output the videofiles
77- self ._animals_list = ["Animal{}" .format (num ) for num in range (1 , ANIMALS_NUMBER + 1 )]
78105 self ._start_time = None # time of initialization
79106 self ._data_row = {camera : {} for camera in self .cameras } # dictionary for creating row of data for each frame
80107 self ._data_output = {} # dictionary for storing rows for dataframes
@@ -107,6 +134,9 @@ def set_camera_manager():
107134 manager_list .append (pylon_manager )
108135
109136 def check_for_cameras (camera_manager ):
137+ """
138+ Helper method to get cameras, connected to that camera manager
139+ """
110140 cameras = camera_manager .get_connected_devices ()
111141 if cameras :
112142 print ("Found {} {} camera(s)!" .format (len (cameras ), camera_manager .get_name ()))
@@ -335,7 +365,7 @@ def get_analysed_frames(self) -> tuple:
335365 # Gathering data as pd.Series for output
336366 if self ._data_output :
337367 self .append_row (camera , analysed_index , skeletons ,
338- self ._experiment_running , self ._experiment .get_trial ())
368+ self ._experiment_running , self ._experiment .get_trial (), self . _start_time )
339369
340370 analysed_frames [camera ] = analysed_image
341371 return analysed_frames , analysis_time
@@ -447,26 +477,17 @@ def create_output(self):
447477 for camera in self .enabled_cameras :
448478 self ._data_output [camera ] = []
449479
450- def append_row (self , camera , index , animal_skeletons , experiment_status , experiment_trial ):
480+ def append_row (self , camera , index , animal_skeletons , experiment_status , experiment_trial , start_time = None ):
451481 """
452482 Create a pd.Series for each frame from each camera with joints position and store it
453483 :param experiment_trial: current trial name
454484 :param experiment_status: current experiment status
455485 :param camera: camera name
456486 :param index: frame index
457487 :param animal_skeletons: skeletons for that frame
488+ :param start_time: (optional) starting time point for Time column
458489 """
459- row_dict = {}
460- for num , animal in enumerate (animal_skeletons ):
461- for joint , value in animal .items ():
462- row_dict [(self ._animals_list [num ], joint , 'x' )], row_dict [(self ._animals_list [num ], joint , 'y' )] = value
463- row_dict [('Time' , '' , '' )] = round (time .time () - self ._start_time , 3 )
464- row_dict [('Experiment' , 'Status' , '' )] = experiment_status
465- if experiment_trial is None and experiment_status :
466- row_dict [('Experiment' , 'Trial' , '' )] = 'InterTrial'
467- else :
468- row_dict [('Experiment' , 'Trial' , '' )] = experiment_trial
469- row = pd .Series (row_dict , name = index )
490+ row = create_row (index , animal_skeletons , experiment_status , experiment_trial , start_time )
470491 self ._data_output [camera ].append (row )
471492
472493 def create_dataframes (self ):
@@ -478,6 +499,7 @@ def create_dataframes(self):
478499 df .index .name = 'Frame'
479500 print ("Saving database for device {}" .format (camera ))
480501 df .to_csv (OUT_DIR + '/DataOutput{}' .format (camera ) + '-' + time .strftime ('%d%m%Y-%H%M%S' ) + '.csv' , sep = ';' )
502+ print ("Database saved" )
481503
482504 ######
483505 # meta
0 commit comments