import  numpy  as  np 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  common . transformations . camera  import  ( FULL_FRAME_SIZE , 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								                                           get_view_frame_from_calib_frame ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# segnet 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SEGNET_SIZE  =  ( 512 ,  384 ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  get_segnet_frame_from_camera_frame ( segnet_size = SEGNET_SIZE ,  full_frame_size = FULL_FRAME_SIZE ) : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  np . array ( [ [ float ( segnet_size [ 0 ] )  /  full_frame_size [ 0 ] ,   0.0 ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   [ 0.0 ,   float ( segnet_size [ 1 ] )  /  full_frame_size [ 1 ] ] ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								segnet_frame_from_camera_frame  =  get_segnet_frame_from_camera_frame ( )  # xx 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# MED model 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								MEDMODEL_INPUT_SIZE  =  ( 512 ,  256 ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								MEDMODEL_YUV_SIZE  =  ( MEDMODEL_INPUT_SIZE [ 0 ] ,  MEDMODEL_INPUT_SIZE [ 1 ]  *  3  / /  2 ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								MEDMODEL_CY  =  47.6 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								medmodel_fl  =  910.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								medmodel_intrinsics  =  np . array ( [ 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ medmodel_fl ,   0.0 ,   0.5  *  MEDMODEL_INPUT_SIZE [ 0 ] ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ 0.0 ,   medmodel_fl ,                    MEDMODEL_CY ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ 0.0 ,   0.0 ,                                    1.0 ] ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# BIG model 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								BIGMODEL_INPUT_SIZE  =  ( 1024 ,  512 ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								BIGMODEL_YUV_SIZE  =  ( BIGMODEL_INPUT_SIZE [ 0 ] ,  BIGMODEL_INPUT_SIZE [ 1 ]  *  3  / /  2 ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								bigmodel_fl  =  910.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bigmodel_intrinsics  =  np . array ( [ 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ bigmodel_fl ,   0.0 ,   0.5  *  BIGMODEL_INPUT_SIZE [ 0 ] ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ 0.0 ,   bigmodel_fl ,              256  +  MEDMODEL_CY ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ 0.0 ,   0.0 ,                                    1.0 ] ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# SBIG model (big model with the size of small model) 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								SBIGMODEL_INPUT_SIZE  =  ( 512 ,  256 ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SBIGMODEL_YUV_SIZE  =  ( SBIGMODEL_INPUT_SIZE [ 0 ] ,  SBIGMODEL_INPUT_SIZE [ 1 ]  *  3  / /  2 ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								sbigmodel_fl  =  455.0 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								sbigmodel_intrinsics  =  np . array ( [ 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ sbigmodel_fl ,   0.0 ,   0.5  *  SBIGMODEL_INPUT_SIZE [ 0 ] ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ 0.0 ,   sbigmodel_fl ,       0.5  *  ( 256  +  MEDMODEL_CY ) ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ 0.0 ,   0.0 ,                                      1.0 ] ] ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								bigmodel_frame_from_calib_frame  =  np . dot ( bigmodel_intrinsics , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get_view_frame_from_calib_frame ( 0 ,  0 ,  0 ,  0 ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								sbigmodel_frame_from_calib_frame  =  np . dot ( sbigmodel_intrinsics , 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get_view_frame_from_calib_frame ( 0 ,  0 ,  0 ,  0 ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								medmodel_frame_from_calib_frame  =  np . dot ( medmodel_intrinsics , 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  get_view_frame_from_calib_frame ( 0 ,  0 ,  0 ,  0 ) ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								medmodel_frame_from_bigmodel_frame  =  np . dot ( medmodel_intrinsics ,  np . linalg . inv ( bigmodel_intrinsics ) ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								### This function mimics the update_calibration logic in modeld.cc 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Manually verified to give similar results to xx.uncommon.utils.transform_img 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  get_warp_matrix ( rpy_calib ,  wide_cam = False ,  big_model = False ,  tici = True ) : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  from  common . transformations . orientation  import  rot_from_euler 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  from  common . transformations . camera  import  view_frame_from_device_frame ,  eon_fcam_intrinsics ,  tici_ecam_intrinsics ,  tici_fcam_intrinsics 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  tici  and  wide_cam : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    intrinsics  =  tici_ecam_intrinsics 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  elif  tici : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    intrinsics  =  tici_fcam_intrinsics 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  else : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    intrinsics  =  eon_fcam_intrinsics 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  big_model : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sbigmodel_from_calib  =  sbigmodel_frame_from_calib_frame [ : ,  ( 0 , 1 , 2 ) ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    calib_from_model  =  np . linalg . inv ( sbigmodel_from_calib ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  else : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    medmodel_from_calib  =  medmodel_frame_from_calib_frame [ : ,  ( 0 , 1 , 2 ) ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    calib_from_model  =  np . linalg . inv ( medmodel_from_calib ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  device_from_calib  =  rot_from_euler ( rpy_calib ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  camera_from_calib  =  intrinsics . dot ( view_frame_from_device_frame . dot ( device_from_calib ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  warp_matrix  =  camera_from_calib . dot ( calib_from_model ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  warp_matrix 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								### This is old, just for debugging 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  get_warp_matrix_old ( rpy_calib ,  wide_cam = False ,  big_model = False ,  tici = True ) : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  from  common . transformations . orientation  import  rot_from_euler 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  from  common . transformations . camera  import  view_frame_from_device_frame ,  eon_fcam_intrinsics ,  tici_ecam_intrinsics ,  tici_fcam_intrinsics 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  get_view_frame_from_road_frame ( roll ,  pitch ,  yaw ,  height ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    device_from_road  =  rot_from_euler ( [ roll ,  pitch ,  yaw ] ) . dot ( np . diag ( [ 1 ,  - 1 ,  - 1 ] ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    view_from_road  =  view_frame_from_device_frame . dot ( device_from_road ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  np . hstack ( ( view_from_road ,  [ [ 0 ] ,  [ height ] ,  [ 0 ] ] ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  tici  and  wide_cam : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    intrinsics  =  tici_ecam_intrinsics 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  elif  tici : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    intrinsics  =  tici_fcam_intrinsics 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  else : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    intrinsics  =  eon_fcam_intrinsics 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  model_height  =  1.22 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  big_model : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    model_from_road  =  np . dot ( sbigmodel_intrinsics , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             get_view_frame_from_road_frame ( 0 ,  0 ,  0 ,  model_height ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  else : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    model_from_road  =  np . dot ( medmodel_intrinsics , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             get_view_frame_from_road_frame ( 0 ,  0 ,  0 ,  model_height ) ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ground_from_model  =  np . linalg . inv ( model_from_road [ : ,  ( 0 ,  1 ,  3 ) ] ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  E  =  get_view_frame_from_road_frame ( * rpy_calib ,  1.22 ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  camera_frame_from_road_frame  =  intrinsics . dot ( E ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  camera_frame_from_ground  =  camera_frame_from_road_frame [ : , ( 0 , 1 , 3 ) ] 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  warp_matrix  =  camera_frame_from_ground  . dot ( ground_from_model ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  warp_matrix