| | |
| | |
| |
|
| | |
| |
|
| | from chain_img_processor import ChainImgProcessor, ChainImgPlugin |
| | import os |
| | from PIL import Image |
| | from numpy import asarray |
| |
|
| | modname = os.path.basename(__file__)[:-3] |
| |
|
| | |
| | def start(core:ChainImgProcessor): |
| | manifest = { |
| | "name": "Codeformer", |
| | "version": "3.0", |
| |
|
| | "default_options": { |
| | "background_enhance": True, |
| | "face_upsample": True, |
| | "upscale": 2, |
| | "codeformer_fidelity": 0.8, |
| | "skip_if_no_face":False, |
| |
|
| | }, |
| |
|
| | "img_processor": { |
| | "codeformer": PluginCodeformer |
| | } |
| | } |
| | return manifest |
| |
|
| | def start_with_options(core:ChainImgProcessor, manifest:dict): |
| | pass |
| |
|
| | class PluginCodeformer(ChainImgPlugin): |
| | def init_plugin(self): |
| | import plugins.codeformer_app_cv2 |
| | pass |
| |
|
| | def process(self, img, params:dict): |
| | import copy |
| | |
| | |
| | from plugins.codeformer_app_cv2 import inference_app |
| | options = self.core.plugin_options(modname) |
| |
|
| | if "face_detected" in params: |
| | if not params["face_detected"]: |
| | return img |
| |
|
| | |
| | temp_frame = copy.copy(img) |
| | if "processed_faces" in params: |
| | for face in params["processed_faces"]: |
| | start_x, start_y, end_x, end_y = map(int, face['bbox']) |
| | padding_x = int((end_x - start_x) * 0.5) |
| | padding_y = int((end_y - start_y) * 0.5) |
| | start_x = max(0, start_x - padding_x) |
| | start_y = max(0, start_y - padding_y) |
| | end_x = max(0, end_x + padding_x) |
| | end_y = max(0, end_y + padding_y) |
| | temp_face = temp_frame[start_y:end_y, start_x:end_x] |
| | if temp_face.size: |
| | temp_face = inference_app(temp_face, options.get("background_enhance"), options.get("face_upsample"), |
| | options.get("upscale"), options.get("codeformer_fidelity"), |
| | options.get("skip_if_no_face")) |
| | temp_frame[start_y:end_y, start_x:end_x] = temp_face |
| | else: |
| | temp_frame = inference_app(temp_frame, options.get("background_enhance"), options.get("face_upsample"), |
| | options.get("upscale"), options.get("codeformer_fidelity"), |
| | options.get("skip_if_no_face")) |
| |
|
| | |
| |
|
| | if not "blend_ratio" in params: |
| | return temp_frame |
| |
|
| |
|
| | temp_frame = Image.blend(Image.fromarray(img), Image.fromarray(temp_frame), params["blend_ratio"]) |
| | return asarray(temp_frame) |
| |
|
| |
|