1919
2020from utils .generic import VideoManager , WebCamManager , GenericManager
2121from utils .configloader import RESOLUTION , FRAMERATE , OUT_DIR , MODEL_NAME , MULTI_CAM , STACK_FRAMES , \
22- ANIMALS_NUMBER , STREAMS , STREAMING_SOURCE , MODEL_ORIGIN
22+ ANIMALS_NUMBER , STREAMS , STREAMING_SOURCE , MODEL_ORIGIN , CROP , CROP_X , CROP_Y
2323from utils .plotter import plot_bodyparts , plot_metadata_frame
2424from utils .poser import load_deeplabcut , load_dpk , load_dlc_live , get_pose , calculate_skeletons ,\
2525 find_local_peaks_new , get_ma_pose
@@ -281,38 +281,42 @@ def get_pose_mp(input_q, output_q):
281281 while True :
282282 if input_q .full ():
283283 index , frame = input_q .get ()
284+ start_time = time .time ()
284285 if MODEL_ORIGIN == 'DLC' :
285286 scmap , locref , pose = get_pose (frame , config , sess , inputs , outputs )
286287 # TODO: Remove alterations to original
287288 peaks = find_local_peaks_new (scmap , locref , ANIMALS_NUMBER , config )
288289 # peaks = pose
289290 if MODEL_ORIGIN == 'MADLC' :
290291 peaks = get_ma_pose (frame , config , sess , inputs , outputs )
291-
292- output_q .put ((index , peaks ))
292+ analysis_time = time . time () - start_time
293+ output_q .put ((index , peaks , analysis_time ))
293294
294295 elif MODEL_ORIGIN == 'DLC-LIVE' :
295296 dlc_live = load_dlc_live ()
296297 while True :
297298 if input_q .full ():
298299 index , frame = input_q .get ()
300+ start_time = time .time ()
299301 if not dlc_live .is_initialized :
300302 peaks = dlc_live .init_inference (frame )
301303 else :
302304 peaks = dlc_live .get_pose (frame )
303-
304- output_q .put ((index , peaks ))
305+ analysis_time = time . time () - start_time
306+ output_q .put ((index , peaks , analysis_time ))
305307
306308 elif MODEL_ORIGIN == 'DEEPPOSEKIT' :
307309 predict_model = load_dpk ()
308310 while True :
309311 if input_q .full ():
310312 index , frame = input_q .get ()
313+ start_time = time .time ()
311314 frame = frame [..., 1 ][..., None ]
312315 st_frame = np .stack ([frame ])
313316 prediction = predict_model .predict (st_frame , batch_size = 1 , verbose = True )
314317 peaks = prediction [0 , :, :2 ]
315- output_q .put ((index , peaks ))
318+ analysis_time = time .time () - start_time
319+ output_q .put ((index ,peaks ,analysis_time ))
316320 else :
317321 raise ValueError (f'Model origin { MODEL_ORIGIN } not available.' )
318322
@@ -360,8 +364,12 @@ def get_frames(self) -> tuple:
360364 c_frames , d_maps , i_frames = self ._camera_manager .get_frames ()
361365 for camera in c_frames :
362366 c_frames [camera ] = np .asanyarray (c_frames [camera ])
367+ if CROP :
368+ c_frames [camera ] = c_frames [camera ][CROP_Y [0 ]:CROP_Y [1 ],CROP_X [0 ]:CROP_X [1 ]].copy ()
369+
363370 for camera in i_frames :
364371 i_frames [camera ] = np .asanyarray (i_frames [camera ])
372+
365373 return c_frames , d_maps , i_frames
366374
367375 def input_frames_for_analysis (self , frames : tuple , index : int ):
@@ -379,9 +387,9 @@ def input_frames_for_analysis(self, frames: tuple, index: int):
379387 frame_time = time .time ()
380388 self ._multiprocessing [camera ]['input' ].put ((index , frame ))
381389 if d_maps :
382- self .store_frames (camera , frame , d_maps [camera ], frame_time )
390+ self .store_frames (camera , frame , d_maps [camera ], frame_time , index )
383391 else :
384- self .store_frames (camera , frame , None , frame_time )
392+ self .store_frames (camera , frame , None , frame_time , index )
385393
386394 def get_analysed_frames (self ) -> tuple :
387395 """
@@ -401,12 +409,11 @@ def get_analysed_frames(self) -> tuple:
401409 self ._start_time = time .time () # getting the first frame here
402410
403411 # Getting the analysed data
404- analysed_index , peaks = self ._multiprocessing [camera ]['output' ].get ()
412+ analysed_index , peaks , analysis_time = self ._multiprocessing [camera ]['output' ].get ()
405413 skeletons = calculate_skeletons (peaks , ANIMALS_NUMBER )
406414 print ('' , end = '\r ' , flush = True ) # this is the line you should not remove
407- analysed_frame , depth_map , input_time = self .get_stored_frames (camera )
408- analysis_time = time .time () - input_time
409-
415+ analysed_frame , depth_map , input_time = self .get_stored_frames (camera , analysed_index )
416+ delay_time = time .time () - input_time
410417 # Calculating FPS and plotting the data on frame
411418 self .calculate_fps (analysis_time if analysis_time != 0 else 0.01 )
412419 frame_time = time .time () - self ._start_time
@@ -430,23 +437,30 @@ def get_analysed_frames(self) -> tuple:
430437 analysed_frames [camera ] = analysed_image
431438 return analysed_frames , analysis_time
432439
433- def store_frames (self , camera : str , c_frame , d_map , frame_time : float ):
440+ def store_frames (self , camera : str , c_frame , d_map , frame_time : float , index : int ):
434441 """
435- Store frames currently sent for analysis
442+ Store frames currently sent for analysis in index based dictionary
436443 :param camera: camera name
437444 :param c_frame: color frame
438445 :param d_map: depth map
439446 :param frame_time: inputting time of frameset
447+ :param index: index of frame that is currently analysed
440448 """
441- self ._stored_frames [camera ] = c_frame , d_map , frame_time
449+ if camera in self ._stored_frames .keys ():
450+ self ._stored_frames [camera ][index ] = c_frame , d_map , frame_time
451+
452+ else :
453+ self ._stored_frames [camera ] = {}
454+ self ._stored_frames [camera ][index ] = c_frame , d_map , frame_time
442455
443- def get_stored_frames (self , camera : str ):
456+ def get_stored_frames (self , camera : str , index : int ):
444457 """
445- Retrieve frames currently sent for analysis
458+ Retrieve frames currently sent for analysis, retrieved frames will be removed (popped) from the dictionary
446459 :param camera: camera name
460+ :param index: index of analysed frame
447461 :return:
448462 """
449- c_frame , d_map , frame_time = self ._stored_frames . get ( camera )
463+ c_frame , d_map , frame_time = self ._stored_frames [ camera ]. pop ( index , None )
450464 return c_frame , d_map , frame_time
451465
452466 def convert_depth_map_to_image (self , d_map ):
0 commit comments