You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					38 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					38 lines
				
				1.2 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								import numpy as np
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from metadrive.component.sensors.rgb_camera import RGBCamera
							 | 
						||
| 
								 | 
							
								from panda3d.core import Texture, GraphicsOutput
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CopyRamRGBCamera(RGBCamera):
							 | 
						||
| 
								 | 
							
								  """Camera which copies its content into RAM during the render process, for faster image grabbing."""
							 | 
						||
| 
								 | 
							
								  def __init__(self, *args, **kwargs):
							 | 
						||
| 
								 | 
							
								    super().__init__(*args, **kwargs)
							 | 
						||
| 
								 | 
							
								    self.cpu_texture = Texture()
							 | 
						||
| 
								 | 
							
								    self.buffer.addRenderTexture(self.cpu_texture, GraphicsOutput.RTMCopyRam)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def get_rgb_array_cpu(self):
							 | 
						||
| 
								 | 
							
								    origin_img = self.cpu_texture
							 | 
						||
| 
								 | 
							
								    img = np.frombuffer(origin_img.getRamImage().getData(), dtype=np.uint8)
							 | 
						||
| 
								 | 
							
								    img = img.reshape((origin_img.getYSize(), origin_img.getXSize(), -1))
							 | 
						||
| 
								 | 
							
								    img = img[:,:,:3] # RGBA to RGB
							 | 
						||
| 
								 | 
							
								    # img = np.swapaxes(img, 1, 0)
							 | 
						||
| 
								 | 
							
								    img = img[::-1] # Flip on vertical axis
							 | 
						||
| 
								 | 
							
								    return img
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class RGBCameraWide(CopyRamRGBCamera):
							 | 
						||
| 
								 | 
							
								  def __init__(self, *args, **kwargs):
							 | 
						||
| 
								 | 
							
								    super().__init__(*args, **kwargs)
							 | 
						||
| 
								 | 
							
								    lens = self.get_lens()
							 | 
						||
| 
								 | 
							
								    lens.setFov(120)
							 | 
						||
| 
								 | 
							
								    lens.setNear(0.1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class RGBCameraRoad(CopyRamRGBCamera):
							 | 
						||
| 
								 | 
							
								  def __init__(self, *args, **kwargs):
							 | 
						||
| 
								 | 
							
								    super().__init__(*args, **kwargs)
							 | 
						||
| 
								 | 
							
								    lens = self.get_lens()
							 | 
						||
| 
								 | 
							
								    lens.setFov(40)
							 | 
						||
| 
								 | 
							
								    lens.setNear(0.1)
							 |