UPDATE: CodeFormer Weight, API
+VersionUP (beta3)
This commit is contained in:
parent
7950a546c5
commit
6d6981acbb
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<img src="example/ReActor_logo_red.png" alt="logo" width="180px"/>
|
<img src="example/ReActor_logo_red.png" alt="logo" width="180px"/>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<img src="example/ReActor_logo_red.png" alt="logo" width="180px"/>
|
<img src="example/ReActor_logo_red.png" alt="logo" width="180px"/>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@ -39,6 +39,7 @@ args=[
|
|||||||
0, #14 Gender Detection (Source) (0 - No, 1 - Female Only, 2 - Male Only)
|
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)
|
0, #15 Gender Detection (Target) (0 - No, 1 - Female Only, 2 - Male Only)
|
||||||
False, #16 Save the original image(s) made before swapping
|
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
|
# The args for ReActor can be found by
|
||||||
|
|||||||
@ -12,6 +12,7 @@ curl -X POST \
|
|||||||
"upscale_visibility": 1,
|
"upscale_visibility": 1,
|
||||||
"face_restorer": "CodeFormer",
|
"face_restorer": "CodeFormer",
|
||||||
"restorer_visibility": 1,
|
"restorer_visibility": 1,
|
||||||
|
"codeformer_weight": 0.5,
|
||||||
"restore_first": 1,
|
"restore_first": 1,
|
||||||
"model": "inswapper_128.onnx",
|
"model": "inswapper_128.onnx",
|
||||||
"gender_source": 0,
|
"gender_source": 0,
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
"upscale_visibility": 1,
|
"upscale_visibility": 1,
|
||||||
"face_restorer": "CodeFormer",
|
"face_restorer": "CodeFormer",
|
||||||
"restorer_visibility": 1,
|
"restorer_visibility": 1,
|
||||||
|
"codeformer_weight": 0.5,
|
||||||
"restore_first": 1,
|
"restore_first": 1,
|
||||||
"model": "inswapper_128.onnx",
|
"model": "inswapper_128.onnx",
|
||||||
"gender_source": 0,
|
"gender_source": 0,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
'''
|
'''
|
||||||
Thanks SpenserCai for the original version of the roop api script
|
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
|
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)"),
|
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"),
|
face_restorer: str = Body("None",title="Restore Face: 0 - None; 1 - CodeFormer; 2 - GFPGA"),
|
||||||
restorer_visibility: float = Body(1,title="Restore visibility value"),
|
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"),
|
restore_first: int = Body(1,title="Restore face -> Then upscale, 1 - True, 0 - False"),
|
||||||
model: str = Body("inswapper_128.onnx",title="Model"),
|
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)"),
|
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_s = gender_source
|
||||||
gender_t = gender_target
|
gender_t = gender_target
|
||||||
restore_first_bool = True if restore_first == 1 else False
|
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)
|
use_model = get_full_model(model)
|
||||||
if use_model is None:
|
if use_model is None:
|
||||||
Exception("Model not found")
|
Exception("Model not found")
|
||||||
|
|||||||
@ -90,9 +90,13 @@ class FaceSwapScript(scripts.Script):
|
|||||||
value=shared.face_restorers[0].name(),
|
value=shared.face_restorers[0].name(),
|
||||||
type="value",
|
type="value",
|
||||||
)
|
)
|
||||||
face_restorer_visibility = gr.Slider(
|
with gr.Column():
|
||||||
0, 1, 1, step=0.1, label="Restore Face Visibility"
|
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("<br>")
|
gr.Markdown("<br>")
|
||||||
swap_in_source = gr.Checkbox(
|
swap_in_source = gr.Checkbox(
|
||||||
False,
|
False,
|
||||||
@ -162,6 +166,7 @@ class FaceSwapScript(scripts.Script):
|
|||||||
gender_source,
|
gender_source,
|
||||||
gender_target,
|
gender_target,
|
||||||
save_original,
|
save_original,
|
||||||
|
codeformer_weight,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -188,6 +193,7 @@ class FaceSwapScript(scripts.Script):
|
|||||||
face_restorer=self.face_restorer,
|
face_restorer=self.face_restorer,
|
||||||
upscale_visibility=self.upscaler_visibility,
|
upscale_visibility=self.upscaler_visibility,
|
||||||
restorer_visibility=self.face_restorer_visibility,
|
restorer_visibility=self.face_restorer_visibility,
|
||||||
|
codeformer_weight=self.codeformer_weight,
|
||||||
)
|
)
|
||||||
|
|
||||||
def process(
|
def process(
|
||||||
@ -210,6 +216,7 @@ class FaceSwapScript(scripts.Script):
|
|||||||
gender_source,
|
gender_source,
|
||||||
gender_target,
|
gender_target,
|
||||||
save_original,
|
save_original,
|
||||||
|
codeformer_weight,
|
||||||
):
|
):
|
||||||
self.enable = enable
|
self.enable = enable
|
||||||
if self.enable:
|
if self.enable:
|
||||||
@ -232,6 +239,7 @@ class FaceSwapScript(scripts.Script):
|
|||||||
self.gender_source = gender_source
|
self.gender_source = gender_source
|
||||||
self.gender_target = gender_target
|
self.gender_target = gender_target
|
||||||
self.save_original = save_original
|
self.save_original = save_original
|
||||||
|
self.codeformer_weight = codeformer_weight
|
||||||
if self.gender_source is None or self.gender_source == "No":
|
if self.gender_source is None or self.gender_source == "No":
|
||||||
self.gender_source = 0
|
self.gender_source = 0
|
||||||
if self.gender_target is None or self.gender_target == "No":
|
if self.gender_target is None or self.gender_target == "No":
|
||||||
|
|||||||
@ -10,6 +10,7 @@ from PIL import Image
|
|||||||
import insightface
|
import insightface
|
||||||
|
|
||||||
from modules.face_restoration import FaceRestoration
|
from modules.face_restoration import FaceRestoration
|
||||||
|
from modules import codeformer_model
|
||||||
from modules.upscaler import UpscalerData
|
from modules.upscaler import UpscalerData
|
||||||
from modules.shared import state
|
from modules.shared import state
|
||||||
from modules.paths_internal import models_path
|
from modules.paths_internal import models_path
|
||||||
@ -31,6 +32,7 @@ class EnhancementOptions:
|
|||||||
upscale_visibility: float = 0.5
|
upscale_visibility: float = 0.5
|
||||||
face_restorer: FaceRestoration = None
|
face_restorer: FaceRestoration = None
|
||||||
restorer_visibility: float = 0.5
|
restorer_visibility: float = 0.5
|
||||||
|
codeformer_weight: float = 0.5
|
||||||
|
|
||||||
|
|
||||||
MESSAGED_STOPPED = False
|
MESSAGED_STOPPED = False
|
||||||
@ -93,7 +95,12 @@ def restore_face(image: Image, enhancement_options: EnhancementOptions):
|
|||||||
original_image = result_image.copy()
|
original_image = result_image.copy()
|
||||||
logger.info("Restoring the face with %s", enhancement_options.face_restorer.name())
|
logger.info("Restoring the face with %s", enhancement_options.face_restorer.name())
|
||||||
numpy_image = np.array(result_image)
|
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)
|
restored_image = Image.fromarray(numpy_image)
|
||||||
result_image = Image.blend(
|
result_image = Image.blend(
|
||||||
original_image, restored_image, enhancement_options.restorer_visibility
|
original_image, restored_image, enhancement_options.restorer_visibility
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
app_title = "ReActor"
|
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
|
from scripts.reactor_logger import logger, get_Run, set_Run
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user