fix bug in improved mask #49

Merged
glucauze merged 1 commits from v1.2.2a into main 2023-08-17 12:14:20 +02:00
2 changed files with 26 additions and 13 deletions
@@ -15,7 +15,7 @@ from scripts.faceswaplab_swapping.upcaled_inswapper_options import InswappperOpt
from scripts.faceswaplab_utils.imgutils import cv2_to_pil, pil_to_cv2
from scripts.faceswaplab_utils.sd_utils import get_sd_option
from scripts.faceswaplab_utils.typing import CV2ImgU8, Face
from scripts.faceswaplab_utils.faceswaplab_logging import logger
from scripts.faceswaplab_utils.faceswaplab_logging import logger, save_img_debug
def get_upscaler() -> Optional[UpscalerData]:
@@ -216,18 +216,11 @@ class UpscaledINSwapper(INSwapper):
bgr_fake, inswapper_options=options, k=k
)
if options.improved_mask:
if k == 1:
logger.warning(
"Please note that improved mask does not work well without upscaling. Set upscaling to Lanczos at least if you want speed and want to use improved mask."
)
fake_diff: CV2ImgU8 = None # type: ignore
logger.info("improved_mask")
mask = get_face_mask(aimg, bgr_fake)
bgr_fake = merge_images_with_mask(aimg, bgr_fake, mask)
# compute fake_diff before sharpen and color correction (better result)
fake_diff = compute_diff(bgr_fake, aimg)
if not options.improved_mask:
# If improved mask is not used, we should compute before sharpen and color correction (better diff)
fake_diff = compute_diff(bgr_fake, aimg=aimg)
if options.sharpen:
logger.info("sharpen")
@@ -244,6 +237,24 @@ class UpscaledINSwapper(INSwapper):
)
bgr_fake = pil_to_cv2(bgr_fake_pil)
if options.improved_mask:
if k == 1:
logger.warning(
"Please note that improved mask does not work well without upscaling. Set upscaling to Lanczos at least if you want speed and want to use improved mask."
)
logger.info("improved_mask")
mask = get_face_mask(aimg, bgr_fake)
# save_img_debug(cv2_to_pil(bgr_fake), "Before Mask")
bgr_fake = merge_images_with_mask(aimg, bgr_fake, mask)
# save_img_debug(cv2_to_pil(bgr_fake), "After Mask")
fake_diff = compute_diff(bgr_fake, aimg=aimg)
assert (
fake_diff is not None
), "fake diff is None, this should not happen"
logger.info("*" * 80)
else:
@@ -266,6 +277,7 @@ class UpscaledINSwapper(INSwapper):
(target_img.shape[1], target_img.shape[0]),
borderValue=0.0,
)
fake_diff = cv2.warpAffine(
fake_diff,
IM,
+2 -1
View File
@@ -5,7 +5,6 @@ import cv2
import numpy as np
from math import isqrt, ceil
import torch
from ifnude import detect
from modules import processing
import base64
from collections import Counter
@@ -31,6 +30,8 @@ def check_against_nsfw(img: PILImage) -> bool:
if NSFW_SCORE_THRESHOLD >= 1:
return False
from ifnude import detect
shapes: List[bool] = []
chunks: List[Dict[str, Union[int, float]]] = detect(img)