UPDATE: Filenames w/ Multiple or Random; FIX: #342

FR #332
Issue #342
This commit is contained in:
Art Gourieff 2024-02-03 01:01:08 +07:00
parent c745fa2911
commit a93e04ea13
5 changed files with 54 additions and 14 deletions

View File

@ -43,6 +43,7 @@
### 0.6.1 <sub><sup>BETA3
- 'Force Upscale' option inside the 'Upscale' tab: ReActor will run the Upscaler even if there's no face is detected (FR https://github.com/Gourieff/sd-webui-reactor/issues/116)
- ReActor shows filenames of source images in-process when the multiple images mode or the folder mode (random as well) is selected
### 0.6.1 <sub><sup>BETA2

View File

@ -42,6 +42,7 @@
### 0.6.1 <sub><sup>BETA3
- Опция 'Force Upscale' внутри вкладки 'Upscale': апскейл выполнится, даже если не было обнаружено ни одного лица (FR https://github.com/Gourieff/sd-webui-reactor/issues/116)
- Отображение имён файлов используемых изображений, когда выбрано несколько изображений или папка (а также режим случайного изображения)
### 0.6.1 <sub><sup>BETA2

View File

@ -238,7 +238,11 @@ class FaceSwapScript(scripts.Script):
if ((self.source is not None or self.source_imgs is not None) and self.select_source == 0) or ((self.face_model is not None and self.face_model != "None") and self.select_source == 1) or ((self.source_folder is not None and self.source_folder != "") and self.select_source == 2):
logger.debug("*** Log patch")
apply_logging_patch(console_logging_level)
if isinstance(p, StableDiffusionProcessingImg2Img) and self.swap_in_source:
logger.debug("*** Check process")
logger.status("Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index)
for i in range(len(p.init_images)):
@ -279,7 +283,7 @@ class FaceSwapScript(scripts.Script):
def postprocess(self, p: StableDiffusionProcessing, processed: Processed, *args):
if self.enable:
logger.debug("*** Check postprocess")
logger.debug("*** Check postprocess - before IF")
reset_messaged()
if check_process_halt():
@ -287,6 +291,8 @@ class FaceSwapScript(scripts.Script):
if self.save_original or ((self.select_source == 2 and self.source_folder is not None and self.source_folder != "") or (self.select_source == 0 and self.source_imgs is not None and self.source is None)):
logger.debug("*** Check postprocess - after IF")
postprocess_run: bool = True
orig_images : List[Image.Image] = processed.images[processed.index_of_first_image:]
@ -373,6 +379,21 @@ class FaceSwapScript(scripts.Script):
processed.images = result_images
# processed.infotexts = result_info
elif self.select_source == 0 and self.source is not None and self.source_imgs is not None:
logger.debug("*** Check postprocess - after ELIF")
if self.result is not None:
orig_infotexts : List[str] = processed.infotexts[processed.index_of_first_image:]
processed.images = [self.result]
try:
img_path = save_image(self.result, p.outpath_samples, "", p.all_seeds[0], p.all_prompts[0], "png", info=orig_infotexts[0], p=p, suffix="")
except:
logger.error("Cannot save a result image - please, check SD WebUI Settings (Saving and Paths)")
else:
logger.error("Cannot create a result image")
def postprocess_batch(self, p, *args, **kwargs):
if self.enable and not self.save_original:
@ -392,7 +413,7 @@ class FaceSwapScript(scripts.Script):
return
# if (self.source is not None and self.select_source == 0) or ((self.face_model is not None and self.face_model != "None") and self.select_source == 1):
logger.status("Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index)
logger.status("! Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index)
image: Image.Image = script_pp.image
result, output, swapped = swap_face(
self.source,
@ -413,6 +434,7 @@ class FaceSwapScript(scripts.Script):
source_imgs = None,
random_image = False,
)
self.result = result
try:
pp = scripts_postprocessing.PostprocessedImage(result)
pp.info = {}
@ -575,6 +597,9 @@ class FaceSwapScriptExtras(scripts_postprocessing.ScriptPostprocessing):
logger.debug("We're here: process() 2")
if self.source is not None and self.select_source == 0:
self.source_imgs = None
apply_logging_patch(self.console_logging_level)
logger.status("Working: source face index %s, target face index %s", self.source_faces_index, self.faces_index)
# if self.select_source != 2:

View File

@ -209,14 +209,27 @@ def get_model_names(get_models):
return names
def get_images_from_folder(path: str):
images_path = os.path.join(path, "*")
images = glob.glob(images_path)
return [Image.open(x) for x in images if x.endswith(('jpg', 'png', 'jpeg', 'webp', 'bmp'))]
files_path = os.path.join(path, "*")
files = glob.glob(files_path)
images = []
images_names = []
for x in files:
if x.endswith(('jpg', 'png', 'jpeg', 'webp', 'bmp')):
images.append(Image.open(x))
images_names.append(os.path.basename(x))
return images,images_names
# return [Image.open(x) for x in images if x.endswith(('jpg', 'png', 'jpeg', 'webp', 'bmp'))],[os.path.basename(x) for x in images if x.endswith(('jpg', 'png', 'jpeg', 'webp', 'bmp'))]
def get_random_image_from_folder(path: str):
images = get_images_from_folder(path)
images,names = get_images_from_folder(path)
random_image_index = random.randint(0, len(images) - 1)
return [images[random_image_index]]
return [images[random_image_index]],[names[random_image_index]]
def get_images_from_list(imgs: List):
return [Image.open(os.path.abspath(x.name)) for x in imgs]
images = []
images_names = []
for x in imgs:
images.append(Image.open(os.path.abspath(x.name)))
images_names.append(os.path.basename(x.name))
return images,images_names
# return [Image.open(os.path.abspath(x.name)) for x in imgs],[os.path.basename(x.name) for x in imgs]

View File

@ -380,10 +380,10 @@ def swap_face(
result = []
if random_image and select_source == 2:
source_images = get_random_image_from_folder(source_folder)
logger.status("Processing with Random Image from the folder")
source_images,source_images_names = get_random_image_from_folder(source_folder)
logger.status(f"Processing with Random Image from the folder: {source_images_names[0]}")
else:
source_images = get_images_from_folder(source_folder) if select_source == 2 else get_images_from_list(source_imgs)
source_images,source_images_names = get_images_from_folder(source_folder) if select_source == 2 else get_images_from_list(source_imgs)
if len(source_images) > 0:
source_img_ff = []
@ -412,15 +412,15 @@ def swap_face(
logger.info("(Image %s) Source Image the Same? %s", i, source_image_same)
if len(SOURCE_FACES_LIST) == 0:
logger.status(f"Analyzing Source Image {i}...")
logger.status(f"Analyzing Source Image {i}: {source_images_names[i]}...")
source_faces = analyze_faces(source_image)
SOURCE_FACES_LIST = [source_faces]
elif len(SOURCE_FACES_LIST) == i and not source_image_same:
logger.status(f"Analyzing Source Image {i}...")
logger.status(f"Analyzing Source Image {i}: {source_images_names[i]}...")
source_faces = analyze_faces(source_image)
SOURCE_FACES_LIST.append(source_faces)
elif len(SOURCE_FACES_LIST) != i and not source_image_same:
logger.status(f"Analyzing Source Image {i}...")
logger.status(f"Analyzing Source Image {i}: {source_images_names[i]}...")
source_faces = analyze_faces(source_image)
SOURCE_FACES_LIST[i] = source_faces
elif source_image_same: