Sebastiankay's picture
Update app.py
6668caf verified
raw
history blame
22 kB
import gradio as gr
import cv2
import numpy as np
from annotator.util import resize_image, HWC3
DESCRIPTION = "# "
DESCRIPTION += "# ControlNet v1.1 Preprocessors Standalone"
DESCRIPTION += "\n<p>Generate Control Images for Stable Diffusion and other apps that uses ControlNet.</p>"
model_canny = None
def canny(img, res, l, h):
img = resize_image(HWC3(img), res)
global model_canny
if model_canny is None:
from annotator.canny import CannyDetector
model_canny = CannyDetector()
result = model_canny(img, l, h)
return [result]
model_hed = None
def hed(img, res):
img = resize_image(HWC3(img), res)
global model_hed
if model_hed is None:
from annotator.hed import HEDdetector
model_hed = HEDdetector()
result = model_hed(img)
return [result]
model_pidi = None
def pidi(img, res):
img = resize_image(HWC3(img), res)
global model_pidi
if model_pidi is None:
from annotator.pidinet import PidiNetDetector
model_pidi = PidiNetDetector()
result = model_pidi(img)
return [result]
model_mlsd = None
def mlsd(img, res, thr_v, thr_d):
img = resize_image(HWC3(img), res)
global model_mlsd
if model_mlsd is None:
from annotator.mlsd import MLSDdetector
model_mlsd = MLSDdetector()
result = model_mlsd(img, thr_v, thr_d)
return [result]
model_midas = None
def midas(img, res):
img = resize_image(HWC3(img), res)
global model_midas
if model_midas is None:
from annotator.midas import MidasDetector
model_midas = MidasDetector()
result = model_midas(img)
return [result]
model_zoe = None
def zoe(img, res):
img = resize_image(HWC3(img), res)
global model_zoe
if model_zoe is None:
from annotator.zoe import ZoeDetector
model_zoe = ZoeDetector()
result = model_zoe(img)
return [result]
model_normalbae = None
def normalbae(img, res):
img = resize_image(HWC3(img), res)
global model_normalbae
if model_normalbae is None:
from annotator.normalbae import NormalBaeDetector
model_normalbae = NormalBaeDetector()
result = model_normalbae(img)
return [result]
model_dwpose = None
def dwpose(img, res):
img = resize_image(HWC3(img), res)
global model_dwpose
if model_dwpose is None:
from annotator.dwpose import DWposeDetector
model_dwpose = DWposeDetector()
result = model_dwpose(img)
return [result]
model_openpose = None
def openpose(img, res, hand_and_face):
img = resize_image(HWC3(img), res)
global model_openpose
if model_openpose is None:
from annotator.openpose import OpenposeDetector
model_openpose = OpenposeDetector()
result = model_openpose(img, hand_and_face)
return [result]
model_uniformer = None
# def uniformer(img, res):
# img = resize_image(HWC3(img), res)
# global model_uniformer
# if model_uniformer is None:
# from annotator.uniformer import UniformerDetector
# model_uniformer = UniformerDetector()
# result = model_uniformer(img)
# return [result]
## FUNCTION LINEART
model_lineart_anime = None
model_lineart = None
def lineart(img, res, preprocessor_name="Lineart", invert=True):
img = resize_image(HWC3(img), res)
["Lineart", "Lineart Coarse", "Lineart Anime"]
if preprocessor_name in ["Lineart", "Lineart Coarse"]:
coarse = "Coarse" in preprocessor_name
global model_lineart
if model_lineart is None:
from annotator.lineart import LineartDetector
model_lineart = LineartDetector()
# result = model_lineart(img, coarse)
if invert:
result = cv2.bitwise_not(model_lineart(img, coarse))
else:
result = model_lineart(img, coarse)
return [result]
elif preprocessor_name == "Lineart Anime":
global model_lineart_anime
if model_lineart_anime is None:
from annotator.lineart_anime import LineartAnimeDetector
model_lineart_anime = LineartAnimeDetector()
# result = model_lineart_anime(img)
if invert:
result = cv2.bitwise_not(model_lineart_anime(img))
else:
result = model_lineart_anime(img)
return [result]
model_oneformer_coco = None
def oneformer_coco(img, res):
img = resize_image(HWC3(img), res)
global model_oneformer_coco
if model_oneformer_coco is None:
from annotator.oneformer import OneformerCOCODetector
model_oneformer_coco = OneformerCOCODetector()
result = model_oneformer_coco(img)
return [result]
model_oneformer_ade20k = None
def oneformer_ade20k(img, res):
img = resize_image(HWC3(img), res)
global model_oneformer_ade20k
if model_oneformer_ade20k is None:
from annotator.oneformer import OneformerADE20kDetector
model_oneformer_ade20k = OneformerADE20kDetector()
result = model_oneformer_ade20k(img)
return [result]
model_content_shuffler = None
def content_shuffler(img, res):
img = resize_image(HWC3(img), res)
global model_content_shuffler
if model_content_shuffler is None:
from annotator.shuffle import ContentShuffleDetector
model_content_shuffler = ContentShuffleDetector()
result = model_content_shuffler(img)
return [result]
model_color_shuffler = None
def color_shuffler(img, res):
img = resize_image(HWC3(img), res)
global model_color_shuffler
if model_color_shuffler is None:
from annotator.shuffle import ColorShuffleDetector
model_color_shuffler = ColorShuffleDetector()
result = model_color_shuffler(img)
return [result]
model_inpaint = None
def inpaint(image, invert):
# color = HWC3(image["image"])
color = HWC3(image["background"])
if invert:
# alpha = image["mask"][:, :, 0:1]
alpha = image["layers"][0][:, :, 3:]
else:
# alpha = 255 - image["mask"][:, :, 0:1]
alpha = 255 - image["layers"][0][:, :, 3:]
result = np.concatenate([color, alpha], axis=2)
return [result]
theme = gr.themes.Soft(
primary_hue="emerald",
# neutral_hue=gr.themes.Color(c100="#fce7f3", c200="#fbcfe8", c300="#f9a8d4", c400="#f472b6", c50="#fdf2f8", c500="#9b3b6b", c600="#7f2f53", c700="#641b3a", c800="#5d1431", c900="#361120", c950="#2b0d19"),
radius_size="sm",
)
css = """
body > gradio-app {
background: var(--primary-950);
background: linear-gradient(180deg, color-mix(in srgb, var(--primary-950), transparent 50%) 0%, color-mix(in srgb, var(--primary-950), transparent 50%) 28%, var(--neutral-950) 28%, var(--neutral-950) 100%) !important;
padding-top: 120px;
}
div.tabs > div.tab-nav > button.selected {
border-width: 0 !important;
background: var(--primary-600) !important;
color: var(--neutral-950);
font-weight: 600;
}
div.tabs > div.tab-nav {
border-bottom: none; !important;
padding: 0 0.25rem 0 0.25rem !important;
}
div.tabs div.tabitem {
background-color: var(--neutral-900) !important;
border-top: 8px solid var(--primary-600) !important;
border-radius: var(--container-radius) !important;
}
.top-description h1 {
color: var(--neutral-400);
font-size: 2rem;
}
"""
with gr.Blocks(theme=theme, css=css) as demo:
gr.Markdown(DESCRIPTION, elem_classes="top-description")
with gr.Tab("Canny Edge"):
with gr.Row():
gr.Markdown("## Canny Edge")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
low_threshold = gr.Slider(label="low_threshold", minimum=1, maximum=255, value=100, step=1)
high_threshold = gr.Slider(label="high_threshold", minimum=1, maximum=255, value=200, step=1)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=canny, inputs=[input_image, resolution, low_threshold, high_threshold], outputs=[gallery])
with gr.Tab("HED Edge"):
with gr.Row():
gr.Markdown("## HED Edge&nbsp;&quot;SoftEdge&quot;")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=hed, inputs=[input_image, resolution], outputs=[gallery])
with gr.Tab("Pidi Edge"):
with gr.Row():
gr.Markdown("## Pidi Edge&nbsp;&quot;SoftEdge&quot;")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=pidi, inputs=[input_image, resolution], outputs=[gallery])
with gr.Tab("MLSD Edge"):
with gr.Row():
gr.Markdown("## MLSD Edge")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
value_threshold = gr.Slider(label="value_threshold", minimum=0.01, maximum=2.0, value=0.1, step=0.01)
distance_threshold = gr.Slider(label="distance_threshold", minimum=0.01, maximum=20.0, value=0.1, step=0.01)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=384, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=mlsd, inputs=[input_image, resolution, value_threshold, distance_threshold], outputs=[gallery])
with gr.Tab("MIDAS Depth"):
with gr.Row():
gr.Markdown("## MIDAS Depth")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=384, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=midas, inputs=[input_image, resolution], outputs=[gallery])
with gr.Tab("ZOE Depth"):
with gr.Row():
gr.Markdown("## Zoe Depth")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=zoe, inputs=[input_image, resolution], outputs=[gallery])
with gr.Tab("Normal Bae"):
with gr.Row():
gr.Markdown("## Normal Bae")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=normalbae, inputs=[input_image, resolution], outputs=[gallery])
with gr.Tab("DWPose"):
with gr.Row():
gr.Markdown("## DWPose")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=dwpose, inputs=[input_image, resolution], outputs=[gallery])
with gr.Tab("Openpose"):
with gr.Row():
gr.Markdown("## Openpose")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
hand_and_face = gr.Checkbox(label="Hand and Face", value=False)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=openpose, inputs=[input_image, resolution, hand_and_face], outputs=[gallery])
## TAB LINEART
with gr.Tab("Lineart"):
with gr.Row():
gr.Markdown("## Lineart \n<p>Check Invert to use with Mochi Diffusion. Inverted image can also be created here for use with ControlNet Scribble.")
with gr.Row():
with gr.Column():
preprocessor_name = gr.Radio(label="Preprocessor", choices=["Lineart", "Lineart Coarse", "Lineart Anime"], type="value", value="Lineart")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
invert = gr.Checkbox(label="Invert", value=True)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Lineart")
with gr.Column():
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
def update_button_label(preprocessor_name):
if preprocessor_name == "Lineart":
return "Lineart"
elif preprocessor_name == "Lineart Coarse":
return "Lineart Coarse"
elif preprocessor_name == "Lineart Anime":
return "Lineart Anime"
preprocessor_name.change(fn=update_button_label, inputs=[preprocessor_name], outputs=[run_button])
run_button.click(fn=lineart, inputs=[input_image, resolution, preprocessor_name, invert], outputs=[gallery])
with gr.Tab("InPaint"):
with gr.Row():
gr.Markdown("## InPaint")
with gr.Row():
with gr.Column():
input_image = gr.ImageMask(sources="upload", type="numpy", height="auto")
invert = gr.Checkbox(label="Invert Mask", value=False)
run_button = gr.Button("Run")
with gr.Column():
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=inpaint, inputs=[input_image, invert], outputs=[gallery])
# with gr.Row():
# gr.Markdown("## Uniformer Segmentation")
# with gr.Row():
# with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
# resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
# run_button = gr.Button(label="Run")
# with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
# run_button.click(fn=uniformer, inputs=[input_image, resolution], outputs=[gallery])
# with gr.Row():
# gr.Markdown("## Oneformer COCO Segmentation")
# with gr.Row():
# with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
# input_image = gr.Image(label="Input Image", type="numpy", height=512)
# resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
# run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
# with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
# gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
# run_button.click(fn=oneformer_coco, inputs=[input_image, resolution], outputs=[gallery])
# with gr.Row():
# gr.Markdown("## Oneformer ADE20K Segmentation")
# with gr.Row():
# with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
# input_image = gr.Image(label="Input Image", type="numpy", height=512)
# resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=640, step=64)
# run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
# with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
# gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
# run_button.click(fn=oneformer_ade20k, inputs=[input_image, resolution], outputs=[gallery])
with gr.Tab("Content Shuffle"):
with gr.Row():
gr.Markdown("## Content Shuffle")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=content_shuffler, inputs=[input_image, resolution], outputs=[gallery])
with gr.Tab("Color Shuffle"):
with gr.Row():
gr.Markdown("## Color Shuffle")
with gr.Row():
with gr.Column():
# input_image = gr.Image(source='upload', type="numpy")
input_image = gr.Image(label="Input Image", type="numpy", height=512)
resolution = gr.Slider(label="resolution", minimum=256, maximum=1024, value=512, step=64)
run_button = gr.Button("Run")
# run_button = gr.Button(label="Run")
with gr.Column():
# gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
gallery = gr.Gallery(label="Generated images", show_label=False, height="auto")
run_button.click(fn=color_shuffler, inputs=[input_image, resolution], outputs=[gallery])
demo.launch()