From 6d6981acbbc905c89be6203bb8b873bd47e29a9f Mon Sep 17 00:00:00 2001 From: Gourieff <777@lovemet.ru> Date: Sun, 24 Sep 2023 22:17:49 +0700 Subject: [PATCH] UPDATE: CodeFormer Weight, API +VersionUP (beta3) --- README.md | 2 +- README_RU.md | 2 +- example/api_example.py | 1 + example/api_external.curl | 1 + example/api_external.json | 1 + scripts/reactor_api.py | 5 +++-- scripts/reactor_faceswap.py | 14 +++++++++++--- scripts/reactor_swapper.py | 9 ++++++++- scripts/reactor_version.py | 2 +- 9 files changed, 28 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 8e09649..492d3e8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ logo - ![Version](https://img.shields.io/badge/version-0.4.2_beta2-green?style=for-the-badge&labelColor=darkgreen) + ![Version](https://img.shields.io/badge/version-0.4.2_beta3-green?style=for-the-badge&labelColor=darkgreen) diff --git a/README_RU.md b/README_RU.md index 8fb4fa0..4bc289f 100644 --- a/README_RU.md +++ b/README_RU.md @@ -2,7 +2,7 @@ logo - ![Version](https://img.shields.io/badge/версия-0.4.2_beta2-green?style=for-the-badge&labelColor=darkgreen) + ![Version](https://img.shields.io/badge/версия-0.4.2_beta3-green?style=for-the-badge&labelColor=darkgreen)
diff --git a/example/api_example.py b/example/api_example.py index a359148..0bbb08b 100644 --- a/example/api_example.py +++ b/example/api_example.py @@ -39,6 +39,7 @@ args=[ 0, #14 Gender Detection (Source) (0 - No, 1 - Female Only, 2 - Male Only) 0, #15 Gender Detection (Target) (0 - No, 1 - Female Only, 2 - Male Only) False, #16 Save the original image(s) made before swapping + 0.8, #17 CodeFormer Weight (0 = maximum effect, 1 = minimum effect), 0.5 - by default ] # The args for ReActor can be found by diff --git a/example/api_external.curl b/example/api_external.curl index a331fc3..751d34e 100644 --- a/example/api_external.curl +++ b/example/api_external.curl @@ -12,6 +12,7 @@ curl -X POST \ "upscale_visibility": 1, "face_restorer": "CodeFormer", "restorer_visibility": 1, + "codeformer_weight": 0.5, "restore_first": 1, "model": "inswapper_128.onnx", "gender_source": 0, diff --git a/example/api_external.json b/example/api_external.json index ed59b10..18e6e4a 100644 --- a/example/api_external.json +++ b/example/api_external.json @@ -8,6 +8,7 @@ "upscale_visibility": 1, "face_restorer": "CodeFormer", "restorer_visibility": 1, + "codeformer_weight": 0.5, "restore_first": 1, "model": "inswapper_128.onnx", "gender_source": 0, diff --git a/scripts/reactor_api.py b/scripts/reactor_api.py index 4ed8101..c9c3aed 100644 --- a/scripts/reactor_api.py +++ b/scripts/reactor_api.py @@ -1,7 +1,7 @@ ''' Thanks SpenserCai for the original version of the roop api script ----------------------------------- ---- ReActor External API v1.0.0 --- +--- ReActor External API v1.0.1 --- ----------------------------------- ''' import os, glob @@ -64,6 +64,7 @@ def reactor_api(_: gr.Blocks, app: FastAPI): upscale_visibility: float = Body(1,title="Upscaler visibility (if scale = 1)"), face_restorer: str = Body("None",title="Restore Face: 0 - None; 1 - CodeFormer; 2 - GFPGA"), restorer_visibility: float = Body(1,title="Restore visibility value"), + codeformer_weight: float = Body(0.5,title="CodeFormer Weight"), restore_first: int = Body(1,title="Restore face -> Then upscale, 1 - True, 0 - False"), model: str = Body("inswapper_128.onnx",title="Model"), gender_source: int = Body(0,title="Gender Detection (Source) (0 - No, 1 - Female Only, 2 - Male Only)"), @@ -78,7 +79,7 @@ def reactor_api(_: gr.Blocks, app: FastAPI): gender_s = gender_source gender_t = gender_target restore_first_bool = True if restore_first == 1 else False - up_options = EnhancementOptions(do_restore_first=restore_first_bool, scale=scale, upscaler=get_upscaler(upscaler), upscale_visibility=upscale_visibility,face_restorer=get_face_restorer(face_restorer),restorer_visibility=restorer_visibility) + up_options = EnhancementOptions(do_restore_first=restore_first_bool, scale=scale, upscaler=get_upscaler(upscaler), upscale_visibility=upscale_visibility,face_restorer=get_face_restorer(face_restorer),restorer_visibility=restorer_visibility,codeformer_weight=codeformer_weight) use_model = get_full_model(model) if use_model is None: Exception("Model not found") diff --git a/scripts/reactor_faceswap.py b/scripts/reactor_faceswap.py index c5cad56..bf94423 100644 --- a/scripts/reactor_faceswap.py +++ b/scripts/reactor_faceswap.py @@ -90,9 +90,13 @@ class FaceSwapScript(scripts.Script): value=shared.face_restorers[0].name(), type="value", ) - face_restorer_visibility = gr.Slider( - 0, 1, 1, step=0.1, label="Restore Face Visibility" - ) + with gr.Column(): + face_restorer_visibility = gr.Slider( + 0, 1, 1, step=0.1, label="Restore Face Visibility" + ) + codeformer_weight = gr.Slider( + 0, 1, 0.5, step=0.1, label="CodeFormer Weight", info="0 = maximum effect, 1 = minimum effect" + ) gr.Markdown("
") swap_in_source = gr.Checkbox( False, @@ -162,6 +166,7 @@ class FaceSwapScript(scripts.Script): gender_source, gender_target, save_original, + codeformer_weight, ] @@ -188,6 +193,7 @@ class FaceSwapScript(scripts.Script): face_restorer=self.face_restorer, upscale_visibility=self.upscaler_visibility, restorer_visibility=self.face_restorer_visibility, + codeformer_weight=self.codeformer_weight, ) def process( @@ -210,6 +216,7 @@ class FaceSwapScript(scripts.Script): gender_source, gender_target, save_original, + codeformer_weight, ): self.enable = enable if self.enable: @@ -232,6 +239,7 @@ class FaceSwapScript(scripts.Script): self.gender_source = gender_source self.gender_target = gender_target self.save_original = save_original + self.codeformer_weight = codeformer_weight if self.gender_source is None or self.gender_source == "No": self.gender_source = 0 if self.gender_target is None or self.gender_target == "No": diff --git a/scripts/reactor_swapper.py b/scripts/reactor_swapper.py index e83f7b4..8abf955 100644 --- a/scripts/reactor_swapper.py +++ b/scripts/reactor_swapper.py @@ -10,6 +10,7 @@ from PIL import Image import insightface from modules.face_restoration import FaceRestoration +from modules import codeformer_model from modules.upscaler import UpscalerData from modules.shared import state from modules.paths_internal import models_path @@ -31,6 +32,7 @@ class EnhancementOptions: upscale_visibility: float = 0.5 face_restorer: FaceRestoration = None restorer_visibility: float = 0.5 + codeformer_weight: float = 0.5 MESSAGED_STOPPED = False @@ -93,7 +95,12 @@ def restore_face(image: Image, enhancement_options: EnhancementOptions): original_image = result_image.copy() logger.info("Restoring the face with %s", enhancement_options.face_restorer.name()) numpy_image = np.array(result_image) - numpy_image = enhancement_options.face_restorer.restore(numpy_image) + if enhancement_options.face_restorer.name() == "CodeFormer": + numpy_image = codeformer_model.codeformer.restore( + numpy_image, w=enhancement_options.codeformer_weight + ) + else: + numpy_image = enhancement_options.face_restorer.restore(numpy_image) restored_image = Image.fromarray(numpy_image) result_image = Image.blend( original_image, restored_image, enhancement_options.restorer_visibility diff --git a/scripts/reactor_version.py b/scripts/reactor_version.py index ae4d16d..c64c1ce 100644 --- a/scripts/reactor_version.py +++ b/scripts/reactor_version.py @@ -1,5 +1,5 @@ app_title = "ReActor" -version_flag = "v0.4.2-b2" +version_flag = "v0.4.2-b3" from scripts.reactor_logger import logger, get_Run, set_Run