Beispiel #1
0
class CameraPlacement(object):
    def __init__(self,
                 id,
                 position,
                 pitch_deg,
                 yaw_deg,
                 model,
                 resolution,
                 fov,
                 positional_error_stddev=0.03 / 2.0,
                 orientation_error_stddev=0.5 / 2.0):
        self.id = id
        # this will encompass two Cameras
        # one true positioned
        # one with error

        offset_xyz = np.random.normal(loc=0.0,
                                      scale=positional_error_stddev,
                                      size=3)
        offset_rp = np.random.normal(loc=0.0,
                                     scale=orientation_error_stddev,
                                     size=2)

        # represents camera with errors
        self.real_camera = Camera(position=position + offset_xyz,
                                  orientation_pitch_deg=pitch_deg +
                                  offset_rp[0],
                                  orientation_yaw_deg=yaw_deg + offset_rp[1],
                                  verbose=False,
                                  model=model)
        # perfectly positioned camera
        self.ideal_camera = Camera(position, pitch_deg, yaw_deg, model=model)

        self.real_camera.set_resolution(*resolution)
        self.real_camera.set_fov(*fov)

        self.ideal_camera.set_resolution(*resolution)
        self.ideal_camera.set_fov(*fov)

    def get_catchment_corners(self):
        corners = np.array(self.real_camera.get_corners())
        corners[:, 2] = 0
        return corners

    def get_camera_height(self):
        return self.ideal_camera.position[2]

    def get_id(self):
        return self.id