Spaces:
Running
Running
Migrate from yapf to black
Browse files- .pre-commit-config.yaml +54 -35
- .style.yapf +0 -5
- .vscode/settings.json +11 -8
- app.py +33 -37
- app_canny.py +32 -52
- app_depth.py +32 -51
- app_ip2p.py +28 -42
- app_lineart.py +39 -57
- app_mlsd.py +34 -57
- app_normal.py +33 -51
- app_openpose.py +33 -51
- app_scribble.py +32 -51
- app_scribble_interactive.py +43 -53
- app_segmentation.py +33 -51
- app_shuffle.py +30 -46
- app_softedge.py +42 -57
- depth_estimator.py +4 -4
- image_segmentor.py +7 -13
- model.py +90 -90
- preprocessor.py +32 -24
- settings.py +7 -10
.pre-commit-config.yaml
CHANGED
|
@@ -1,36 +1,55 @@
|
|
| 1 |
repos:
|
| 2 |
-
- repo: https://github.com/pre-commit/pre-commit-hooks
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
- repo: https://github.com/pre-commit/mirrors-mypy
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
repos:
|
| 2 |
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
| 3 |
+
rev: v4.4.0
|
| 4 |
+
hooks:
|
| 5 |
+
- id: check-executables-have-shebangs
|
| 6 |
+
- id: check-json
|
| 7 |
+
- id: check-merge-conflict
|
| 8 |
+
- id: check-shebang-scripts-are-executable
|
| 9 |
+
- id: check-toml
|
| 10 |
+
- id: check-yaml
|
| 11 |
+
- id: end-of-file-fixer
|
| 12 |
+
- id: mixed-line-ending
|
| 13 |
+
args: ["--fix=lf"]
|
| 14 |
+
- id: requirements-txt-fixer
|
| 15 |
+
- id: trailing-whitespace
|
| 16 |
+
- repo: https://github.com/myint/docformatter
|
| 17 |
+
rev: v1.7.5
|
| 18 |
+
hooks:
|
| 19 |
+
- id: docformatter
|
| 20 |
+
args: ["--in-place"]
|
| 21 |
+
- repo: https://github.com/pycqa/isort
|
| 22 |
+
rev: 5.12.0
|
| 23 |
+
hooks:
|
| 24 |
+
- id: isort
|
| 25 |
+
args: ["--profile", "black"]
|
| 26 |
+
- repo: https://github.com/pre-commit/mirrors-mypy
|
| 27 |
+
rev: v1.5.1
|
| 28 |
+
hooks:
|
| 29 |
+
- id: mypy
|
| 30 |
+
args: ["--ignore-missing-imports"]
|
| 31 |
+
additional_dependencies:
|
| 32 |
+
["types-python-slugify", "types-requests", "types-PyYAML"]
|
| 33 |
+
- repo: https://github.com/psf/black
|
| 34 |
+
rev: 23.9.1
|
| 35 |
+
hooks:
|
| 36 |
+
- id: black
|
| 37 |
+
language_version: python3.10
|
| 38 |
+
args: ["--line-length", "119"]
|
| 39 |
+
- repo: https://github.com/kynan/nbstripout
|
| 40 |
+
rev: 0.6.1
|
| 41 |
+
hooks:
|
| 42 |
+
- id: nbstripout
|
| 43 |
+
args:
|
| 44 |
+
[
|
| 45 |
+
"--extra-keys",
|
| 46 |
+
"metadata.interpreter metadata.kernelspec cell.metadata.pycharm",
|
| 47 |
+
]
|
| 48 |
+
- repo: https://github.com/nbQA-dev/nbQA
|
| 49 |
+
rev: 1.7.0
|
| 50 |
+
hooks:
|
| 51 |
+
- id: nbqa-black
|
| 52 |
+
- id: nbqa-pyupgrade
|
| 53 |
+
args: ["--py37-plus"]
|
| 54 |
+
- id: nbqa-isort
|
| 55 |
+
args: ["--float-to-top"]
|
.style.yapf
DELETED
|
@@ -1,5 +0,0 @@
|
|
| 1 |
-
[style]
|
| 2 |
-
based_on_style = pep8
|
| 3 |
-
blank_line_before_nested_class_or_def = false
|
| 4 |
-
spaces_before_comment = 2
|
| 5 |
-
split_before_logical_operator = true
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.vscode/settings.json
CHANGED
|
@@ -1,18 +1,21 @@
|
|
| 1 |
{
|
| 2 |
-
"python.linting.enabled": true,
|
| 3 |
-
"python.linting.flake8Enabled": true,
|
| 4 |
-
"python.linting.pylintEnabled": false,
|
| 5 |
-
"python.linting.lintOnSave": true,
|
| 6 |
-
"python.formatting.provider": "yapf",
|
| 7 |
-
"python.formatting.yapfArgs": [
|
| 8 |
-
"--style={based_on_style: pep8, indent_width: 4, blank_line_before_nested_class_or_def: false, spaces_before_comment: 2, split_before_logical_operator: true}"
|
| 9 |
-
],
|
| 10 |
"[python]": {
|
|
|
|
| 11 |
"editor.formatOnType": true,
|
| 12 |
"editor.codeActionsOnSave": {
|
| 13 |
"source.organizeImports": true
|
| 14 |
}
|
| 15 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
"editor.formatOnSave": true,
|
| 17 |
"files.insertFinalNewline": true
|
| 18 |
}
|
|
|
|
| 1 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
"[python]": {
|
| 3 |
+
"editor.defaultFormatter": "ms-python.black-formatter",
|
| 4 |
"editor.formatOnType": true,
|
| 5 |
"editor.codeActionsOnSave": {
|
| 6 |
"source.organizeImports": true
|
| 7 |
}
|
| 8 |
},
|
| 9 |
+
"black-formatter.args": [
|
| 10 |
+
"--line-length=119"
|
| 11 |
+
],
|
| 12 |
+
"isort.args": ["--profile", "black"],
|
| 13 |
+
"flake8.args": [
|
| 14 |
+
"--max-line-length=119"
|
| 15 |
+
],
|
| 16 |
+
"ruff.args": [
|
| 17 |
+
"--line-length=119"
|
| 18 |
+
],
|
| 19 |
"editor.formatOnSave": true,
|
| 20 |
"files.insertFinalNewline": true
|
| 21 |
}
|
app.py
CHANGED
|
@@ -13,83 +13,79 @@ from app_mlsd import create_demo as create_demo_mlsd
|
|
| 13 |
from app_normal import create_demo as create_demo_normal
|
| 14 |
from app_openpose import create_demo as create_demo_openpose
|
| 15 |
from app_scribble import create_demo as create_demo_scribble
|
| 16 |
-
from app_scribble_interactive import
|
| 17 |
-
create_demo as create_demo_scribble_interactive
|
| 18 |
from app_segmentation import create_demo as create_demo_segmentation
|
| 19 |
from app_shuffle import create_demo as create_demo_shuffle
|
| 20 |
from app_softedge import create_demo as create_demo_softedge
|
| 21 |
from model import Model
|
| 22 |
-
from settings import
|
| 23 |
-
SHOW_DUPLICATE_BUTTON)
|
| 24 |
|
| 25 |
-
DESCRIPTION =
|
| 26 |
|
| 27 |
if not torch.cuda.is_available():
|
| 28 |
-
DESCRIPTION +=
|
| 29 |
|
| 30 |
-
model = Model(base_model_id=DEFAULT_MODEL_ID, task_name=
|
| 31 |
|
| 32 |
-
with gr.Blocks(css=
|
| 33 |
gr.Markdown(DESCRIPTION)
|
| 34 |
-
gr.DuplicateButton(
|
| 35 |
-
|
| 36 |
-
|
| 37 |
|
| 38 |
with gr.Tabs():
|
| 39 |
-
with gr.TabItem(
|
| 40 |
create_demo_canny(model.process_canny)
|
| 41 |
-
with gr.TabItem(
|
| 42 |
create_demo_mlsd(model.process_mlsd)
|
| 43 |
-
with gr.TabItem(
|
| 44 |
create_demo_scribble(model.process_scribble)
|
| 45 |
-
with gr.TabItem(
|
| 46 |
-
create_demo_scribble_interactive(
|
| 47 |
-
|
| 48 |
-
with gr.TabItem('SoftEdge'):
|
| 49 |
create_demo_softedge(model.process_softedge)
|
| 50 |
-
with gr.TabItem(
|
| 51 |
create_demo_openpose(model.process_openpose)
|
| 52 |
-
with gr.TabItem(
|
| 53 |
create_demo_segmentation(model.process_segmentation)
|
| 54 |
-
with gr.TabItem(
|
| 55 |
create_demo_depth(model.process_depth)
|
| 56 |
-
with gr.TabItem(
|
| 57 |
create_demo_normal(model.process_normal)
|
| 58 |
-
with gr.TabItem(
|
| 59 |
create_demo_lineart(model.process_lineart)
|
| 60 |
-
with gr.TabItem(
|
| 61 |
create_demo_shuffle(model.process_shuffle)
|
| 62 |
-
with gr.TabItem(
|
| 63 |
create_demo_ip2p(model.process_ip2p)
|
| 64 |
|
| 65 |
-
with gr.Accordion(label=
|
| 66 |
with gr.Row():
|
| 67 |
with gr.Column(scale=5):
|
| 68 |
-
current_base_model = gr.Text(label=
|
| 69 |
with gr.Column(scale=1):
|
| 70 |
-
check_base_model_button = gr.Button(
|
| 71 |
with gr.Row():
|
| 72 |
with gr.Column(scale=5):
|
| 73 |
new_base_model_id = gr.Text(
|
| 74 |
-
label=
|
| 75 |
max_lines=1,
|
| 76 |
-
placeholder=
|
| 77 |
-
info=
|
| 78 |
-
|
| 79 |
-
|
| 80 |
with gr.Column(scale=1):
|
| 81 |
-
change_base_model_button = gr.Button(
|
| 82 |
-
'Change base model', interactive=ALLOW_CHANGING_BASE_MODEL)
|
| 83 |
if not ALLOW_CHANGING_BASE_MODEL:
|
| 84 |
gr.Markdown(
|
| 85 |
-
|
| 86 |
)
|
| 87 |
|
| 88 |
check_base_model_button.click(
|
| 89 |
fn=lambda: model.base_model_id,
|
| 90 |
outputs=current_base_model,
|
| 91 |
queue=False,
|
| 92 |
-
api_name=
|
| 93 |
)
|
| 94 |
new_base_model_id.submit(
|
| 95 |
fn=model.set_base_model,
|
|
|
|
| 13 |
from app_normal import create_demo as create_demo_normal
|
| 14 |
from app_openpose import create_demo as create_demo_openpose
|
| 15 |
from app_scribble import create_demo as create_demo_scribble
|
| 16 |
+
from app_scribble_interactive import create_demo as create_demo_scribble_interactive
|
|
|
|
| 17 |
from app_segmentation import create_demo as create_demo_segmentation
|
| 18 |
from app_shuffle import create_demo as create_demo_shuffle
|
| 19 |
from app_softedge import create_demo as create_demo_softedge
|
| 20 |
from model import Model
|
| 21 |
+
from settings import ALLOW_CHANGING_BASE_MODEL, DEFAULT_MODEL_ID, SHOW_DUPLICATE_BUTTON
|
|
|
|
| 22 |
|
| 23 |
+
DESCRIPTION = "# ControlNet v1.1"
|
| 24 |
|
| 25 |
if not torch.cuda.is_available():
|
| 26 |
+
DESCRIPTION += "\n<p>Running on CPU 🥶 This demo does not work on CPU.</p>"
|
| 27 |
|
| 28 |
+
model = Model(base_model_id=DEFAULT_MODEL_ID, task_name="Canny")
|
| 29 |
|
| 30 |
+
with gr.Blocks(css="style.css") as demo:
|
| 31 |
gr.Markdown(DESCRIPTION)
|
| 32 |
+
gr.DuplicateButton(
|
| 33 |
+
value="Duplicate Space for private use", elem_id="duplicate-button", visible=SHOW_DUPLICATE_BUTTON
|
| 34 |
+
)
|
| 35 |
|
| 36 |
with gr.Tabs():
|
| 37 |
+
with gr.TabItem("Canny"):
|
| 38 |
create_demo_canny(model.process_canny)
|
| 39 |
+
with gr.TabItem("MLSD"):
|
| 40 |
create_demo_mlsd(model.process_mlsd)
|
| 41 |
+
with gr.TabItem("Scribble"):
|
| 42 |
create_demo_scribble(model.process_scribble)
|
| 43 |
+
with gr.TabItem("Scribble Interactive"):
|
| 44 |
+
create_demo_scribble_interactive(model.process_scribble_interactive)
|
| 45 |
+
with gr.TabItem("SoftEdge"):
|
|
|
|
| 46 |
create_demo_softedge(model.process_softedge)
|
| 47 |
+
with gr.TabItem("OpenPose"):
|
| 48 |
create_demo_openpose(model.process_openpose)
|
| 49 |
+
with gr.TabItem("Segmentation"):
|
| 50 |
create_demo_segmentation(model.process_segmentation)
|
| 51 |
+
with gr.TabItem("Depth"):
|
| 52 |
create_demo_depth(model.process_depth)
|
| 53 |
+
with gr.TabItem("Normal map"):
|
| 54 |
create_demo_normal(model.process_normal)
|
| 55 |
+
with gr.TabItem("Lineart"):
|
| 56 |
create_demo_lineart(model.process_lineart)
|
| 57 |
+
with gr.TabItem("Content Shuffle"):
|
| 58 |
create_demo_shuffle(model.process_shuffle)
|
| 59 |
+
with gr.TabItem("Instruct Pix2Pix"):
|
| 60 |
create_demo_ip2p(model.process_ip2p)
|
| 61 |
|
| 62 |
+
with gr.Accordion(label="Base model", open=False):
|
| 63 |
with gr.Row():
|
| 64 |
with gr.Column(scale=5):
|
| 65 |
+
current_base_model = gr.Text(label="Current base model")
|
| 66 |
with gr.Column(scale=1):
|
| 67 |
+
check_base_model_button = gr.Button("Check current base model")
|
| 68 |
with gr.Row():
|
| 69 |
with gr.Column(scale=5):
|
| 70 |
new_base_model_id = gr.Text(
|
| 71 |
+
label="New base model",
|
| 72 |
max_lines=1,
|
| 73 |
+
placeholder="runwayml/stable-diffusion-v1-5",
|
| 74 |
+
info="The base model must be compatible with Stable Diffusion v1.5.",
|
| 75 |
+
interactive=ALLOW_CHANGING_BASE_MODEL,
|
| 76 |
+
)
|
| 77 |
with gr.Column(scale=1):
|
| 78 |
+
change_base_model_button = gr.Button("Change base model", interactive=ALLOW_CHANGING_BASE_MODEL)
|
|
|
|
| 79 |
if not ALLOW_CHANGING_BASE_MODEL:
|
| 80 |
gr.Markdown(
|
| 81 |
+
"""The base model is not allowed to be changed in this Space so as not to slow down the demo, but it can be changed if you duplicate the Space."""
|
| 82 |
)
|
| 83 |
|
| 84 |
check_base_model_button.click(
|
| 85 |
fn=lambda: model.base_model_id,
|
| 86 |
outputs=current_base_model,
|
| 87 |
queue=False,
|
| 88 |
+
api_name="check_base_model",
|
| 89 |
)
|
| 90 |
new_base_model_id.submit(
|
| 91 |
fn=model.set_base_model,
|
app_canny.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,62 +17,36 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
-
num_samples = gr.Slider(
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
value=DEFAULT_NUM_IMAGES,
|
| 22 |
-
step=1)
|
| 23 |
image_resolution = gr.Slider(
|
| 24 |
-
label=
|
| 25 |
minimum=256,
|
| 26 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 27 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 28 |
-
step=256
|
|
|
|
| 29 |
canny_low_threshold = gr.Slider(
|
| 30 |
-
label=
|
| 31 |
-
|
| 32 |
-
maximum=255,
|
| 33 |
-
value=100,
|
| 34 |
-
step=1)
|
| 35 |
canny_high_threshold = gr.Slider(
|
| 36 |
-
label=
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
maximum=100,
|
| 44 |
-
value=20,
|
| 45 |
-
step=1)
|
| 46 |
-
guidance_scale = gr.Slider(label='Guidance scale',
|
| 47 |
-
minimum=0.1,
|
| 48 |
-
maximum=30.0,
|
| 49 |
-
value=9.0,
|
| 50 |
-
step=0.1)
|
| 51 |
-
seed = gr.Slider(label='Seed',
|
| 52 |
-
minimum=0,
|
| 53 |
-
maximum=MAX_SEED,
|
| 54 |
-
step=1,
|
| 55 |
-
value=0)
|
| 56 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 57 |
-
value=True)
|
| 58 |
-
a_prompt = gr.Textbox(
|
| 59 |
-
label='Additional prompt',
|
| 60 |
-
value='best quality, extremely detailed')
|
| 61 |
n_prompt = gr.Textbox(
|
| 62 |
-
label=
|
| 63 |
-
value=
|
| 64 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 65 |
)
|
| 66 |
with gr.Column():
|
| 67 |
-
result = gr.Gallery(label=
|
| 68 |
-
show_label=False,
|
| 69 |
-
columns=2,
|
| 70 |
-
object_fit='scale-down')
|
| 71 |
inputs = [
|
| 72 |
image,
|
| 73 |
prompt,
|
|
@@ -103,13 +82,14 @@ def create_demo(process):
|
|
| 103 |
fn=process,
|
| 104 |
inputs=inputs,
|
| 105 |
outputs=result,
|
| 106 |
-
api_name=
|
| 107 |
)
|
| 108 |
return demo
|
| 109 |
|
| 110 |
|
| 111 |
-
if __name__ ==
|
| 112 |
from model import Model
|
| 113 |
-
|
|
|
|
| 114 |
demo = create_demo(model.process_canny)
|
| 115 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
+
num_samples = gr.Slider(
|
| 24 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 25 |
+
)
|
|
|
|
|
|
|
| 26 |
image_resolution = gr.Slider(
|
| 27 |
+
label="Image resolution",
|
| 28 |
minimum=256,
|
| 29 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 30 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 31 |
+
step=256,
|
| 32 |
+
)
|
| 33 |
canny_low_threshold = gr.Slider(
|
| 34 |
+
label="Canny low threshold", minimum=1, maximum=255, value=100, step=1
|
| 35 |
+
)
|
|
|
|
|
|
|
|
|
|
| 36 |
canny_high_threshold = gr.Slider(
|
| 37 |
+
label="Canny high threshold", minimum=1, maximum=255, value=200, step=1
|
| 38 |
+
)
|
| 39 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 40 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 41 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 42 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 43 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
n_prompt = gr.Textbox(
|
| 45 |
+
label="Negative prompt",
|
| 46 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 47 |
)
|
| 48 |
with gr.Column():
|
| 49 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 50 |
inputs = [
|
| 51 |
image,
|
| 52 |
prompt,
|
|
|
|
| 82 |
fn=process,
|
| 83 |
inputs=inputs,
|
| 84 |
outputs=result,
|
| 85 |
+
api_name="canny",
|
| 86 |
)
|
| 87 |
return demo
|
| 88 |
|
| 89 |
|
| 90 |
+
if __name__ == "__main__":
|
| 91 |
from model import Model
|
| 92 |
+
|
| 93 |
+
model = Model(task_name="Canny")
|
| 94 |
demo = create_demo(model.process_canny)
|
| 95 |
demo.queue().launch()
|
app_depth.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,61 +17,36 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
preprocessor_name = gr.Radio(
|
| 19 |
-
label=
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
value=
|
| 23 |
-
|
| 24 |
-
minimum=1,
|
| 25 |
-
maximum=MAX_NUM_IMAGES,
|
| 26 |
-
value=DEFAULT_NUM_IMAGES,
|
| 27 |
-
step=1)
|
| 28 |
image_resolution = gr.Slider(
|
| 29 |
-
label=
|
| 30 |
minimum=256,
|
| 31 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 32 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 33 |
-
step=256
|
|
|
|
| 34 |
preprocess_resolution = gr.Slider(
|
| 35 |
-
label=
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
maximum=100,
|
| 43 |
-
value=20,
|
| 44 |
-
step=1)
|
| 45 |
-
guidance_scale = gr.Slider(label='Guidance scale',
|
| 46 |
-
minimum=0.1,
|
| 47 |
-
maximum=30.0,
|
| 48 |
-
value=9.0,
|
| 49 |
-
step=0.1)
|
| 50 |
-
seed = gr.Slider(label='Seed',
|
| 51 |
-
minimum=0,
|
| 52 |
-
maximum=MAX_SEED,
|
| 53 |
-
step=1,
|
| 54 |
-
value=0)
|
| 55 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 56 |
-
value=True)
|
| 57 |
-
a_prompt = gr.Textbox(
|
| 58 |
-
label='Additional prompt',
|
| 59 |
-
value='best quality, extremely detailed')
|
| 60 |
n_prompt = gr.Textbox(
|
| 61 |
-
label=
|
| 62 |
-
value=
|
| 63 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 64 |
)
|
| 65 |
with gr.Column():
|
| 66 |
-
result = gr.Gallery(label=
|
| 67 |
-
show_label=False,
|
| 68 |
-
columns=2,
|
| 69 |
-
object_fit='scale-down')
|
| 70 |
inputs = [
|
| 71 |
image,
|
| 72 |
prompt,
|
|
@@ -102,13 +82,14 @@ def create_demo(process):
|
|
| 102 |
fn=process,
|
| 103 |
inputs=inputs,
|
| 104 |
outputs=result,
|
| 105 |
-
api_name=
|
| 106 |
)
|
| 107 |
return demo
|
| 108 |
|
| 109 |
|
| 110 |
-
if __name__ ==
|
| 111 |
from model import Model
|
| 112 |
-
|
|
|
|
| 113 |
demo = create_demo(model.process_depth)
|
| 114 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
preprocessor_name = gr.Radio(
|
| 24 |
+
label="Preprocessor", choices=["Midas", "DPT", "None"], type="value", value="DPT"
|
| 25 |
+
)
|
| 26 |
+
num_samples = gr.Slider(
|
| 27 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 28 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
image_resolution = gr.Slider(
|
| 30 |
+
label="Image resolution",
|
| 31 |
minimum=256,
|
| 32 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 33 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 34 |
+
step=256,
|
| 35 |
+
)
|
| 36 |
preprocess_resolution = gr.Slider(
|
| 37 |
+
label="Preprocess resolution", minimum=128, maximum=512, value=384, step=1
|
| 38 |
+
)
|
| 39 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 40 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 41 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 42 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 43 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
n_prompt = gr.Textbox(
|
| 45 |
+
label="Negative prompt",
|
| 46 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 47 |
)
|
| 48 |
with gr.Column():
|
| 49 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 50 |
inputs = [
|
| 51 |
image,
|
| 52 |
prompt,
|
|
|
|
| 82 |
fn=process,
|
| 83 |
inputs=inputs,
|
| 84 |
outputs=result,
|
| 85 |
+
api_name="depth",
|
| 86 |
)
|
| 87 |
return demo
|
| 88 |
|
| 89 |
|
| 90 |
+
if __name__ == "__main__":
|
| 91 |
from model import Model
|
| 92 |
+
|
| 93 |
+
model = Model(task_name="depth")
|
| 94 |
demo = create_demo(model.process_depth)
|
| 95 |
demo.queue().launch()
|
app_ip2p.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,50 +17,30 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
-
num_samples = gr.Slider(
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
value=DEFAULT_NUM_IMAGES,
|
| 22 |
-
step=1)
|
| 23 |
image_resolution = gr.Slider(
|
| 24 |
-
label=
|
| 25 |
minimum=256,
|
| 26 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 27 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 28 |
-
step=256
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
minimum=0.1,
|
| 36 |
-
maximum=30.0,
|
| 37 |
-
value=9.0,
|
| 38 |
-
step=0.1)
|
| 39 |
-
seed = gr.Slider(label='Seed',
|
| 40 |
-
minimum=0,
|
| 41 |
-
maximum=MAX_SEED,
|
| 42 |
-
step=1,
|
| 43 |
-
value=0)
|
| 44 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 45 |
-
value=True)
|
| 46 |
-
a_prompt = gr.Textbox(
|
| 47 |
-
label='Additional prompt',
|
| 48 |
-
value='best quality, extremely detailed')
|
| 49 |
n_prompt = gr.Textbox(
|
| 50 |
-
label=
|
| 51 |
-
value=
|
| 52 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 53 |
)
|
| 54 |
with gr.Column():
|
| 55 |
-
result = gr.Gallery(label=
|
| 56 |
-
show_label=False,
|
| 57 |
-
columns=2,
|
| 58 |
-
object_fit='scale-down')
|
| 59 |
inputs = [
|
| 60 |
image,
|
| 61 |
prompt,
|
|
@@ -89,13 +74,14 @@ def create_demo(process):
|
|
| 89 |
fn=process,
|
| 90 |
inputs=inputs,
|
| 91 |
outputs=result,
|
| 92 |
-
api_name=
|
| 93 |
)
|
| 94 |
return demo
|
| 95 |
|
| 96 |
|
| 97 |
-
if __name__ ==
|
| 98 |
from model import Model
|
| 99 |
-
|
|
|
|
| 100 |
demo = create_demo(model.process_ip2p)
|
| 101 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
+
num_samples = gr.Slider(
|
| 24 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 25 |
+
)
|
|
|
|
|
|
|
| 26 |
image_resolution = gr.Slider(
|
| 27 |
+
label="Image resolution",
|
| 28 |
minimum=256,
|
| 29 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 30 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 31 |
+
step=256,
|
| 32 |
+
)
|
| 33 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 34 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 35 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 36 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 37 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
n_prompt = gr.Textbox(
|
| 39 |
+
label="Negative prompt",
|
| 40 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 41 |
)
|
| 42 |
with gr.Column():
|
| 43 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 44 |
inputs = [
|
| 45 |
image,
|
| 46 |
prompt,
|
|
|
|
| 74 |
fn=process,
|
| 75 |
inputs=inputs,
|
| 76 |
outputs=result,
|
| 77 |
+
api_name="ip2p",
|
| 78 |
)
|
| 79 |
return demo
|
| 80 |
|
| 81 |
|
| 82 |
+
if __name__ == "__main__":
|
| 83 |
from model import Model
|
| 84 |
+
|
| 85 |
+
model = Model(task_name="ip2p")
|
| 86 |
demo = create_demo(model.process_ip2p)
|
| 87 |
demo.queue().launch()
|
app_lineart.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,70 +17,46 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
preprocessor_name = gr.Radio(
|
| 19 |
-
label=
|
| 20 |
choices=[
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
],
|
| 27 |
-
type=
|
| 28 |
-
value=
|
| 29 |
-
info=
|
| 30 |
-
|
|
|
|
|
|
|
| 31 |
)
|
| 32 |
-
num_samples = gr.Slider(label='Number of images',
|
| 33 |
-
minimum=1,
|
| 34 |
-
maximum=MAX_NUM_IMAGES,
|
| 35 |
-
value=DEFAULT_NUM_IMAGES,
|
| 36 |
-
step=1)
|
| 37 |
image_resolution = gr.Slider(
|
| 38 |
-
label=
|
| 39 |
minimum=256,
|
| 40 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 41 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 42 |
-
step=256
|
|
|
|
| 43 |
preprocess_resolution = gr.Slider(
|
| 44 |
-
label=
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
maximum=100,
|
| 52 |
-
value=20,
|
| 53 |
-
step=1)
|
| 54 |
-
guidance_scale = gr.Slider(label='Guidance scale',
|
| 55 |
-
minimum=0.1,
|
| 56 |
-
maximum=30.0,
|
| 57 |
-
value=9.0,
|
| 58 |
-
step=0.1)
|
| 59 |
-
seed = gr.Slider(label='Seed',
|
| 60 |
-
minimum=0,
|
| 61 |
-
maximum=MAX_SEED,
|
| 62 |
-
step=1,
|
| 63 |
-
value=0)
|
| 64 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 65 |
-
value=True)
|
| 66 |
-
a_prompt = gr.Textbox(
|
| 67 |
-
label='Additional prompt',
|
| 68 |
-
value='best quality, extremely detailed')
|
| 69 |
n_prompt = gr.Textbox(
|
| 70 |
-
label=
|
| 71 |
-
value=
|
| 72 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 73 |
)
|
| 74 |
with gr.Column():
|
| 75 |
-
result = gr.Gallery(label=
|
| 76 |
-
show_label=False,
|
| 77 |
-
columns=2,
|
| 78 |
-
object_fit='scale-down')
|
| 79 |
inputs = [
|
| 80 |
image,
|
| 81 |
prompt,
|
|
@@ -111,13 +92,14 @@ def create_demo(process):
|
|
| 111 |
fn=process,
|
| 112 |
inputs=inputs,
|
| 113 |
outputs=result,
|
| 114 |
-
api_name=
|
| 115 |
)
|
| 116 |
return demo
|
| 117 |
|
| 118 |
|
| 119 |
-
if __name__ ==
|
| 120 |
from model import Model
|
| 121 |
-
|
|
|
|
| 122 |
demo = create_demo(model.process_lineart)
|
| 123 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
preprocessor_name = gr.Radio(
|
| 24 |
+
label="Preprocessor",
|
| 25 |
choices=[
|
| 26 |
+
"Lineart",
|
| 27 |
+
"Lineart coarse",
|
| 28 |
+
"None",
|
| 29 |
+
"Lineart (anime)",
|
| 30 |
+
"None (anime)",
|
| 31 |
],
|
| 32 |
+
type="value",
|
| 33 |
+
value="Lineart",
|
| 34 |
+
info='Note that "Lineart (anime)" and "None (anime)" are for anime base models like Anything-v3.',
|
| 35 |
+
)
|
| 36 |
+
num_samples = gr.Slider(
|
| 37 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 38 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
image_resolution = gr.Slider(
|
| 40 |
+
label="Image resolution",
|
| 41 |
minimum=256,
|
| 42 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 43 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 44 |
+
step=256,
|
| 45 |
+
)
|
| 46 |
preprocess_resolution = gr.Slider(
|
| 47 |
+
label="Preprocess resolution", minimum=128, maximum=512, value=512, step=1
|
| 48 |
+
)
|
| 49 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 50 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 51 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 52 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 53 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
n_prompt = gr.Textbox(
|
| 55 |
+
label="Negative prompt",
|
| 56 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 57 |
)
|
| 58 |
with gr.Column():
|
| 59 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 60 |
inputs = [
|
| 61 |
image,
|
| 62 |
prompt,
|
|
|
|
| 92 |
fn=process,
|
| 93 |
inputs=inputs,
|
| 94 |
outputs=result,
|
| 95 |
+
api_name="lineart",
|
| 96 |
)
|
| 97 |
return demo
|
| 98 |
|
| 99 |
|
| 100 |
+
if __name__ == "__main__":
|
| 101 |
from model import Model
|
| 102 |
+
|
| 103 |
+
model = Model(task_name="lineart")
|
| 104 |
demo = create_demo(model.process_lineart)
|
| 105 |
demo.queue().launch()
|
app_mlsd.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,68 +17,39 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
-
num_samples = gr.Slider(
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
value=DEFAULT_NUM_IMAGES,
|
| 22 |
-
step=1)
|
| 23 |
image_resolution = gr.Slider(
|
| 24 |
-
label=
|
| 25 |
minimum=256,
|
| 26 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 27 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 28 |
-
step=256
|
|
|
|
| 29 |
preprocess_resolution = gr.Slider(
|
| 30 |
-
label=
|
| 31 |
-
|
| 32 |
-
maximum=512,
|
| 33 |
-
value=512,
|
| 34 |
-
step=1)
|
| 35 |
mlsd_value_threshold = gr.Slider(
|
| 36 |
-
label=
|
| 37 |
-
|
| 38 |
-
maximum=2.0,
|
| 39 |
-
value=0.1,
|
| 40 |
-
step=0.01)
|
| 41 |
mlsd_distance_threshold = gr.Slider(
|
| 42 |
-
label=
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
maximum=100,
|
| 50 |
-
value=20,
|
| 51 |
-
step=1)
|
| 52 |
-
guidance_scale = gr.Slider(label='Guidance scale',
|
| 53 |
-
minimum=0.1,
|
| 54 |
-
maximum=30.0,
|
| 55 |
-
value=9.0,
|
| 56 |
-
step=0.1)
|
| 57 |
-
seed = gr.Slider(label='Seed',
|
| 58 |
-
minimum=0,
|
| 59 |
-
maximum=MAX_SEED,
|
| 60 |
-
step=1,
|
| 61 |
-
value=0)
|
| 62 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 63 |
-
value=True)
|
| 64 |
-
a_prompt = gr.Textbox(
|
| 65 |
-
label='Additional prompt',
|
| 66 |
-
value='best quality, extremely detailed')
|
| 67 |
n_prompt = gr.Textbox(
|
| 68 |
-
label=
|
| 69 |
-
value=
|
| 70 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 71 |
)
|
| 72 |
with gr.Column():
|
| 73 |
-
result = gr.Gallery(label=
|
| 74 |
-
show_label=False,
|
| 75 |
-
columns=2,
|
| 76 |
-
object_fit='scale-down')
|
| 77 |
inputs = [
|
| 78 |
image,
|
| 79 |
prompt,
|
|
@@ -110,13 +86,14 @@ def create_demo(process):
|
|
| 110 |
fn=process,
|
| 111 |
inputs=inputs,
|
| 112 |
outputs=result,
|
| 113 |
-
api_name=
|
| 114 |
)
|
| 115 |
return demo
|
| 116 |
|
| 117 |
|
| 118 |
-
if __name__ ==
|
| 119 |
from model import Model
|
| 120 |
-
|
|
|
|
| 121 |
demo = create_demo(model.process_mlsd)
|
| 122 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
+
num_samples = gr.Slider(
|
| 24 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 25 |
+
)
|
|
|
|
|
|
|
| 26 |
image_resolution = gr.Slider(
|
| 27 |
+
label="Image resolution",
|
| 28 |
minimum=256,
|
| 29 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 30 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 31 |
+
step=256,
|
| 32 |
+
)
|
| 33 |
preprocess_resolution = gr.Slider(
|
| 34 |
+
label="Preprocess resolution", minimum=128, maximum=512, value=512, step=1
|
| 35 |
+
)
|
|
|
|
|
|
|
|
|
|
| 36 |
mlsd_value_threshold = gr.Slider(
|
| 37 |
+
label="Hough value threshold (MLSD)", minimum=0.01, maximum=2.0, value=0.1, step=0.01
|
| 38 |
+
)
|
|
|
|
|
|
|
|
|
|
| 39 |
mlsd_distance_threshold = gr.Slider(
|
| 40 |
+
label="Hough distance threshold (MLSD)", minimum=0.01, maximum=20.0, value=0.1, step=0.01
|
| 41 |
+
)
|
| 42 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 43 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 44 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 45 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 46 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
n_prompt = gr.Textbox(
|
| 48 |
+
label="Negative prompt",
|
| 49 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 50 |
)
|
| 51 |
with gr.Column():
|
| 52 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 53 |
inputs = [
|
| 54 |
image,
|
| 55 |
prompt,
|
|
|
|
| 86 |
fn=process,
|
| 87 |
inputs=inputs,
|
| 88 |
outputs=result,
|
| 89 |
+
api_name="mlsd",
|
| 90 |
)
|
| 91 |
return demo
|
| 92 |
|
| 93 |
|
| 94 |
+
if __name__ == "__main__":
|
| 95 |
from model import Model
|
| 96 |
+
|
| 97 |
+
model = Model(task_name="MLSD")
|
| 98 |
demo = create_demo(model.process_mlsd)
|
| 99 |
demo.queue().launch()
|
app_normal.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,60 +17,36 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
-
preprocessor_name = gr.Radio(
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
maximum=MAX_NUM_IMAGES,
|
| 25 |
-
value=DEFAULT_NUM_IMAGES,
|
| 26 |
-
step=1)
|
| 27 |
image_resolution = gr.Slider(
|
| 28 |
-
label=
|
| 29 |
minimum=256,
|
| 30 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 31 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 32 |
-
step=256
|
|
|
|
| 33 |
preprocess_resolution = gr.Slider(
|
| 34 |
-
label=
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
maximum=100,
|
| 42 |
-
value=20,
|
| 43 |
-
step=1)
|
| 44 |
-
guidance_scale = gr.Slider(label='Guidance scale',
|
| 45 |
-
minimum=0.1,
|
| 46 |
-
maximum=30.0,
|
| 47 |
-
value=9.0,
|
| 48 |
-
step=0.1)
|
| 49 |
-
seed = gr.Slider(label='Seed',
|
| 50 |
-
minimum=0,
|
| 51 |
-
maximum=MAX_SEED,
|
| 52 |
-
step=1,
|
| 53 |
-
value=0)
|
| 54 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 55 |
-
value=True)
|
| 56 |
-
a_prompt = gr.Textbox(
|
| 57 |
-
label='Additional prompt',
|
| 58 |
-
value='best quality, extremely detailed')
|
| 59 |
n_prompt = gr.Textbox(
|
| 60 |
-
label=
|
| 61 |
-
value=
|
| 62 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 63 |
)
|
| 64 |
with gr.Column():
|
| 65 |
-
result = gr.Gallery(label=
|
| 66 |
-
show_label=False,
|
| 67 |
-
columns=2,
|
| 68 |
-
object_fit='scale-down')
|
| 69 |
inputs = [
|
| 70 |
image,
|
| 71 |
prompt,
|
|
@@ -101,13 +82,14 @@ def create_demo(process):
|
|
| 101 |
fn=process,
|
| 102 |
inputs=inputs,
|
| 103 |
outputs=result,
|
| 104 |
-
api_name=
|
| 105 |
)
|
| 106 |
return demo
|
| 107 |
|
| 108 |
|
| 109 |
-
if __name__ ==
|
| 110 |
from model import Model
|
| 111 |
-
|
|
|
|
| 112 |
demo = create_demo(model.process_normal)
|
| 113 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
+
preprocessor_name = gr.Radio(
|
| 24 |
+
label="Preprocessor", choices=["NormalBae", "None"], type="value", value="NormalBae"
|
| 25 |
+
)
|
| 26 |
+
num_samples = gr.Slider(
|
| 27 |
+
label="Images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 28 |
+
)
|
|
|
|
|
|
|
|
|
|
| 29 |
image_resolution = gr.Slider(
|
| 30 |
+
label="Image resolution",
|
| 31 |
minimum=256,
|
| 32 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 33 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 34 |
+
step=256,
|
| 35 |
+
)
|
| 36 |
preprocess_resolution = gr.Slider(
|
| 37 |
+
label="Preprocess resolution", minimum=128, maximum=512, value=384, step=1
|
| 38 |
+
)
|
| 39 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 40 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 41 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 42 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 43 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
n_prompt = gr.Textbox(
|
| 45 |
+
label="Negative prompt",
|
| 46 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 47 |
)
|
| 48 |
with gr.Column():
|
| 49 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 50 |
inputs = [
|
| 51 |
image,
|
| 52 |
prompt,
|
|
|
|
| 82 |
fn=process,
|
| 83 |
inputs=inputs,
|
| 84 |
outputs=result,
|
| 85 |
+
api_name="normal",
|
| 86 |
)
|
| 87 |
return demo
|
| 88 |
|
| 89 |
|
| 90 |
+
if __name__ == "__main__":
|
| 91 |
from model import Model
|
| 92 |
+
|
| 93 |
+
model = Model(task_name="NormalBae")
|
| 94 |
demo = create_demo(model.process_normal)
|
| 95 |
demo.queue().launch()
|
app_openpose.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,60 +17,36 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(label=
|
| 17 |
-
with gr.Accordion(
|
| 18 |
-
preprocessor_name = gr.Radio(
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
maximum=MAX_NUM_IMAGES,
|
| 25 |
-
value=DEFAULT_NUM_IMAGES,
|
| 26 |
-
step=1)
|
| 27 |
image_resolution = gr.Slider(
|
| 28 |
-
label=
|
| 29 |
minimum=256,
|
| 30 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 31 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 32 |
-
step=256
|
|
|
|
| 33 |
preprocess_resolution = gr.Slider(
|
| 34 |
-
label=
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
maximum=100,
|
| 42 |
-
value=20,
|
| 43 |
-
step=1)
|
| 44 |
-
guidance_scale = gr.Slider(label='Guidance scale',
|
| 45 |
-
minimum=0.1,
|
| 46 |
-
maximum=30.0,
|
| 47 |
-
value=9.0,
|
| 48 |
-
step=0.1)
|
| 49 |
-
seed = gr.Slider(label='Seed',
|
| 50 |
-
minimum=0,
|
| 51 |
-
maximum=MAX_SEED,
|
| 52 |
-
step=1,
|
| 53 |
-
value=0)
|
| 54 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 55 |
-
value=True)
|
| 56 |
-
a_prompt = gr.Textbox(
|
| 57 |
-
label='Additional prompt',
|
| 58 |
-
value='best quality, extremely detailed')
|
| 59 |
n_prompt = gr.Textbox(
|
| 60 |
-
label=
|
| 61 |
-
value=
|
| 62 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 63 |
)
|
| 64 |
with gr.Column():
|
| 65 |
-
result = gr.Gallery(label=
|
| 66 |
-
show_label=False,
|
| 67 |
-
columns=2,
|
| 68 |
-
object_fit='scale-down')
|
| 69 |
inputs = [
|
| 70 |
image,
|
| 71 |
prompt,
|
|
@@ -101,13 +82,14 @@ def create_demo(process):
|
|
| 101 |
fn=process,
|
| 102 |
inputs=inputs,
|
| 103 |
outputs=result,
|
| 104 |
-
api_name=
|
| 105 |
)
|
| 106 |
return demo
|
| 107 |
|
| 108 |
|
| 109 |
-
if __name__ ==
|
| 110 |
from model import Model
|
| 111 |
-
|
|
|
|
| 112 |
demo = create_demo(model.process_openpose)
|
| 113 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button(label="Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
+
preprocessor_name = gr.Radio(
|
| 24 |
+
label="Preprocessor", choices=["Openpose", "None"], type="value", value="Openpose"
|
| 25 |
+
)
|
| 26 |
+
num_samples = gr.Slider(
|
| 27 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 28 |
+
)
|
|
|
|
|
|
|
|
|
|
| 29 |
image_resolution = gr.Slider(
|
| 30 |
+
label="Image resolution",
|
| 31 |
minimum=256,
|
| 32 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 33 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 34 |
+
step=256,
|
| 35 |
+
)
|
| 36 |
preprocess_resolution = gr.Slider(
|
| 37 |
+
label="Preprocess resolution", minimum=128, maximum=512, value=512, step=1
|
| 38 |
+
)
|
| 39 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 40 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 41 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 42 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 43 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
n_prompt = gr.Textbox(
|
| 45 |
+
label="Negative prompt",
|
| 46 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 47 |
)
|
| 48 |
with gr.Column():
|
| 49 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 50 |
inputs = [
|
| 51 |
image,
|
| 52 |
prompt,
|
|
|
|
| 82 |
fn=process,
|
| 83 |
inputs=inputs,
|
| 84 |
outputs=result,
|
| 85 |
+
api_name="openpose",
|
| 86 |
)
|
| 87 |
return demo
|
| 88 |
|
| 89 |
|
| 90 |
+
if __name__ == "__main__":
|
| 91 |
from model import Model
|
| 92 |
+
|
| 93 |
+
model = Model(task_name="Openpose")
|
| 94 |
demo = create_demo(model.process_openpose)
|
| 95 |
demo.queue().launch()
|
app_scribble.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,61 +17,36 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
preprocessor_name = gr.Radio(
|
| 19 |
-
label=
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
value=
|
| 23 |
-
|
| 24 |
-
minimum=1,
|
| 25 |
-
maximum=MAX_NUM_IMAGES,
|
| 26 |
-
value=DEFAULT_NUM_IMAGES,
|
| 27 |
-
step=1)
|
| 28 |
image_resolution = gr.Slider(
|
| 29 |
-
label=
|
| 30 |
minimum=256,
|
| 31 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 32 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 33 |
-
step=256
|
|
|
|
| 34 |
preprocess_resolution = gr.Slider(
|
| 35 |
-
label=
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
maximum=100,
|
| 43 |
-
value=20,
|
| 44 |
-
step=1)
|
| 45 |
-
guidance_scale = gr.Slider(label='Guidance scale',
|
| 46 |
-
minimum=0.1,
|
| 47 |
-
maximum=30.0,
|
| 48 |
-
value=9.0,
|
| 49 |
-
step=0.1)
|
| 50 |
-
seed = gr.Slider(label='Seed',
|
| 51 |
-
minimum=0,
|
| 52 |
-
maximum=MAX_SEED,
|
| 53 |
-
step=1,
|
| 54 |
-
value=0)
|
| 55 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 56 |
-
value=True)
|
| 57 |
-
a_prompt = gr.Textbox(
|
| 58 |
-
label='Additional prompt',
|
| 59 |
-
value='best quality, extremely detailed')
|
| 60 |
n_prompt = gr.Textbox(
|
| 61 |
-
label=
|
| 62 |
-
value=
|
| 63 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 64 |
)
|
| 65 |
with gr.Column():
|
| 66 |
-
result = gr.Gallery(label=
|
| 67 |
-
show_label=False,
|
| 68 |
-
columns=2,
|
| 69 |
-
object_fit='scale-down')
|
| 70 |
inputs = [
|
| 71 |
image,
|
| 72 |
prompt,
|
|
@@ -102,13 +82,14 @@ def create_demo(process):
|
|
| 102 |
fn=process,
|
| 103 |
inputs=inputs,
|
| 104 |
outputs=result,
|
| 105 |
-
api_name=
|
| 106 |
)
|
| 107 |
return demo
|
| 108 |
|
| 109 |
|
| 110 |
-
if __name__ ==
|
| 111 |
from model import Model
|
| 112 |
-
|
|
|
|
| 113 |
demo = create_demo(model.process_scribble)
|
| 114 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
preprocessor_name = gr.Radio(
|
| 24 |
+
label="Preprocessor", choices=["HED", "PidiNet", "None"], type="value", value="HED"
|
| 25 |
+
)
|
| 26 |
+
num_samples = gr.Slider(
|
| 27 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 28 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
image_resolution = gr.Slider(
|
| 30 |
+
label="Image resolution",
|
| 31 |
minimum=256,
|
| 32 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 33 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 34 |
+
step=256,
|
| 35 |
+
)
|
| 36 |
preprocess_resolution = gr.Slider(
|
| 37 |
+
label="Preprocess resolution", minimum=128, maximum=512, value=512, step=1
|
| 38 |
+
)
|
| 39 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 40 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 41 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 42 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 43 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
n_prompt = gr.Textbox(
|
| 45 |
+
label="Negative prompt",
|
| 46 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 47 |
)
|
| 48 |
with gr.Column():
|
| 49 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 50 |
inputs = [
|
| 51 |
image,
|
| 52 |
prompt,
|
|
|
|
| 82 |
fn=process,
|
| 83 |
inputs=inputs,
|
| 84 |
outputs=result,
|
| 85 |
+
api_name="scribble",
|
| 86 |
)
|
| 87 |
return demo
|
| 88 |
|
| 89 |
|
| 90 |
+
if __name__ == "__main__":
|
| 91 |
from model import Model
|
| 92 |
+
|
| 93 |
+
model = Model(task_name="scribble")
|
| 94 |
demo = create_demo(model.process_scribble)
|
| 95 |
demo.queue().launch()
|
app_scribble_interactive.py
CHANGED
|
@@ -3,8 +3,13 @@
|
|
| 3 |
import gradio as gr
|
| 4 |
import numpy as np
|
| 5 |
|
| 6 |
-
from settings import (
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
from utils import randomize_seed_fn
|
| 9 |
|
| 10 |
|
|
@@ -16,62 +21,46 @@ def create_demo(process):
|
|
| 16 |
with gr.Blocks() as demo:
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
-
canvas_width = gr.Slider(
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
|
|
|
|
|
|
| 39 |
image_resolution = gr.Slider(
|
| 40 |
-
label=
|
| 41 |
minimum=256,
|
| 42 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 43 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 44 |
-
step=256
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
minimum=0.1,
|
| 52 |
-
maximum=30.0,
|
| 53 |
-
value=9.0,
|
| 54 |
-
step=0.1)
|
| 55 |
-
seed = gr.Slider(label='Seed',
|
| 56 |
-
minimum=0,
|
| 57 |
-
maximum=MAX_SEED,
|
| 58 |
-
step=1,
|
| 59 |
-
value=0)
|
| 60 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 61 |
-
value=True)
|
| 62 |
-
a_prompt = gr.Textbox(
|
| 63 |
-
label='Additional prompt',
|
| 64 |
-
value='best quality, extremely detailed')
|
| 65 |
n_prompt = gr.Textbox(
|
| 66 |
-
label=
|
| 67 |
-
value=
|
| 68 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 69 |
)
|
| 70 |
with gr.Column():
|
| 71 |
-
result = gr.Gallery(label=
|
| 72 |
-
show_label=False,
|
| 73 |
-
columns=2,
|
| 74 |
-
object_fit='scale-down')
|
| 75 |
|
| 76 |
create_button.click(
|
| 77 |
fn=create_canvas,
|
|
@@ -118,8 +107,9 @@ def create_demo(process):
|
|
| 118 |
return demo
|
| 119 |
|
| 120 |
|
| 121 |
-
if __name__ ==
|
| 122 |
from model import Model
|
| 123 |
-
|
|
|
|
| 124 |
demo = create_demo(model.process_scribble_interactive)
|
| 125 |
demo.queue().launch()
|
|
|
|
| 3 |
import gradio as gr
|
| 4 |
import numpy as np
|
| 5 |
|
| 6 |
+
from settings import (
|
| 7 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 8 |
+
DEFAULT_NUM_IMAGES,
|
| 9 |
+
MAX_IMAGE_RESOLUTION,
|
| 10 |
+
MAX_NUM_IMAGES,
|
| 11 |
+
MAX_SEED,
|
| 12 |
+
)
|
| 13 |
from utils import randomize_seed_fn
|
| 14 |
|
| 15 |
|
|
|
|
| 21 |
with gr.Blocks() as demo:
|
| 22 |
with gr.Row():
|
| 23 |
with gr.Column():
|
| 24 |
+
canvas_width = gr.Slider(
|
| 25 |
+
label="Canvas width",
|
| 26 |
+
minimum=256,
|
| 27 |
+
maximum=MAX_IMAGE_RESOLUTION,
|
| 28 |
+
value=DEFAULT_IMAGE_RESOLUTION,
|
| 29 |
+
step=1,
|
| 30 |
+
)
|
| 31 |
+
canvas_height = gr.Slider(
|
| 32 |
+
label="Canvas height",
|
| 33 |
+
minimum=256,
|
| 34 |
+
maximum=MAX_IMAGE_RESOLUTION,
|
| 35 |
+
value=DEFAULT_IMAGE_RESOLUTION,
|
| 36 |
+
step=1,
|
| 37 |
+
)
|
| 38 |
+
create_button = gr.Button("Open drawing canvas!")
|
| 39 |
+
image = gr.Image(tool="sketch", brush_radius=10)
|
| 40 |
+
prompt = gr.Textbox(label="Prompt")
|
| 41 |
+
run_button = gr.Button("Run")
|
| 42 |
+
with gr.Accordion("Advanced options", open=False):
|
| 43 |
+
num_samples = gr.Slider(
|
| 44 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 45 |
+
)
|
| 46 |
image_resolution = gr.Slider(
|
| 47 |
+
label="Image resolution",
|
| 48 |
minimum=256,
|
| 49 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 50 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 51 |
+
step=256,
|
| 52 |
+
)
|
| 53 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 54 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 55 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 56 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 57 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
n_prompt = gr.Textbox(
|
| 59 |
+
label="Negative prompt",
|
| 60 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 61 |
)
|
| 62 |
with gr.Column():
|
| 63 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 64 |
|
| 65 |
create_button.click(
|
| 66 |
fn=create_canvas,
|
|
|
|
| 107 |
return demo
|
| 108 |
|
| 109 |
|
| 110 |
+
if __name__ == "__main__":
|
| 111 |
from model import Model
|
| 112 |
+
|
| 113 |
+
model = Model(task_name="scribble")
|
| 114 |
demo = create_demo(model.process_scribble_interactive)
|
| 115 |
demo.queue().launch()
|
app_segmentation.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,60 +17,36 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
-
preprocessor_name = gr.Radio(
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
maximum=MAX_NUM_IMAGES,
|
| 25 |
-
value=DEFAULT_NUM_IMAGES,
|
| 26 |
-
step=1)
|
| 27 |
image_resolution = gr.Slider(
|
| 28 |
-
label=
|
| 29 |
minimum=256,
|
| 30 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 31 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 32 |
-
step=256
|
|
|
|
| 33 |
preprocess_resolution = gr.Slider(
|
| 34 |
-
label=
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
maximum=100,
|
| 42 |
-
value=20,
|
| 43 |
-
step=1)
|
| 44 |
-
guidance_scale = gr.Slider(label='Guidance scale',
|
| 45 |
-
minimum=0.1,
|
| 46 |
-
maximum=30.0,
|
| 47 |
-
value=9.0,
|
| 48 |
-
step=0.1)
|
| 49 |
-
seed = gr.Slider(label='Seed',
|
| 50 |
-
minimum=0,
|
| 51 |
-
maximum=MAX_SEED,
|
| 52 |
-
step=1,
|
| 53 |
-
value=0)
|
| 54 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 55 |
-
value=True)
|
| 56 |
-
a_prompt = gr.Textbox(
|
| 57 |
-
label='Additional prompt',
|
| 58 |
-
value='best quality, extremely detailed')
|
| 59 |
n_prompt = gr.Textbox(
|
| 60 |
-
label=
|
| 61 |
-
value=
|
| 62 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 63 |
)
|
| 64 |
with gr.Column():
|
| 65 |
-
result = gr.Gallery(label=
|
| 66 |
-
show_label=False,
|
| 67 |
-
columns=2,
|
| 68 |
-
object_fit='scale-down')
|
| 69 |
inputs = [
|
| 70 |
image,
|
| 71 |
prompt,
|
|
@@ -101,13 +82,14 @@ def create_demo(process):
|
|
| 101 |
fn=process,
|
| 102 |
inputs=inputs,
|
| 103 |
outputs=result,
|
| 104 |
-
api_name=
|
| 105 |
)
|
| 106 |
return demo
|
| 107 |
|
| 108 |
|
| 109 |
-
if __name__ ==
|
| 110 |
from model import Model
|
| 111 |
-
|
|
|
|
| 112 |
demo = create_demo(model.process_segmentation)
|
| 113 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
+
preprocessor_name = gr.Radio(
|
| 24 |
+
label="Preprocessor", choices=["UPerNet", "None"], type="value", value="UPerNet"
|
| 25 |
+
)
|
| 26 |
+
num_samples = gr.Slider(
|
| 27 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 28 |
+
)
|
|
|
|
|
|
|
|
|
|
| 29 |
image_resolution = gr.Slider(
|
| 30 |
+
label="Image resolution",
|
| 31 |
minimum=256,
|
| 32 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 33 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 34 |
+
step=256,
|
| 35 |
+
)
|
| 36 |
preprocess_resolution = gr.Slider(
|
| 37 |
+
label="Preprocess resolution", minimum=128, maximum=512, value=512, step=1
|
| 38 |
+
)
|
| 39 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 40 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 41 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 42 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 43 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
n_prompt = gr.Textbox(
|
| 45 |
+
label="Negative prompt",
|
| 46 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 47 |
)
|
| 48 |
with gr.Column():
|
| 49 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 50 |
inputs = [
|
| 51 |
image,
|
| 52 |
prompt,
|
|
|
|
| 82 |
fn=process,
|
| 83 |
inputs=inputs,
|
| 84 |
outputs=result,
|
| 85 |
+
api_name="segmentation",
|
| 86 |
)
|
| 87 |
return demo
|
| 88 |
|
| 89 |
|
| 90 |
+
if __name__ == "__main__":
|
| 91 |
from model import Model
|
| 92 |
+
|
| 93 |
+
model = Model(task_name="segmentation")
|
| 94 |
demo = create_demo(model.process_segmentation)
|
| 95 |
demo.queue().launch()
|
app_shuffle.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,55 +17,33 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
preprocessor_name = gr.Radio(
|
| 19 |
-
label=
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
value=
|
| 23 |
-
|
| 24 |
-
minimum=1,
|
| 25 |
-
maximum=MAX_NUM_IMAGES,
|
| 26 |
-
value=DEFAULT_NUM_IMAGES,
|
| 27 |
-
step=1)
|
| 28 |
image_resolution = gr.Slider(
|
| 29 |
-
label=
|
| 30 |
minimum=256,
|
| 31 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 32 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 33 |
-
step=256
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
minimum=0.1,
|
| 41 |
-
maximum=30.0,
|
| 42 |
-
value=9.0,
|
| 43 |
-
step=0.1)
|
| 44 |
-
seed = gr.Slider(label='Seed',
|
| 45 |
-
minimum=0,
|
| 46 |
-
maximum=MAX_SEED,
|
| 47 |
-
step=1,
|
| 48 |
-
value=0)
|
| 49 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 50 |
-
value=True)
|
| 51 |
-
a_prompt = gr.Textbox(
|
| 52 |
-
label='Additional prompt',
|
| 53 |
-
value='best quality, extremely detailed')
|
| 54 |
n_prompt = gr.Textbox(
|
| 55 |
-
label=
|
| 56 |
-
value=
|
| 57 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 58 |
)
|
| 59 |
with gr.Column():
|
| 60 |
-
result = gr.Gallery(label=
|
| 61 |
-
show_label=False,
|
| 62 |
-
columns=2,
|
| 63 |
-
object_fit='scale-down')
|
| 64 |
inputs = [
|
| 65 |
image,
|
| 66 |
prompt,
|
|
@@ -95,13 +78,14 @@ def create_demo(process):
|
|
| 95 |
fn=process,
|
| 96 |
inputs=inputs,
|
| 97 |
outputs=result,
|
| 98 |
-
api_name=
|
| 99 |
)
|
| 100 |
return demo
|
| 101 |
|
| 102 |
|
| 103 |
-
if __name__ ==
|
| 104 |
from model import Model
|
| 105 |
-
|
|
|
|
| 106 |
demo = create_demo(model.process_shuffle)
|
| 107 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
preprocessor_name = gr.Radio(
|
| 24 |
+
label="Preprocessor", choices=["ContentShuffle", "None"], type="value", value="ContentShuffle"
|
| 25 |
+
)
|
| 26 |
+
num_samples = gr.Slider(
|
| 27 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 28 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
image_resolution = gr.Slider(
|
| 30 |
+
label="Image resolution",
|
| 31 |
minimum=256,
|
| 32 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 33 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 34 |
+
step=256,
|
| 35 |
+
)
|
| 36 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 37 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 38 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 39 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 40 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
n_prompt = gr.Textbox(
|
| 42 |
+
label="Negative prompt",
|
| 43 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 44 |
)
|
| 45 |
with gr.Column():
|
| 46 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 47 |
inputs = [
|
| 48 |
image,
|
| 49 |
prompt,
|
|
|
|
| 78 |
fn=process,
|
| 79 |
inputs=inputs,
|
| 80 |
outputs=result,
|
| 81 |
+
api_name="content-shuffle",
|
| 82 |
)
|
| 83 |
return demo
|
| 84 |
|
| 85 |
|
| 86 |
+
if __name__ == "__main__":
|
| 87 |
from model import Model
|
| 88 |
+
|
| 89 |
+
model = Model(task_name="shuffle")
|
| 90 |
demo = create_demo(model.process_shuffle)
|
| 91 |
demo.queue().launch()
|
app_softedge.py
CHANGED
|
@@ -2,8 +2,13 @@
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
-
from settings import (
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
from utils import randomize_seed_fn
|
| 8 |
|
| 9 |
|
|
@@ -12,66 +17,45 @@ def create_demo(process):
|
|
| 12 |
with gr.Row():
|
| 13 |
with gr.Column():
|
| 14 |
image = gr.Image()
|
| 15 |
-
prompt = gr.Textbox(label=
|
| 16 |
-
run_button = gr.Button(
|
| 17 |
-
with gr.Accordion(
|
| 18 |
-
preprocessor_name = gr.Radio(
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
image_resolution = gr.Slider(
|
| 34 |
-
label=
|
| 35 |
minimum=256,
|
| 36 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 37 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 38 |
-
step=256
|
|
|
|
| 39 |
preprocess_resolution = gr.Slider(
|
| 40 |
-
label=
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
maximum=100,
|
| 48 |
-
value=20,
|
| 49 |
-
step=1)
|
| 50 |
-
guidance_scale = gr.Slider(label='Guidance scale',
|
| 51 |
-
minimum=0.1,
|
| 52 |
-
maximum=30.0,
|
| 53 |
-
value=9.0,
|
| 54 |
-
step=0.1)
|
| 55 |
-
seed = gr.Slider(label='Seed',
|
| 56 |
-
minimum=0,
|
| 57 |
-
maximum=MAX_SEED,
|
| 58 |
-
step=1,
|
| 59 |
-
value=0)
|
| 60 |
-
randomize_seed = gr.Checkbox(label='Randomize seed',
|
| 61 |
-
value=True)
|
| 62 |
-
a_prompt = gr.Textbox(
|
| 63 |
-
label='Additional prompt',
|
| 64 |
-
value='best quality, extremely detailed')
|
| 65 |
n_prompt = gr.Textbox(
|
| 66 |
-
label=
|
| 67 |
-
value=
|
| 68 |
-
'longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality'
|
| 69 |
)
|
| 70 |
with gr.Column():
|
| 71 |
-
result = gr.Gallery(label=
|
| 72 |
-
show_label=False,
|
| 73 |
-
columns=2,
|
| 74 |
-
object_fit='scale-down')
|
| 75 |
inputs = [
|
| 76 |
image,
|
| 77 |
prompt,
|
|
@@ -107,13 +91,14 @@ def create_demo(process):
|
|
| 107 |
fn=process,
|
| 108 |
inputs=inputs,
|
| 109 |
outputs=result,
|
| 110 |
-
api_name=
|
| 111 |
)
|
| 112 |
return demo
|
| 113 |
|
| 114 |
|
| 115 |
-
if __name__ ==
|
| 116 |
from model import Model
|
| 117 |
-
|
|
|
|
| 118 |
demo = create_demo(model.process_softedge)
|
| 119 |
demo.queue().launch()
|
|
|
|
| 2 |
|
| 3 |
import gradio as gr
|
| 4 |
|
| 5 |
+
from settings import (
|
| 6 |
+
DEFAULT_IMAGE_RESOLUTION,
|
| 7 |
+
DEFAULT_NUM_IMAGES,
|
| 8 |
+
MAX_IMAGE_RESOLUTION,
|
| 9 |
+
MAX_NUM_IMAGES,
|
| 10 |
+
MAX_SEED,
|
| 11 |
+
)
|
| 12 |
from utils import randomize_seed_fn
|
| 13 |
|
| 14 |
|
|
|
|
| 17 |
with gr.Row():
|
| 18 |
with gr.Column():
|
| 19 |
image = gr.Image()
|
| 20 |
+
prompt = gr.Textbox(label="Prompt")
|
| 21 |
+
run_button = gr.Button("Run")
|
| 22 |
+
with gr.Accordion("Advanced options", open=False):
|
| 23 |
+
preprocessor_name = gr.Radio(
|
| 24 |
+
label="Preprocessor",
|
| 25 |
+
choices=[
|
| 26 |
+
"HED",
|
| 27 |
+
"PidiNet",
|
| 28 |
+
"HED safe",
|
| 29 |
+
"PidiNet safe",
|
| 30 |
+
"None",
|
| 31 |
+
],
|
| 32 |
+
type="value",
|
| 33 |
+
value="PidiNet",
|
| 34 |
+
)
|
| 35 |
+
num_samples = gr.Slider(
|
| 36 |
+
label="Number of images", minimum=1, maximum=MAX_NUM_IMAGES, value=DEFAULT_NUM_IMAGES, step=1
|
| 37 |
+
)
|
| 38 |
image_resolution = gr.Slider(
|
| 39 |
+
label="Image resolution",
|
| 40 |
minimum=256,
|
| 41 |
maximum=MAX_IMAGE_RESOLUTION,
|
| 42 |
value=DEFAULT_IMAGE_RESOLUTION,
|
| 43 |
+
step=256,
|
| 44 |
+
)
|
| 45 |
preprocess_resolution = gr.Slider(
|
| 46 |
+
label="Preprocess resolution", minimum=128, maximum=512, value=512, step=1
|
| 47 |
+
)
|
| 48 |
+
num_steps = gr.Slider(label="Number of steps", minimum=1, maximum=100, value=20, step=1)
|
| 49 |
+
guidance_scale = gr.Slider(label="Guidance scale", minimum=0.1, maximum=30.0, value=9.0, step=0.1)
|
| 50 |
+
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
|
| 51 |
+
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
|
| 52 |
+
a_prompt = gr.Textbox(label="Additional prompt", value="best quality, extremely detailed")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
n_prompt = gr.Textbox(
|
| 54 |
+
label="Negative prompt",
|
| 55 |
+
value="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
|
|
|
|
| 56 |
)
|
| 57 |
with gr.Column():
|
| 58 |
+
result = gr.Gallery(label="Output", show_label=False, columns=2, object_fit="scale-down")
|
|
|
|
|
|
|
|
|
|
| 59 |
inputs = [
|
| 60 |
image,
|
| 61 |
prompt,
|
|
|
|
| 91 |
fn=process,
|
| 92 |
inputs=inputs,
|
| 93 |
outputs=result,
|
| 94 |
+
api_name="softedge",
|
| 95 |
)
|
| 96 |
return demo
|
| 97 |
|
| 98 |
|
| 99 |
+
if __name__ == "__main__":
|
| 100 |
from model import Model
|
| 101 |
+
|
| 102 |
+
model = Model(task_name="softedge")
|
| 103 |
demo = create_demo(model.process_softedge)
|
| 104 |
demo.queue().launch()
|
depth_estimator.py
CHANGED
|
@@ -8,17 +8,17 @@ from cv_utils import resize_image
|
|
| 8 |
|
| 9 |
class DepthEstimator:
|
| 10 |
def __init__(self):
|
| 11 |
-
self.model = pipeline(
|
| 12 |
|
| 13 |
def __call__(self, image: np.ndarray, **kwargs) -> PIL.Image.Image:
|
| 14 |
-
detect_resolution = kwargs.pop(
|
| 15 |
-
image_resolution = kwargs.pop(
|
| 16 |
image = np.array(image)
|
| 17 |
image = HWC3(image)
|
| 18 |
image = resize_image(image, resolution=detect_resolution)
|
| 19 |
image = PIL.Image.fromarray(image)
|
| 20 |
image = self.model(image)
|
| 21 |
-
image = image[
|
| 22 |
image = np.array(image)
|
| 23 |
image = HWC3(image)
|
| 24 |
image = resize_image(image, resolution=image_resolution)
|
|
|
|
| 8 |
|
| 9 |
class DepthEstimator:
|
| 10 |
def __init__(self):
|
| 11 |
+
self.model = pipeline("depth-estimation")
|
| 12 |
|
| 13 |
def __call__(self, image: np.ndarray, **kwargs) -> PIL.Image.Image:
|
| 14 |
+
detect_resolution = kwargs.pop("detect_resolution", 512)
|
| 15 |
+
image_resolution = kwargs.pop("image_resolution", 512)
|
| 16 |
image = np.array(image)
|
| 17 |
image = HWC3(image)
|
| 18 |
image = resize_image(image, resolution=detect_resolution)
|
| 19 |
image = PIL.Image.fromarray(image)
|
| 20 |
image = self.model(image)
|
| 21 |
+
image = image["depth"]
|
| 22 |
image = np.array(image)
|
| 23 |
image = HWC3(image)
|
| 24 |
image = resize_image(image, resolution=image_resolution)
|
image_segmentor.py
CHANGED
|
@@ -10,30 +10,24 @@ from cv_utils import resize_image
|
|
| 10 |
|
| 11 |
class ImageSegmentor:
|
| 12 |
def __init__(self):
|
| 13 |
-
self.image_processor = AutoImageProcessor.from_pretrained(
|
| 14 |
-
|
| 15 |
-
self.image_segmentor = UperNetForSemanticSegmentation.from_pretrained(
|
| 16 |
-
'openmmlab/upernet-convnext-small')
|
| 17 |
|
| 18 |
@torch.inference_mode()
|
| 19 |
def __call__(self, image: np.ndarray, **kwargs) -> PIL.Image.Image:
|
| 20 |
-
detect_resolution = kwargs.pop(
|
| 21 |
-
image_resolution = kwargs.pop(
|
| 22 |
image = HWC3(image)
|
| 23 |
image = resize_image(image, resolution=detect_resolution)
|
| 24 |
image = PIL.Image.fromarray(image)
|
| 25 |
|
| 26 |
-
pixel_values = self.image_processor(image,
|
| 27 |
-
return_tensors='pt').pixel_values
|
| 28 |
outputs = self.image_segmentor(pixel_values)
|
| 29 |
-
seg = self.image_processor.post_process_semantic_segmentation(
|
| 30 |
-
outputs, target_sizes=[image.size[::-1]])[0]
|
| 31 |
color_seg = np.zeros((seg.shape[0], seg.shape[1], 3), dtype=np.uint8)
|
| 32 |
for label, color in enumerate(ade_palette()):
|
| 33 |
color_seg[seg == label, :] = color
|
| 34 |
color_seg = color_seg.astype(np.uint8)
|
| 35 |
|
| 36 |
-
color_seg = resize_image(color_seg,
|
| 37 |
-
resolution=image_resolution,
|
| 38 |
-
interpolation=cv2.INTER_NEAREST)
|
| 39 |
return PIL.Image.fromarray(color_seg)
|
|
|
|
| 10 |
|
| 11 |
class ImageSegmentor:
|
| 12 |
def __init__(self):
|
| 13 |
+
self.image_processor = AutoImageProcessor.from_pretrained("openmmlab/upernet-convnext-small")
|
| 14 |
+
self.image_segmentor = UperNetForSemanticSegmentation.from_pretrained("openmmlab/upernet-convnext-small")
|
|
|
|
|
|
|
| 15 |
|
| 16 |
@torch.inference_mode()
|
| 17 |
def __call__(self, image: np.ndarray, **kwargs) -> PIL.Image.Image:
|
| 18 |
+
detect_resolution = kwargs.pop("detect_resolution", 512)
|
| 19 |
+
image_resolution = kwargs.pop("image_resolution", 512)
|
| 20 |
image = HWC3(image)
|
| 21 |
image = resize_image(image, resolution=detect_resolution)
|
| 22 |
image = PIL.Image.fromarray(image)
|
| 23 |
|
| 24 |
+
pixel_values = self.image_processor(image, return_tensors="pt").pixel_values
|
|
|
|
| 25 |
outputs = self.image_segmentor(pixel_values)
|
| 26 |
+
seg = self.image_processor.post_process_semantic_segmentation(outputs, target_sizes=[image.size[::-1]])[0]
|
|
|
|
| 27 |
color_seg = np.zeros((seg.shape[0], seg.shape[1], 3), dtype=np.uint8)
|
| 28 |
for label, color in enumerate(ade_palette()):
|
| 29 |
color_seg[seg == label, :] = color
|
| 30 |
color_seg = color_seg.astype(np.uint8)
|
| 31 |
|
| 32 |
+
color_seg = resize_image(color_seg, resolution=image_resolution, interpolation=cv2.INTER_NEAREST)
|
|
|
|
|
|
|
| 33 |
return PIL.Image.fromarray(color_seg)
|
model.py
CHANGED
|
@@ -6,28 +6,31 @@ import numpy as np
|
|
| 6 |
import PIL.Image
|
| 7 |
import torch
|
| 8 |
from controlnet_aux.util import HWC3
|
| 9 |
-
from diffusers import (
|
| 10 |
-
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
from cv_utils import resize_image
|
| 14 |
from preprocessor import Preprocessor
|
| 15 |
from settings import MAX_IMAGE_RESOLUTION, MAX_NUM_IMAGES
|
| 16 |
|
| 17 |
CONTROLNET_MODEL_IDS = {
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
}
|
| 32 |
|
| 33 |
|
|
@@ -37,31 +40,28 @@ def download_all_controlnet_weights() -> None:
|
|
| 37 |
|
| 38 |
|
| 39 |
class Model:
|
| 40 |
-
def __init__(self,
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
self.
|
| 44 |
-
'cuda:0' if torch.cuda.is_available() else 'cpu')
|
| 45 |
-
self.base_model_id = ''
|
| 46 |
-
self.task_name = ''
|
| 47 |
self.pipe = self.load_pipe(base_model_id, task_name)
|
| 48 |
self.preprocessor = Preprocessor()
|
| 49 |
|
| 50 |
def load_pipe(self, base_model_id: str, task_name) -> DiffusionPipeline:
|
| 51 |
-
if
|
| 52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
return self.pipe
|
| 54 |
model_id = CONTROLNET_MODEL_IDS[task_name]
|
| 55 |
-
controlnet = ControlNetModel.from_pretrained(model_id,
|
| 56 |
-
torch_dtype=torch.float16)
|
| 57 |
pipe = StableDiffusionControlNetPipeline.from_pretrained(
|
| 58 |
-
base_model_id,
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
pipe.scheduler = UniPCMultistepScheduler.from_config(
|
| 63 |
-
pipe.scheduler.config)
|
| 64 |
-
if self.device.type == 'cuda':
|
| 65 |
pipe.enable_xformers_memory_efficient_attention()
|
| 66 |
pipe.to(self.device)
|
| 67 |
torch.cuda.empty_cache()
|
|
@@ -85,13 +85,12 @@ class Model:
|
|
| 85 |
def load_controlnet_weight(self, task_name: str) -> None:
|
| 86 |
if task_name == self.task_name:
|
| 87 |
return
|
| 88 |
-
if self.pipe is not None and hasattr(self.pipe,
|
| 89 |
del self.pipe.controlnet
|
| 90 |
torch.cuda.empty_cache()
|
| 91 |
gc.collect()
|
| 92 |
model_id = CONTROLNET_MODEL_IDS[task_name]
|
| 93 |
-
controlnet = ControlNetModel.from_pretrained(model_id,
|
| 94 |
-
torch_dtype=torch.float16)
|
| 95 |
controlnet.to(self.device)
|
| 96 |
torch.cuda.empty_cache()
|
| 97 |
gc.collect()
|
|
@@ -102,10 +101,10 @@ class Model:
|
|
| 102 |
if not prompt:
|
| 103 |
prompt = additional_prompt
|
| 104 |
else:
|
| 105 |
-
prompt = f
|
| 106 |
return prompt
|
| 107 |
|
| 108 |
-
@torch.autocast(
|
| 109 |
def run_pipe(
|
| 110 |
self,
|
| 111 |
prompt: str,
|
|
@@ -117,13 +116,15 @@ class Model:
|
|
| 117 |
seed: int,
|
| 118 |
) -> list[PIL.Image.Image]:
|
| 119 |
generator = torch.Generator().manual_seed(seed)
|
| 120 |
-
return self.pipe(
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
|
|
|
|
|
|
| 127 |
|
| 128 |
@torch.inference_mode()
|
| 129 |
def process_canny(
|
|
@@ -147,13 +148,12 @@ class Model:
|
|
| 147 |
if num_images > MAX_NUM_IMAGES:
|
| 148 |
raise ValueError
|
| 149 |
|
| 150 |
-
self.preprocessor.load(
|
| 151 |
-
control_image = self.preprocessor(
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
detect_resolution=image_resolution)
|
| 155 |
|
| 156 |
-
self.load_controlnet_weight(
|
| 157 |
results = self.run_pipe(
|
| 158 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 159 |
negative_prompt=negative_prompt,
|
|
@@ -188,7 +188,7 @@ class Model:
|
|
| 188 |
if num_images > MAX_NUM_IMAGES:
|
| 189 |
raise ValueError
|
| 190 |
|
| 191 |
-
self.preprocessor.load(
|
| 192 |
control_image = self.preprocessor(
|
| 193 |
image=image,
|
| 194 |
image_resolution=image_resolution,
|
|
@@ -196,7 +196,7 @@ class Model:
|
|
| 196 |
thr_v=value_threshold,
|
| 197 |
thr_d=distance_threshold,
|
| 198 |
)
|
| 199 |
-
self.load_controlnet_weight(
|
| 200 |
results = self.run_pipe(
|
| 201 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 202 |
negative_prompt=negative_prompt,
|
|
@@ -230,11 +230,11 @@ class Model:
|
|
| 230 |
if num_images > MAX_NUM_IMAGES:
|
| 231 |
raise ValueError
|
| 232 |
|
| 233 |
-
if preprocessor_name ==
|
| 234 |
image = HWC3(image)
|
| 235 |
image = resize_image(image, resolution=image_resolution)
|
| 236 |
control_image = PIL.Image.fromarray(image)
|
| 237 |
-
elif preprocessor_name ==
|
| 238 |
self.preprocessor.load(preprocessor_name)
|
| 239 |
control_image = self.preprocessor(
|
| 240 |
image=image,
|
|
@@ -242,7 +242,7 @@ class Model:
|
|
| 242 |
detect_resolution=preprocess_resolution,
|
| 243 |
scribble=False,
|
| 244 |
)
|
| 245 |
-
elif preprocessor_name ==
|
| 246 |
self.preprocessor.load(preprocessor_name)
|
| 247 |
control_image = self.preprocessor(
|
| 248 |
image=image,
|
|
@@ -250,7 +250,7 @@ class Model:
|
|
| 250 |
detect_resolution=preprocess_resolution,
|
| 251 |
safe=False,
|
| 252 |
)
|
| 253 |
-
self.load_controlnet_weight(
|
| 254 |
results = self.run_pipe(
|
| 255 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 256 |
negative_prompt=negative_prompt,
|
|
@@ -282,12 +282,12 @@ class Model:
|
|
| 282 |
if num_images > MAX_NUM_IMAGES:
|
| 283 |
raise ValueError
|
| 284 |
|
| 285 |
-
image = image_and_mask[
|
| 286 |
image = HWC3(image)
|
| 287 |
image = resize_image(image, resolution=image_resolution)
|
| 288 |
control_image = PIL.Image.fromarray(image)
|
| 289 |
|
| 290 |
-
self.load_controlnet_weight(
|
| 291 |
results = self.run_pipe(
|
| 292 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 293 |
negative_prompt=negative_prompt,
|
|
@@ -321,22 +321,22 @@ class Model:
|
|
| 321 |
if num_images > MAX_NUM_IMAGES:
|
| 322 |
raise ValueError
|
| 323 |
|
| 324 |
-
if preprocessor_name ==
|
| 325 |
image = HWC3(image)
|
| 326 |
image = resize_image(image, resolution=image_resolution)
|
| 327 |
control_image = PIL.Image.fromarray(image)
|
| 328 |
-
elif preprocessor_name in [
|
| 329 |
-
safe =
|
| 330 |
-
self.preprocessor.load(
|
| 331 |
control_image = self.preprocessor(
|
| 332 |
image=image,
|
| 333 |
image_resolution=image_resolution,
|
| 334 |
detect_resolution=preprocess_resolution,
|
| 335 |
scribble=safe,
|
| 336 |
)
|
| 337 |
-
elif preprocessor_name in [
|
| 338 |
-
safe =
|
| 339 |
-
self.preprocessor.load(
|
| 340 |
control_image = self.preprocessor(
|
| 341 |
image=image,
|
| 342 |
image_resolution=image_resolution,
|
|
@@ -345,7 +345,7 @@ class Model:
|
|
| 345 |
)
|
| 346 |
else:
|
| 347 |
raise ValueError
|
| 348 |
-
self.load_controlnet_weight(
|
| 349 |
results = self.run_pipe(
|
| 350 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 351 |
negative_prompt=negative_prompt,
|
|
@@ -379,19 +379,19 @@ class Model:
|
|
| 379 |
if num_images > MAX_NUM_IMAGES:
|
| 380 |
raise ValueError
|
| 381 |
|
| 382 |
-
if preprocessor_name ==
|
| 383 |
image = HWC3(image)
|
| 384 |
image = resize_image(image, resolution=image_resolution)
|
| 385 |
control_image = PIL.Image.fromarray(image)
|
| 386 |
else:
|
| 387 |
-
self.preprocessor.load(
|
| 388 |
control_image = self.preprocessor(
|
| 389 |
image=image,
|
| 390 |
image_resolution=image_resolution,
|
| 391 |
detect_resolution=preprocess_resolution,
|
| 392 |
hand_and_face=True,
|
| 393 |
)
|
| 394 |
-
self.load_controlnet_weight(
|
| 395 |
results = self.run_pipe(
|
| 396 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 397 |
negative_prompt=negative_prompt,
|
|
@@ -425,7 +425,7 @@ class Model:
|
|
| 425 |
if num_images > MAX_NUM_IMAGES:
|
| 426 |
raise ValueError
|
| 427 |
|
| 428 |
-
if preprocessor_name ==
|
| 429 |
image = HWC3(image)
|
| 430 |
image = resize_image(image, resolution=image_resolution)
|
| 431 |
control_image = PIL.Image.fromarray(image)
|
|
@@ -436,7 +436,7 @@ class Model:
|
|
| 436 |
image_resolution=image_resolution,
|
| 437 |
detect_resolution=preprocess_resolution,
|
| 438 |
)
|
| 439 |
-
self.load_controlnet_weight(
|
| 440 |
results = self.run_pipe(
|
| 441 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 442 |
negative_prompt=negative_prompt,
|
|
@@ -470,7 +470,7 @@ class Model:
|
|
| 470 |
if num_images > MAX_NUM_IMAGES:
|
| 471 |
raise ValueError
|
| 472 |
|
| 473 |
-
if preprocessor_name ==
|
| 474 |
image = HWC3(image)
|
| 475 |
image = resize_image(image, resolution=image_resolution)
|
| 476 |
control_image = PIL.Image.fromarray(image)
|
|
@@ -481,7 +481,7 @@ class Model:
|
|
| 481 |
image_resolution=image_resolution,
|
| 482 |
detect_resolution=preprocess_resolution,
|
| 483 |
)
|
| 484 |
-
self.load_controlnet_weight(
|
| 485 |
results = self.run_pipe(
|
| 486 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 487 |
negative_prompt=negative_prompt,
|
|
@@ -515,18 +515,18 @@ class Model:
|
|
| 515 |
if num_images > MAX_NUM_IMAGES:
|
| 516 |
raise ValueError
|
| 517 |
|
| 518 |
-
if preprocessor_name ==
|
| 519 |
image = HWC3(image)
|
| 520 |
image = resize_image(image, resolution=image_resolution)
|
| 521 |
control_image = PIL.Image.fromarray(image)
|
| 522 |
else:
|
| 523 |
-
self.preprocessor.load(
|
| 524 |
control_image = self.preprocessor(
|
| 525 |
image=image,
|
| 526 |
image_resolution=image_resolution,
|
| 527 |
detect_resolution=preprocess_resolution,
|
| 528 |
)
|
| 529 |
-
self.load_controlnet_weight(
|
| 530 |
results = self.run_pipe(
|
| 531 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 532 |
negative_prompt=negative_prompt,
|
|
@@ -560,30 +560,30 @@ class Model:
|
|
| 560 |
if num_images > MAX_NUM_IMAGES:
|
| 561 |
raise ValueError
|
| 562 |
|
| 563 |
-
if preprocessor_name in [
|
| 564 |
image = HWC3(image)
|
| 565 |
image = resize_image(image, resolution=image_resolution)
|
| 566 |
control_image = PIL.Image.fromarray(image)
|
| 567 |
-
elif preprocessor_name in [
|
| 568 |
-
coarse =
|
| 569 |
-
self.preprocessor.load(
|
| 570 |
control_image = self.preprocessor(
|
| 571 |
image=image,
|
| 572 |
image_resolution=image_resolution,
|
| 573 |
detect_resolution=preprocess_resolution,
|
| 574 |
coarse=coarse,
|
| 575 |
)
|
| 576 |
-
elif preprocessor_name ==
|
| 577 |
-
self.preprocessor.load(
|
| 578 |
control_image = self.preprocessor(
|
| 579 |
image=image,
|
| 580 |
image_resolution=image_resolution,
|
| 581 |
detect_resolution=preprocess_resolution,
|
| 582 |
)
|
| 583 |
-
if
|
| 584 |
-
self.load_controlnet_weight(
|
| 585 |
else:
|
| 586 |
-
self.load_controlnet_weight(
|
| 587 |
results = self.run_pipe(
|
| 588 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 589 |
negative_prompt=negative_prompt,
|
|
@@ -616,7 +616,7 @@ class Model:
|
|
| 616 |
if num_images > MAX_NUM_IMAGES:
|
| 617 |
raise ValueError
|
| 618 |
|
| 619 |
-
if preprocessor_name ==
|
| 620 |
image = HWC3(image)
|
| 621 |
image = resize_image(image, resolution=image_resolution)
|
| 622 |
control_image = PIL.Image.fromarray(image)
|
|
@@ -626,7 +626,7 @@ class Model:
|
|
| 626 |
image=image,
|
| 627 |
image_resolution=image_resolution,
|
| 628 |
)
|
| 629 |
-
self.load_controlnet_weight(
|
| 630 |
results = self.run_pipe(
|
| 631 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 632 |
negative_prompt=negative_prompt,
|
|
@@ -661,7 +661,7 @@ class Model:
|
|
| 661 |
image = HWC3(image)
|
| 662 |
image = resize_image(image, resolution=image_resolution)
|
| 663 |
control_image = PIL.Image.fromarray(image)
|
| 664 |
-
self.load_controlnet_weight(
|
| 665 |
results = self.run_pipe(
|
| 666 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 667 |
negative_prompt=negative_prompt,
|
|
|
|
| 6 |
import PIL.Image
|
| 7 |
import torch
|
| 8 |
from controlnet_aux.util import HWC3
|
| 9 |
+
from diffusers import (
|
| 10 |
+
ControlNetModel,
|
| 11 |
+
DiffusionPipeline,
|
| 12 |
+
StableDiffusionControlNetPipeline,
|
| 13 |
+
UniPCMultistepScheduler,
|
| 14 |
+
)
|
| 15 |
|
| 16 |
from cv_utils import resize_image
|
| 17 |
from preprocessor import Preprocessor
|
| 18 |
from settings import MAX_IMAGE_RESOLUTION, MAX_NUM_IMAGES
|
| 19 |
|
| 20 |
CONTROLNET_MODEL_IDS = {
|
| 21 |
+
"Openpose": "lllyasviel/control_v11p_sd15_openpose",
|
| 22 |
+
"Canny": "lllyasviel/control_v11p_sd15_canny",
|
| 23 |
+
"MLSD": "lllyasviel/control_v11p_sd15_mlsd",
|
| 24 |
+
"scribble": "lllyasviel/control_v11p_sd15_scribble",
|
| 25 |
+
"softedge": "lllyasviel/control_v11p_sd15_softedge",
|
| 26 |
+
"segmentation": "lllyasviel/control_v11p_sd15_seg",
|
| 27 |
+
"depth": "lllyasviel/control_v11f1p_sd15_depth",
|
| 28 |
+
"NormalBae": "lllyasviel/control_v11p_sd15_normalbae",
|
| 29 |
+
"lineart": "lllyasviel/control_v11p_sd15_lineart",
|
| 30 |
+
"lineart_anime": "lllyasviel/control_v11p_sd15s2_lineart_anime",
|
| 31 |
+
"shuffle": "lllyasviel/control_v11e_sd15_shuffle",
|
| 32 |
+
"ip2p": "lllyasviel/control_v11e_sd15_ip2p",
|
| 33 |
+
"inpaint": "lllyasviel/control_v11e_sd15_inpaint",
|
| 34 |
}
|
| 35 |
|
| 36 |
|
|
|
|
| 40 |
|
| 41 |
|
| 42 |
class Model:
|
| 43 |
+
def __init__(self, base_model_id: str = "runwayml/stable-diffusion-v1-5", task_name: str = "Canny"):
|
| 44 |
+
self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
| 45 |
+
self.base_model_id = ""
|
| 46 |
+
self.task_name = ""
|
|
|
|
|
|
|
|
|
|
| 47 |
self.pipe = self.load_pipe(base_model_id, task_name)
|
| 48 |
self.preprocessor = Preprocessor()
|
| 49 |
|
| 50 |
def load_pipe(self, base_model_id: str, task_name) -> DiffusionPipeline:
|
| 51 |
+
if (
|
| 52 |
+
base_model_id == self.base_model_id
|
| 53 |
+
and task_name == self.task_name
|
| 54 |
+
and hasattr(self, "pipe")
|
| 55 |
+
and self.pipe is not None
|
| 56 |
+
):
|
| 57 |
return self.pipe
|
| 58 |
model_id = CONTROLNET_MODEL_IDS[task_name]
|
| 59 |
+
controlnet = ControlNetModel.from_pretrained(model_id, torch_dtype=torch.float16)
|
|
|
|
| 60 |
pipe = StableDiffusionControlNetPipeline.from_pretrained(
|
| 61 |
+
base_model_id, safety_checker=None, controlnet=controlnet, torch_dtype=torch.float16
|
| 62 |
+
)
|
| 63 |
+
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
|
| 64 |
+
if self.device.type == "cuda":
|
|
|
|
|
|
|
|
|
|
| 65 |
pipe.enable_xformers_memory_efficient_attention()
|
| 66 |
pipe.to(self.device)
|
| 67 |
torch.cuda.empty_cache()
|
|
|
|
| 85 |
def load_controlnet_weight(self, task_name: str) -> None:
|
| 86 |
if task_name == self.task_name:
|
| 87 |
return
|
| 88 |
+
if self.pipe is not None and hasattr(self.pipe, "controlnet"):
|
| 89 |
del self.pipe.controlnet
|
| 90 |
torch.cuda.empty_cache()
|
| 91 |
gc.collect()
|
| 92 |
model_id = CONTROLNET_MODEL_IDS[task_name]
|
| 93 |
+
controlnet = ControlNetModel.from_pretrained(model_id, torch_dtype=torch.float16)
|
|
|
|
| 94 |
controlnet.to(self.device)
|
| 95 |
torch.cuda.empty_cache()
|
| 96 |
gc.collect()
|
|
|
|
| 101 |
if not prompt:
|
| 102 |
prompt = additional_prompt
|
| 103 |
else:
|
| 104 |
+
prompt = f"{prompt}, {additional_prompt}"
|
| 105 |
return prompt
|
| 106 |
|
| 107 |
+
@torch.autocast("cuda")
|
| 108 |
def run_pipe(
|
| 109 |
self,
|
| 110 |
prompt: str,
|
|
|
|
| 116 |
seed: int,
|
| 117 |
) -> list[PIL.Image.Image]:
|
| 118 |
generator = torch.Generator().manual_seed(seed)
|
| 119 |
+
return self.pipe(
|
| 120 |
+
prompt=prompt,
|
| 121 |
+
negative_prompt=negative_prompt,
|
| 122 |
+
guidance_scale=guidance_scale,
|
| 123 |
+
num_images_per_prompt=num_images,
|
| 124 |
+
num_inference_steps=num_steps,
|
| 125 |
+
generator=generator,
|
| 126 |
+
image=control_image,
|
| 127 |
+
).images
|
| 128 |
|
| 129 |
@torch.inference_mode()
|
| 130 |
def process_canny(
|
|
|
|
| 148 |
if num_images > MAX_NUM_IMAGES:
|
| 149 |
raise ValueError
|
| 150 |
|
| 151 |
+
self.preprocessor.load("Canny")
|
| 152 |
+
control_image = self.preprocessor(
|
| 153 |
+
image=image, low_threshold=low_threshold, high_threshold=high_threshold, detect_resolution=image_resolution
|
| 154 |
+
)
|
|
|
|
| 155 |
|
| 156 |
+
self.load_controlnet_weight("Canny")
|
| 157 |
results = self.run_pipe(
|
| 158 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 159 |
negative_prompt=negative_prompt,
|
|
|
|
| 188 |
if num_images > MAX_NUM_IMAGES:
|
| 189 |
raise ValueError
|
| 190 |
|
| 191 |
+
self.preprocessor.load("MLSD")
|
| 192 |
control_image = self.preprocessor(
|
| 193 |
image=image,
|
| 194 |
image_resolution=image_resolution,
|
|
|
|
| 196 |
thr_v=value_threshold,
|
| 197 |
thr_d=distance_threshold,
|
| 198 |
)
|
| 199 |
+
self.load_controlnet_weight("MLSD")
|
| 200 |
results = self.run_pipe(
|
| 201 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 202 |
negative_prompt=negative_prompt,
|
|
|
|
| 230 |
if num_images > MAX_NUM_IMAGES:
|
| 231 |
raise ValueError
|
| 232 |
|
| 233 |
+
if preprocessor_name == "None":
|
| 234 |
image = HWC3(image)
|
| 235 |
image = resize_image(image, resolution=image_resolution)
|
| 236 |
control_image = PIL.Image.fromarray(image)
|
| 237 |
+
elif preprocessor_name == "HED":
|
| 238 |
self.preprocessor.load(preprocessor_name)
|
| 239 |
control_image = self.preprocessor(
|
| 240 |
image=image,
|
|
|
|
| 242 |
detect_resolution=preprocess_resolution,
|
| 243 |
scribble=False,
|
| 244 |
)
|
| 245 |
+
elif preprocessor_name == "PidiNet":
|
| 246 |
self.preprocessor.load(preprocessor_name)
|
| 247 |
control_image = self.preprocessor(
|
| 248 |
image=image,
|
|
|
|
| 250 |
detect_resolution=preprocess_resolution,
|
| 251 |
safe=False,
|
| 252 |
)
|
| 253 |
+
self.load_controlnet_weight("scribble")
|
| 254 |
results = self.run_pipe(
|
| 255 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 256 |
negative_prompt=negative_prompt,
|
|
|
|
| 282 |
if num_images > MAX_NUM_IMAGES:
|
| 283 |
raise ValueError
|
| 284 |
|
| 285 |
+
image = image_and_mask["mask"]
|
| 286 |
image = HWC3(image)
|
| 287 |
image = resize_image(image, resolution=image_resolution)
|
| 288 |
control_image = PIL.Image.fromarray(image)
|
| 289 |
|
| 290 |
+
self.load_controlnet_weight("scribble")
|
| 291 |
results = self.run_pipe(
|
| 292 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 293 |
negative_prompt=negative_prompt,
|
|
|
|
| 321 |
if num_images > MAX_NUM_IMAGES:
|
| 322 |
raise ValueError
|
| 323 |
|
| 324 |
+
if preprocessor_name == "None":
|
| 325 |
image = HWC3(image)
|
| 326 |
image = resize_image(image, resolution=image_resolution)
|
| 327 |
control_image = PIL.Image.fromarray(image)
|
| 328 |
+
elif preprocessor_name in ["HED", "HED safe"]:
|
| 329 |
+
safe = "safe" in preprocessor_name
|
| 330 |
+
self.preprocessor.load("HED")
|
| 331 |
control_image = self.preprocessor(
|
| 332 |
image=image,
|
| 333 |
image_resolution=image_resolution,
|
| 334 |
detect_resolution=preprocess_resolution,
|
| 335 |
scribble=safe,
|
| 336 |
)
|
| 337 |
+
elif preprocessor_name in ["PidiNet", "PidiNet safe"]:
|
| 338 |
+
safe = "safe" in preprocessor_name
|
| 339 |
+
self.preprocessor.load("PidiNet")
|
| 340 |
control_image = self.preprocessor(
|
| 341 |
image=image,
|
| 342 |
image_resolution=image_resolution,
|
|
|
|
| 345 |
)
|
| 346 |
else:
|
| 347 |
raise ValueError
|
| 348 |
+
self.load_controlnet_weight("softedge")
|
| 349 |
results = self.run_pipe(
|
| 350 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 351 |
negative_prompt=negative_prompt,
|
|
|
|
| 379 |
if num_images > MAX_NUM_IMAGES:
|
| 380 |
raise ValueError
|
| 381 |
|
| 382 |
+
if preprocessor_name == "None":
|
| 383 |
image = HWC3(image)
|
| 384 |
image = resize_image(image, resolution=image_resolution)
|
| 385 |
control_image = PIL.Image.fromarray(image)
|
| 386 |
else:
|
| 387 |
+
self.preprocessor.load("Openpose")
|
| 388 |
control_image = self.preprocessor(
|
| 389 |
image=image,
|
| 390 |
image_resolution=image_resolution,
|
| 391 |
detect_resolution=preprocess_resolution,
|
| 392 |
hand_and_face=True,
|
| 393 |
)
|
| 394 |
+
self.load_controlnet_weight("Openpose")
|
| 395 |
results = self.run_pipe(
|
| 396 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 397 |
negative_prompt=negative_prompt,
|
|
|
|
| 425 |
if num_images > MAX_NUM_IMAGES:
|
| 426 |
raise ValueError
|
| 427 |
|
| 428 |
+
if preprocessor_name == "None":
|
| 429 |
image = HWC3(image)
|
| 430 |
image = resize_image(image, resolution=image_resolution)
|
| 431 |
control_image = PIL.Image.fromarray(image)
|
|
|
|
| 436 |
image_resolution=image_resolution,
|
| 437 |
detect_resolution=preprocess_resolution,
|
| 438 |
)
|
| 439 |
+
self.load_controlnet_weight("segmentation")
|
| 440 |
results = self.run_pipe(
|
| 441 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 442 |
negative_prompt=negative_prompt,
|
|
|
|
| 470 |
if num_images > MAX_NUM_IMAGES:
|
| 471 |
raise ValueError
|
| 472 |
|
| 473 |
+
if preprocessor_name == "None":
|
| 474 |
image = HWC3(image)
|
| 475 |
image = resize_image(image, resolution=image_resolution)
|
| 476 |
control_image = PIL.Image.fromarray(image)
|
|
|
|
| 481 |
image_resolution=image_resolution,
|
| 482 |
detect_resolution=preprocess_resolution,
|
| 483 |
)
|
| 484 |
+
self.load_controlnet_weight("depth")
|
| 485 |
results = self.run_pipe(
|
| 486 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 487 |
negative_prompt=negative_prompt,
|
|
|
|
| 515 |
if num_images > MAX_NUM_IMAGES:
|
| 516 |
raise ValueError
|
| 517 |
|
| 518 |
+
if preprocessor_name == "None":
|
| 519 |
image = HWC3(image)
|
| 520 |
image = resize_image(image, resolution=image_resolution)
|
| 521 |
control_image = PIL.Image.fromarray(image)
|
| 522 |
else:
|
| 523 |
+
self.preprocessor.load("NormalBae")
|
| 524 |
control_image = self.preprocessor(
|
| 525 |
image=image,
|
| 526 |
image_resolution=image_resolution,
|
| 527 |
detect_resolution=preprocess_resolution,
|
| 528 |
)
|
| 529 |
+
self.load_controlnet_weight("NormalBae")
|
| 530 |
results = self.run_pipe(
|
| 531 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 532 |
negative_prompt=negative_prompt,
|
|
|
|
| 560 |
if num_images > MAX_NUM_IMAGES:
|
| 561 |
raise ValueError
|
| 562 |
|
| 563 |
+
if preprocessor_name in ["None", "None (anime)"]:
|
| 564 |
image = HWC3(image)
|
| 565 |
image = resize_image(image, resolution=image_resolution)
|
| 566 |
control_image = PIL.Image.fromarray(image)
|
| 567 |
+
elif preprocessor_name in ["Lineart", "Lineart coarse"]:
|
| 568 |
+
coarse = "coarse" in preprocessor_name
|
| 569 |
+
self.preprocessor.load("Lineart")
|
| 570 |
control_image = self.preprocessor(
|
| 571 |
image=image,
|
| 572 |
image_resolution=image_resolution,
|
| 573 |
detect_resolution=preprocess_resolution,
|
| 574 |
coarse=coarse,
|
| 575 |
)
|
| 576 |
+
elif preprocessor_name == "Lineart (anime)":
|
| 577 |
+
self.preprocessor.load("LineartAnime")
|
| 578 |
control_image = self.preprocessor(
|
| 579 |
image=image,
|
| 580 |
image_resolution=image_resolution,
|
| 581 |
detect_resolution=preprocess_resolution,
|
| 582 |
)
|
| 583 |
+
if "anime" in preprocessor_name:
|
| 584 |
+
self.load_controlnet_weight("lineart_anime")
|
| 585 |
else:
|
| 586 |
+
self.load_controlnet_weight("lineart")
|
| 587 |
results = self.run_pipe(
|
| 588 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 589 |
negative_prompt=negative_prompt,
|
|
|
|
| 616 |
if num_images > MAX_NUM_IMAGES:
|
| 617 |
raise ValueError
|
| 618 |
|
| 619 |
+
if preprocessor_name == "None":
|
| 620 |
image = HWC3(image)
|
| 621 |
image = resize_image(image, resolution=image_resolution)
|
| 622 |
control_image = PIL.Image.fromarray(image)
|
|
|
|
| 626 |
image=image,
|
| 627 |
image_resolution=image_resolution,
|
| 628 |
)
|
| 629 |
+
self.load_controlnet_weight("shuffle")
|
| 630 |
results = self.run_pipe(
|
| 631 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 632 |
negative_prompt=negative_prompt,
|
|
|
|
| 661 |
image = HWC3(image)
|
| 662 |
image = resize_image(image, resolution=image_resolution)
|
| 663 |
control_image = PIL.Image.fromarray(image)
|
| 664 |
+
self.load_controlnet_weight("ip2p")
|
| 665 |
results = self.run_pipe(
|
| 666 |
prompt=self.get_prompt(prompt, additional_prompt),
|
| 667 |
negative_prompt=negative_prompt,
|
preprocessor.py
CHANGED
|
@@ -3,10 +3,18 @@ import gc
|
|
| 3 |
import numpy as np
|
| 4 |
import PIL.Image
|
| 5 |
import torch
|
| 6 |
-
from controlnet_aux import (
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
from controlnet_aux.util import HWC3
|
| 11 |
|
| 12 |
from cv_utils import resize_image
|
|
@@ -15,38 +23,38 @@ from image_segmentor import ImageSegmentor
|
|
| 15 |
|
| 16 |
|
| 17 |
class Preprocessor:
|
| 18 |
-
MODEL_ID =
|
| 19 |
|
| 20 |
def __init__(self):
|
| 21 |
self.model = None
|
| 22 |
-
self.name =
|
| 23 |
|
| 24 |
def load(self, name: str) -> None:
|
| 25 |
if name == self.name:
|
| 26 |
return
|
| 27 |
-
if name ==
|
| 28 |
self.model = HEDdetector.from_pretrained(self.MODEL_ID)
|
| 29 |
-
elif name ==
|
| 30 |
self.model = MidasDetector.from_pretrained(self.MODEL_ID)
|
| 31 |
-
elif name ==
|
| 32 |
self.model = MLSDdetector.from_pretrained(self.MODEL_ID)
|
| 33 |
-
elif name ==
|
| 34 |
self.model = OpenposeDetector.from_pretrained(self.MODEL_ID)
|
| 35 |
-
elif name ==
|
| 36 |
self.model = PidiNetDetector.from_pretrained(self.MODEL_ID)
|
| 37 |
-
elif name ==
|
| 38 |
self.model = NormalBaeDetector.from_pretrained(self.MODEL_ID)
|
| 39 |
-
elif name ==
|
| 40 |
self.model = LineartDetector.from_pretrained(self.MODEL_ID)
|
| 41 |
-
elif name ==
|
| 42 |
self.model = LineartAnimeDetector.from_pretrained(self.MODEL_ID)
|
| 43 |
-
elif name ==
|
| 44 |
self.model = CannyDetector()
|
| 45 |
-
elif name ==
|
| 46 |
self.model = ContentShuffleDetector()
|
| 47 |
-
elif name ==
|
| 48 |
self.model = DepthEstimator()
|
| 49 |
-
elif name ==
|
| 50 |
self.model = ImageSegmentor()
|
| 51 |
else:
|
| 52 |
raise ValueError
|
|
@@ -55,17 +63,17 @@ class Preprocessor:
|
|
| 55 |
self.name = name
|
| 56 |
|
| 57 |
def __call__(self, image: PIL.Image.Image, **kwargs) -> PIL.Image.Image:
|
| 58 |
-
if self.name ==
|
| 59 |
-
if
|
| 60 |
-
detect_resolution = kwargs.pop(
|
| 61 |
image = np.array(image)
|
| 62 |
image = HWC3(image)
|
| 63 |
image = resize_image(image, resolution=detect_resolution)
|
| 64 |
image = self.model(image, **kwargs)
|
| 65 |
return PIL.Image.fromarray(image)
|
| 66 |
-
elif self.name ==
|
| 67 |
-
detect_resolution = kwargs.pop(
|
| 68 |
-
image_resolution = kwargs.pop(
|
| 69 |
image = np.array(image)
|
| 70 |
image = HWC3(image)
|
| 71 |
image = resize_image(image, resolution=detect_resolution)
|
|
|
|
| 3 |
import numpy as np
|
| 4 |
import PIL.Image
|
| 5 |
import torch
|
| 6 |
+
from controlnet_aux import (
|
| 7 |
+
CannyDetector,
|
| 8 |
+
ContentShuffleDetector,
|
| 9 |
+
HEDdetector,
|
| 10 |
+
LineartAnimeDetector,
|
| 11 |
+
LineartDetector,
|
| 12 |
+
MidasDetector,
|
| 13 |
+
MLSDdetector,
|
| 14 |
+
NormalBaeDetector,
|
| 15 |
+
OpenposeDetector,
|
| 16 |
+
PidiNetDetector,
|
| 17 |
+
)
|
| 18 |
from controlnet_aux.util import HWC3
|
| 19 |
|
| 20 |
from cv_utils import resize_image
|
|
|
|
| 23 |
|
| 24 |
|
| 25 |
class Preprocessor:
|
| 26 |
+
MODEL_ID = "lllyasviel/Annotators"
|
| 27 |
|
| 28 |
def __init__(self):
|
| 29 |
self.model = None
|
| 30 |
+
self.name = ""
|
| 31 |
|
| 32 |
def load(self, name: str) -> None:
|
| 33 |
if name == self.name:
|
| 34 |
return
|
| 35 |
+
if name == "HED":
|
| 36 |
self.model = HEDdetector.from_pretrained(self.MODEL_ID)
|
| 37 |
+
elif name == "Midas":
|
| 38 |
self.model = MidasDetector.from_pretrained(self.MODEL_ID)
|
| 39 |
+
elif name == "MLSD":
|
| 40 |
self.model = MLSDdetector.from_pretrained(self.MODEL_ID)
|
| 41 |
+
elif name == "Openpose":
|
| 42 |
self.model = OpenposeDetector.from_pretrained(self.MODEL_ID)
|
| 43 |
+
elif name == "PidiNet":
|
| 44 |
self.model = PidiNetDetector.from_pretrained(self.MODEL_ID)
|
| 45 |
+
elif name == "NormalBae":
|
| 46 |
self.model = NormalBaeDetector.from_pretrained(self.MODEL_ID)
|
| 47 |
+
elif name == "Lineart":
|
| 48 |
self.model = LineartDetector.from_pretrained(self.MODEL_ID)
|
| 49 |
+
elif name == "LineartAnime":
|
| 50 |
self.model = LineartAnimeDetector.from_pretrained(self.MODEL_ID)
|
| 51 |
+
elif name == "Canny":
|
| 52 |
self.model = CannyDetector()
|
| 53 |
+
elif name == "ContentShuffle":
|
| 54 |
self.model = ContentShuffleDetector()
|
| 55 |
+
elif name == "DPT":
|
| 56 |
self.model = DepthEstimator()
|
| 57 |
+
elif name == "UPerNet":
|
| 58 |
self.model = ImageSegmentor()
|
| 59 |
else:
|
| 60 |
raise ValueError
|
|
|
|
| 63 |
self.name = name
|
| 64 |
|
| 65 |
def __call__(self, image: PIL.Image.Image, **kwargs) -> PIL.Image.Image:
|
| 66 |
+
if self.name == "Canny":
|
| 67 |
+
if "detect_resolution" in kwargs:
|
| 68 |
+
detect_resolution = kwargs.pop("detect_resolution")
|
| 69 |
image = np.array(image)
|
| 70 |
image = HWC3(image)
|
| 71 |
image = resize_image(image, resolution=detect_resolution)
|
| 72 |
image = self.model(image, **kwargs)
|
| 73 |
return PIL.Image.fromarray(image)
|
| 74 |
+
elif self.name == "Midas":
|
| 75 |
+
detect_resolution = kwargs.pop("detect_resolution", 512)
|
| 76 |
+
image_resolution = kwargs.pop("image_resolution", 512)
|
| 77 |
image = np.array(image)
|
| 78 |
image = HWC3(image)
|
| 79 |
image = resize_image(image, resolution=detect_resolution)
|
settings.py
CHANGED
|
@@ -2,17 +2,14 @@ import os
|
|
| 2 |
|
| 3 |
import numpy as np
|
| 4 |
|
| 5 |
-
DEFAULT_MODEL_ID = os.getenv(
|
| 6 |
-
'runwayml/stable-diffusion-v1-5')
|
| 7 |
|
| 8 |
-
MAX_NUM_IMAGES = int(os.getenv(
|
| 9 |
-
DEFAULT_NUM_IMAGES = min(MAX_NUM_IMAGES,
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
DEFAULT_IMAGE_RESOLUTION = min(
|
| 13 |
-
MAX_IMAGE_RESOLUTION, int(os.getenv('DEFAULT_IMAGE_RESOLUTION', '768')))
|
| 14 |
|
| 15 |
-
ALLOW_CHANGING_BASE_MODEL = os.getenv(
|
| 16 |
-
SHOW_DUPLICATE_BUTTON = os.getenv(
|
| 17 |
|
| 18 |
MAX_SEED = np.iinfo(np.int32).max
|
|
|
|
| 2 |
|
| 3 |
import numpy as np
|
| 4 |
|
| 5 |
+
DEFAULT_MODEL_ID = os.getenv("DEFAULT_MODEL_ID", "runwayml/stable-diffusion-v1-5")
|
|
|
|
| 6 |
|
| 7 |
+
MAX_NUM_IMAGES = int(os.getenv("MAX_NUM_IMAGES", "3"))
|
| 8 |
+
DEFAULT_NUM_IMAGES = min(MAX_NUM_IMAGES, int(os.getenv("DEFAULT_NUM_IMAGES", "3")))
|
| 9 |
+
MAX_IMAGE_RESOLUTION = int(os.getenv("MAX_IMAGE_RESOLUTION", "768"))
|
| 10 |
+
DEFAULT_IMAGE_RESOLUTION = min(MAX_IMAGE_RESOLUTION, int(os.getenv("DEFAULT_IMAGE_RESOLUTION", "768")))
|
|
|
|
|
|
|
| 11 |
|
| 12 |
+
ALLOW_CHANGING_BASE_MODEL = os.getenv("SPACE_ID") != "hysts/ControlNet-v1-1"
|
| 13 |
+
SHOW_DUPLICATE_BUTTON = os.getenv("SHOW_DUPLICATE_BUTTON") == "1"
|
| 14 |
|
| 15 |
MAX_SEED = np.iinfo(np.int32).max
|