class SudocubeFactory(object): def __init__(self): self._init_dependencies() def _init_dependencies(self): self._corner_finder = CornerFinder() self._data_extractor = SudocubeDataExtractor() self._unwarper = Unwarper() self._color_extractor = ColorExtractor() def create_sudocube_from_image(self, bgr_img): hsv_img = self._convert_bgr_image_to_hsv(bgr_img) smooth_img = self._smooth_image(hsv_img) smooth_img = cv2.GaussianBlur(smooth_img, (9, 9), 0.5) unwarped_img = self._unwarp_image(smooth_img) sudocube_corners = self._find_corners(unwarped_img) sudocube_data = self._data_extractor.extract_data_from_image_with_corner_info(unwarped_img, sudocube_corners) sudocube = Sudocube(sudocube_data) return sudocube def _unwarp_image(self, img): green_frame = self._find_green_frame_around_sudoku(img) unwarped_img = self._unwarper.unwarp(green_frame, img) return unwarped_img def _find_corners(self, img): sudocube_frame = self._find_sudocube_frame(img) sudocube_corners = self._corner_finder.find_corners(sudocube_frame) return sudocube_corners def _convert_bgr_image_to_hsv(self, bgr_img): return cv2.cvtColor(bgr_img, cv2.COLOR_RGB2HSV) def _smooth_image(self, img): return cv2.GaussianBlur(img, (5, 5), 0.50) def _find_sudocube_frame(self, img): return self._color_extractor.extract_blue(img) def _find_green_frame_around_sudoku(self, img): return self._color_extractor.extract_green(img)
model = get_model_instance_segmentation(chanel_data.number_of_classes()) print("loading model", cnf.model_name ) model.load_state_dict(torch.load(cnf.path2model+cnf.model_name, map_location=device )) model.to(device) model.eval() cnf.num_tsts= 1000 # inf for i, item in enumerate(chanel_data): if i >= cnf.num_tsts: break image = item[0] masks, labels = instance_segmentation_api(model, image, device, chanel_data.class_names, threshold=0.7, rect_th=1, text_size=1, text_th=3) masked_img = [] for jj in range(len(labels)): masks[jj] = masks[jj].astype(dtype='uint') # zz[masks[jj]] = jj+1; # Image.fromarray(zz*255/(jj+1)).show() img = ImageChops.multiply(image, Image.fromarray(255*masks[jj]).convert('RGB') ); # img.show() masked_img.append(np.array(img, dtype='uint8')) one_person_clothing_colors = ColorExtractor(masks, labels, masked_img, cnf, image_name=item[1][-10:-1]) one_person_clothing_colors.pie_chart(image, fname=item[1][-10:-1], figure_size=(4, 4)) # color_table_obj = ColorTable(dataset.class_names, cnf)
def _init_dependencies(self): self._corner_finder = CornerFinder() self._data_extractor = SudocubeDataExtractor() self._unwarper = Unwarper() self._color_extractor = ColorExtractor()