Пример #1
0
 def restore_prev_image(self):
     if state.now_image() is None: return None
     # TODO: It's definitely not gui functionality. 
     #       but.. where to place this function? tool.py?
     import shutil
     shutil.copy(
         state.prev_image(), state.now_image()
     )
     self.update_gui()
Пример #2
0
    def rm_txt(self):
        imgpath  = state.now_image()
        maskpath = state.now_mask()
        if imgpath is None: return None

        self.saveMask.emit(maskpath) # save edited mask
        image = io.load(imgpath, io.IMAGE)
        mask  =(io.load(maskpath, io.MASK) 
                if Path(maskpath).exists()
                else io.mask2segmap(self.gen_mask()))
        inpainted = core.inpainted(image, mask)

        io.save(state.now_image(), inpainted) 
        self.update_gui()
Пример #3
0
    def rm_txt_all(self): 
        ''' 
        Remove text of all image.
        NOTE: If image has previously saved masks, then use it.
        '''
        if state.now_image() is None: return None

        self.saveMask.emit(state.now_mask()) # save current edited mask
        no_mask_path_pairs = fp.lremove(
            lambda pair: Path(pair.mask).exists(),
            state.img_mask_pairs()
        )
        new_masks = fp.map(
            lambda p: imgpath2mask(p.img),
            no_mask_path_pairs
        )
        for mask,pair in tqdm(zip(new_masks, no_mask_path_pairs),
                              total=len(no_mask_path_pairs),
                              desc='Generate Masks'):
            io.save(pair.mask, mask)

        img_paths,mask_paths = state.project()
        images= fp.map(lambda p: io.load(p, io.IMAGE), img_paths)
        masks = fp.map(lambda p: io.load(p, io.MASK), mask_paths)
        inpainteds = fp.map(core.inpainted, images,masks)

        for ipath,inpainted in tqdm(zip(img_paths, inpainteds),
                                    total=len(img_paths),
                                    desc='  Remove Texts'):
            io.save(ipath, inpainted) 
        self.update_gui()
Пример #4
0
def test_restore_prev_image_copy_img_from_prev_images_to_images(clear_state, tmpdir_factory):
    # Create fixture
    tmp_proj = tmpdir_factory.mktemp('tmp_proj')
    shutil.rmtree(tmp_proj) # dst dir must not exist for copytree
    shutil.copytree('./fixture/real_proj/', tmp_proj)

    open_project(tmp_proj)

    main_window.rm_txt_all()
    prev_img  = io.load(state.prev_image(),io.IMAGE)
    processed = io.load(state.now_image(), io.IMAGE)
    assert np.any(np.not_equal( processed, prev_img ))

    main_window.restore_prev_image()
    restored = io.load(state.now_image(), io.IMAGE)
    assert np.array_equal( restored, prev_img )
Пример #5
0
    def gen_mask(self): 
        imgpath = state.now_image()
        if imgpath is None: return None

        mask = imgpath2mask(imgpath)
        io.save(state.now_mask(), mask)
        self.update_gui()

        return mask
Пример #6
0
    def gen_mask_all(self):
        imgpath = state.now_image()
        if imgpath is None: return None

        mask = fp.go(imgpath, lambda path: io.load(path, io.NDARR),
                     core.segmap, io.segmap2mask)
        io.save(state.now_mask(), mask)
        self.update_gui()

        return mask
Пример #7
0
    def gen_mask_all(self): 
        ''' 
        Generate NEW mask of all image.
        NOTE: All previously saved masks will be overwritten.
        '''
        if state.now_image() is None: return None

        masks = fp.map(imgpath2mask, state.img_paths)

        for path,mask in tqdm(zip(state.mask_paths, masks),
                              total=len(state.img_paths),
                              desc='Generate Masks'):
            io.save(path, mask)
        self.update_gui()

        return masks
Пример #8
0
 def update_gui(self):
     now_imgpath = state.now_image()
     if now_imgpath:
         self.updateImage.emit(now_imgpath)
         self.provideMask.emit(state.now_mask())
         self.im_model.update()