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 @@
- 
+ 
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 @@
- 
+ 
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