| import gradio as gr
|
| import sys
|
| from starline import process
|
|
|
| from utils import load_cn_model, load_cn_config, randomname
|
| from convertor import pil2cv, cv2pil
|
|
|
| from sd_model import get_cn_pipeline, generate, get_cn_detector
|
| import cv2
|
| import os
|
| import numpy as np
|
| from PIL import Image
|
|
|
| path = os.getcwd()
|
| output_dir = f"{path}/output"
|
| input_dir = f"{path}/input"
|
| cn_lineart_dir = f"{path}/controlnet/lineart"
|
|
|
| load_cn_model(cn_lineart_dir)
|
| load_cn_config(cn_lineart_dir)
|
|
|
| class webui:
|
| def __init__(self):
|
| self.demo = gr.Blocks()
|
|
|
| def undercoat(self, input_image, pos_prompt, neg_prompt, alpha_th):
|
| org_line_image = input_image
|
| image = pil2cv(input_image)
|
| image = cv2.cvtColor(image, cv2.COLOR_BGRA2RGBA)
|
|
|
| index = np.where(image[:, :, 3] == 0)
|
| image[index] = [255, 255, 255, 255]
|
| input_image = cv2pil(image)
|
|
|
| pipe = get_cn_pipeline()
|
| detectors = get_cn_detector(input_image.resize((1024, 1024), Image.ANTIALIAS))
|
|
|
|
|
| gen_image = generate(pipe, detectors, pos_prompt, neg_prompt)
|
| output = process(gen_image.resize((image.shape[1], image.shape[0]), Image.ANTIALIAS) , org_line_image, alpha_th)
|
|
|
| output = output.resize((image.shape[1], image.shape[0]) , Image.ANTIALIAS)
|
|
|
|
|
| output = Image.alpha_composite(output, org_line_image)
|
| name = randomname(10)
|
| output.save(f"{output_dir}/output_{name}.png")
|
|
|
| file_name = f"{output_dir}/output_{name}.png"
|
|
|
| return output, file_name
|
|
|
|
|
|
|
| def launch(self, share):
|
| with self.demo:
|
| with gr.Row():
|
| with gr.Column():
|
| input_image = gr.Image(type="pil", image_mode="RGBA")
|
|
|
| pos_prompt = gr.Textbox(max_lines=1000, label="positive prompt")
|
| neg_prompt = gr.Textbox(max_lines=1000, label="negative prompt")
|
|
|
| alpha_th = gr.Slider(maximum = 255, value=100, label = "alpha threshold")
|
|
|
| submit = gr.Button(value="Start")
|
| with gr.Row():
|
| with gr.Column():
|
| with gr.Tab("output"):
|
| output_0 = gr.Image()
|
|
|
| output_file = gr.File()
|
| submit.click(
|
| self.undercoat,
|
| inputs=[input_image, pos_prompt, neg_prompt, alpha_th],
|
| outputs=[output_0, output_file]
|
| )
|
|
|
| self.demo.queue()
|
| self.demo.launch(share=share)
|
|
|
|
|
| if __name__ == "__main__":
|
| ui = webui()
|
| if len(sys.argv) > 1:
|
| if sys.argv[1] == "share":
|
| ui.launch(share=True)
|
| else:
|
| ui.launch(share=False)
|
| else:
|
| ui.launch(share=False)
|
|
|