import  numpy  as  np 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  openpilot . common . transformations . orientation  import  rot_from_euler 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								from  openpilot . common . transformations . camera  import  get_view_frame_from_calib_frame ,  view_frame_from_device_frame ,  _ar_ox_fisheye 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# segnet 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								SEGNET_SIZE  =  ( 512 ,  384 ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# 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 ] ] ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								DM_INPUT_SIZE  =  ( 1440 ,  960 ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								dmonitoringmodel_fl  =  _ar_ox_fisheye . focal_length 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								dmonitoringmodel_intrinsics  =  np . array ( [ 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ dmonitoringmodel_fl ,   0.0 ,  DM_INPUT_SIZE [ 0 ] / 2 ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ 0.0 ,  dmonitoringmodel_fl ,  DM_INPUT_SIZE [ 1 ] / 2  -  ( _ar_ox_fisheye . height  -  DM_INPUT_SIZE [ 1 ] ) / 2 ] , 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ 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 ) ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								calib_from_medmodel  =  np . linalg . inv ( medmodel_frame_from_calib_frame [ : ,  : 3 ] ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								calib_from_sbigmodel  =  np . linalg . inv ( sbigmodel_frame_from_calib_frame [ : ,  : 3 ] ) 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# This function is verified to give similar results to xx.uncommon.utils.transform_img 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  get_warp_matrix ( device_from_calib_euler :  np . ndarray ,  intrinsics :  np . ndarray ,  bigmodel_frame :  bool  =  False )  - >  np . ndarray : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  calib_from_model  =  calib_from_sbigmodel  if  bigmodel_frame  else  calib_from_medmodel 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  device_from_calib  =  rot_from_euler ( device_from_calib_euler ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  camera_from_calib  =  intrinsics  @  view_frame_from_device_frame  @  device_from_calib 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  warp_matrix :  np . ndarray  =  camera_from_calib  @  calib_from_model 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  warp_matrix