From c83113ddc4e63c7867255131f7638732daa3da33 Mon Sep 17 00:00:00 2001 From: Jan Date: Sat, 27 Nov 2021 18:51:13 +0100 Subject: [PATCH] bugfixing and added debug preview on key bind 7 --- core/imagelib/blursharpen.py | 2 ++ merger/InteractiveMergerSubprocessor.py | 1 + merger/MergeMasked.py | 21 ++++++++++++++++++--- merger/MergerConfig.py | 11 +++++++++-- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/core/imagelib/blursharpen.py b/core/imagelib/blursharpen.py index d043b2d..1b5ba38 100644 --- a/core/imagelib/blursharpen.py +++ b/core/imagelib/blursharpen.py @@ -22,6 +22,8 @@ def blursharpen (img, sharpen_mode=0, kernel_size=3, amount=100): blur = cv2.GaussianBlur(img, (kernel_size, kernel_size) , 0) img = cv2.addWeighted(img, 1.0 + (0.5 * amount), blur, -(0.5 * amount), 0) return img + elif sharpen_mode == 3: #unsharpen_mask + img = unsharpen_mask(img, amount=amount) elif amount < 0: n = -amount while n > 0: diff --git a/merger/InteractiveMergerSubprocessor.py b/merger/InteractiveMergerSubprocessor.py index b9cb903..5c0e49f 100644 --- a/merger/InteractiveMergerSubprocessor.py +++ b/merger/InteractiveMergerSubprocessor.py @@ -336,6 +336,7 @@ class InteractiveMergerSubprocessor(Subprocessor): '(' : lambda cfg,shift_pressed: cfg.add_morph_power(1), '*' : lambda cfg,shift_pressed: cfg.add_morph_power(-1), 'b' : lambda cfg,shift_pressed: cfg.toggle_two_pass(), + '7' : lambda cfg,shift_pressed: cfg.toggle_debug_mode(), } self.masked_keys = list(self.masked_keys_funcs.keys()) diff --git a/merger/MergeMasked.py b/merger/MergeMasked.py index 9522d23..70f73f3 100644 --- a/merger/MergeMasked.py +++ b/merger/MergeMasked.py @@ -16,7 +16,7 @@ def MergeMaskedFace (predictor_func, predictor_input_shape, face_enhancer_func, xseg_256_extract_func, cfg, frame_info, img_bgr_uint8, img_bgr, img_face_landmarks, dfl_img): - + img_size = img_bgr.shape[1], img_bgr.shape[0] img_face_mask_a = LandmarksProcessor.get_image_hull_mask (img_bgr.shape, img_face_landmarks) @@ -61,12 +61,13 @@ def MergeMaskedFace (predictor_func, predictor_input_shape, dst_face_mask_a_0 = cv2.warpAffine( img_face_mask_a, face_mat, (output_size, output_size), flags=cv2.INTER_CUBIC ) dst_face_mask_a_0 = np.clip(dst_face_mask_a_0, 0, 1) + if cfg.pre_sharpen_mode > 0 and cfg.pre_sharpen_power != 0: if cfg.pre_sharpen_mode==1: dst_face_bgr = imagelib.gaussian_sharpen(dst_face_bgr, amount=cfg.pre_sharpen_power) elif cfg.pre_sharpen_mode==2: dst_face_bgr = imagelib.unsharpen_mask(dst_face_bgr, amount=cfg.pre_sharpen_power) - + dst_face_bgr = np.clip(dst_face_bgr, 0, 1, out=dst_face_bgr) predictor_input_bgr = cv2.resize (dst_face_bgr, (input_size,input_size) ) @@ -79,11 +80,16 @@ def MergeMaskedFace (predictor_func, predictor_input_shape, prd_face_mask_a_0 = np.clip (predicted[1], 0, 1.0) prd_face_dst_mask_a_0 = np.clip (predicted[2], 0, 1.0) + + if cfg.two_pass: - predicted_2 = predictor_func (prd_face_bgr, func_morph_factor = 1.0) if cfg.is_morphable else predictor_func (prd_face_bgr) + predicted_2 = predictor_func (prd_face_bgr, func_morph_factor = 1) if cfg.is_morphable else predictor_func (prd_face_bgr) prd_face_bgr = np.clip (predicted_2[0], 0, 1.0) prd_face_mask_a_0 = np.clip (predicted_2[1], 0, 1.0) prd_face_dst_mask_a_0 = np.clip (predicted_2[2], 0, 1.0) + + if cfg.debug_mode: + prd_face_bgr_unchanged = prd_face_bgr.copy() if cfg.super_resolution_power != 0: prd_face_bgr_enhanced = face_enhancer_func(prd_face_bgr, is_tanh=True, preserve_size=False) @@ -350,6 +356,15 @@ def MergeMaskedFace (predictor_func, predictor_input_shape, if out_img is None: out_img = img_bgr.copy() + + if 'raw' not in cfg.mode and cfg.debug_mode: + ph, pw = predictor_input_bgr.shape[:2] + oh, ow = out_img.shape[:2] + out_img[oh-ph:,ow-pw:] = predictor_input_bgr + ph, pw = prd_face_bgr_unchanged.shape[:2] + out_img[oh-ph:,0:pw] = prd_face_bgr_unchanged + + return out_img, out_merging_mask_a diff --git a/merger/MergerConfig.py b/merger/MergerConfig.py index 1f0e871..a53ad87 100644 --- a/merger/MergerConfig.py +++ b/merger/MergerConfig.py @@ -21,7 +21,7 @@ class MergerConfig(object): ): self.type = type - self.sharpen_dict = {0:"None", 1:'box', 2:'gaussian'} + self.sharpen_dict = {0:"None", 1:'box', 2:'gaussian', 3:'unsharpen'} #default changeable params self.sharpen_mode = sharpen_mode @@ -122,6 +122,7 @@ class MergerConfigMasked(MergerConfig): two_pass = False, morph_power = 100, is_morphable = False, + debug_mode = False, **kwargs ): @@ -155,6 +156,7 @@ class MergerConfigMasked(MergerConfig): self.pre_sharpen_mode = pre_sharpen_mode self.morph_power = morph_power self.is_morphable = is_morphable + self.debug_mode = debug_mode def copy(self): return copy.copy(self) @@ -169,6 +171,9 @@ class MergerConfigMasked(MergerConfig): def toggle_two_pass(self): self.two_pass = not self.two_pass + def toggle_debug_mode(self): + self.debug_mode = not self.debug_mode + def toggle_sharpen_mode_multi(self, pre_sharpen=False): if pre_sharpen: @@ -296,7 +301,8 @@ class MergerConfigMasked(MergerConfig): self.pre_sharpen_mode == other.pre_sharpen_mode and \ self.two_pass == other.two_pass and \ self.morph_power == other.morph_power and \ - self.is_morphable == other.is_morphable + self.is_morphable == other.is_morphable and \ + self.debug_mode == other.debug_mode return False @@ -337,6 +343,7 @@ class MergerConfigMasked(MergerConfig): r += f"""two_pass: {self.two_pass}\n""" r += f"""morph_power: {self.morph_power}\n""" #r += f"""is_morphable: {self.is_morphable}\n""" + r += f"""debug_mode: {self.debug_mode}\n""" r += "================"