dikdimon's picture
Upload extensions using SD-Hub extension
bb7f1f4 verified
import gradio as gr
import numpy as np
import cv2
import modules.scripts as scripts
from modules import images
from modules.shared import opts
from cv2.ximgproc import guidedFilter
from modules.processing import process_images
class Script(scripts.Script):
def title(self):
return "AdverseCleaner"
def show(self, is_img2img):
return True
def ui(self, is_img2img):
info = gr.Markdown('''
### Bilateral Filter
''')
bilateral_steps = gr.Slider(minimum=1, maximum=128, step=1,
value=64, label="Bilateral Steps")
diameter = gr.Slider(minimum=1, maximum=30, step=1,
value=5, label="Diameter")
sigma_color = gr.Slider(minimum=1, maximum=30,
step=1, value=8, label="SigmaColor")
sigma_space = gr.Slider(minimum=1, maximum=30,
step=1, value=8, label="SigmaSpace")
info2 = gr.Markdown('''
### Guided Filter
''')
guided_steps = gr.Slider(minimum=1, maximum=64, step=1,
value=4, label="Guided Steps")
radius = gr.Slider(minimum=1, maximum=30, step=1,
value=4, label="Radius")
eps = gr.Slider(minimum=1, maximum=30, step=1,
value=16, label="Accuracy")
return [info, bilateral_steps, diameter, sigma_color, sigma_space, info2, guided_steps, radius, eps]
def run(self, p, _, bilateral_steps, diameter, sigma_color, sigma_space, __, guided_steps, radius, eps):
from PIL import Image
has_grid = False
proc = process_images(p)
unwanted_grid_because_of_img_count = len(
proc.images) < 2 and opts.grid_only_if_multiple
if (opts.return_grid or opts.grid_save) and not p.do_not_save_grid and not unwanted_grid_because_of_img_count:
has_grid = True
def process(im,i):
outpath = p.outpath_grids if has_grid and i == 0 else p.outpath_samples
img = cv2.cvtColor(
np.array(im), cv2.COLOR_RGB2BGR).astype(np.float32)
y = img.copy()
for _ in range(bilateral_steps):
y = cv2.bilateralFilter(y, diameter, sigma_color, sigma_space)
for _ in range(guided_steps):
y = guidedFilter(img, y, radius, eps)
out_image = Image.fromarray(cv2.cvtColor(
y.clip(0, 255).astype(np.uint8), cv2.COLOR_BGR2RGB))
images.save_image(out_image, outpath, "img_", proc.seed +
i, proc.prompt, "png", info=proc.info, p=p)
return out_image
for i in range(len(proc.images)):
proc.images.append(process(proc.images[i], i))
return proc