def load_homography(self, storage=None, perspective=None, image=None, file=None): """ Args: storage (tuple): ((x, y), [upper-left, upper-right, bottom-left, bottom-right]) perspective (Perspective): image (np.ndarray): file (str): File path of image """ if storage is not None: self.find_homography(*storage) elif perspective is not None: hori = perspective.horizontal[0].add(perspective.horizontal[-1]) vert = perspective.vertical[0].add(perspective.vertical[-1]) src_pts = hori.cross(vert).points x = len(perspective.vertical) - 1 y = len(perspective.horizontal) - 1 self.find_homography(size=(x, y), src_pts=src_pts) elif image is not None: perspective_ = Perspective(self.config) perspective_.load(image) self.load_homography(perspective=perspective_) elif file is not None: image_ = np.array(Image.open(file).convert('RGB')) perspective_ = Perspective(self.config) perspective_.load(image_) self.load_homography(perspective=perspective_) else: raise MapDetectionError( 'No data feed to load_homography, please input at least one.')
class MapDetector: """ Map detector wrapper """ image: np.ndarray config: AzurLaneConfig left_edge: bool right_edge: bool lower_edge: bool upper_edge: bool generate: callable def __init__(self, config): """ Args: config (AzurLaneConfig): """ self.config = config self.backend = None self.detector_set_backend() def detector_set_backend(self, name=''): """ Args: name (str): 'homography' or 'perspective' """ if not name: name = self.config.DETECTION_BACKEND if name == 'homography': self.backend = Homography(config=self.config) else: self.backend = Perspective(config=self.config) def load(self, image): """ Args: image: Shape (720, 1280, 3) """ self.backend.load(image) self.left_edge = bool(self.backend.left_edge) self.right_edge = bool(self.backend.right_edge) self.lower_edge = bool(self.backend.lower_edge) self.upper_edge = bool(self.backend.upper_edge) self.generate = self.backend.generate