Esempio n. 1
0
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)
Esempio n. 2
0
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)
    
Esempio n. 3
0
 def _init_dependencies(self):
     self._corner_finder = CornerFinder()
     self._data_extractor = SudocubeDataExtractor()
     self._unwarper = Unwarper()
     self._color_extractor = ColorExtractor()