fix bug in improved mask

main
Tran Xen 2 years ago
parent 612cc43752
commit 04a0a5c46c

@ -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.imgutils import cv2_to_pil, pil_to_cv2
from scripts.faceswaplab_utils.sd_utils import get_sd_option from scripts.faceswaplab_utils.sd_utils import get_sd_option
from scripts.faceswaplab_utils.typing import CV2ImgU8, Face 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]: def get_upscaler() -> Optional[UpscalerData]:
@ -216,18 +216,11 @@ class UpscaledINSwapper(INSwapper):
bgr_fake, inswapper_options=options, k=k bgr_fake, inswapper_options=options, k=k
) )
if options.improved_mask: fake_diff: CV2ImgU8 = None # type: ignore
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)
bgr_fake = merge_images_with_mask(aimg, bgr_fake, mask)
# compute fake_diff before sharpen and color correction (better result) if not options.improved_mask:
fake_diff = compute_diff(bgr_fake, aimg) # 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: if options.sharpen:
logger.info("sharpen") logger.info("sharpen")
@ -244,6 +237,24 @@ class UpscaledINSwapper(INSwapper):
) )
bgr_fake = pil_to_cv2(bgr_fake_pil) 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) logger.info("*" * 80)
else: else:
@ -266,6 +277,7 @@ class UpscaledINSwapper(INSwapper):
(target_img.shape[1], target_img.shape[0]), (target_img.shape[1], target_img.shape[0]),
borderValue=0.0, borderValue=0.0,
) )
fake_diff = cv2.warpAffine( fake_diff = cv2.warpAffine(
fake_diff, fake_diff,
IM, IM,

@ -5,7 +5,6 @@ import cv2
import numpy as np import numpy as np
from math import isqrt, ceil from math import isqrt, ceil
import torch import torch
from ifnude import detect
from modules import processing from modules import processing
import base64 import base64
from collections import Counter from collections import Counter
@ -31,6 +30,8 @@ def check_against_nsfw(img: PILImage) -> bool:
if NSFW_SCORE_THRESHOLD >= 1: if NSFW_SCORE_THRESHOLD >= 1:
return False return False
from ifnude import detect
shapes: List[bool] = [] shapes: List[bool] = []
chunks: List[Dict[str, Union[int, float]]] = detect(img) chunks: List[Dict[str, Union[int, float]]] = detect(img)

Loading…
Cancel
Save