File size: 4,634 Bytes
96b3fb1
 
 
 
 
edeb7d0
96b3fb1
 
 
 
 
 
 
 
edeb7d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96b3fb1
10f851e
 
 
 
 
 
 
 
 
96b3fb1
10f851e
96b3fb1
 
 
 
 
8052d81
 
96b3fb1
98f4347
 
 
 
 
 
96b3fb1
18ce2cc
 
 
96b3fb1
 
 
 
 
 
18ce2cc
 
 
96b3fb1
18ce2cc
 
 
96b3fb1
18ce2cc
 
 
96b3fb1
18ce2cc
 
 
96b3fb1
 
18ce2cc
 
 
96b3fb1
4354ec3
18ce2cc
 
96b3fb1
18ce2cc
 
 
96b3fb1
18ce2cc
 
 
96b3fb1
18ce2cc
 
 
96b3fb1
18ce2cc
 
 
96b3fb1
76c6759
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/env python

from __future__ import annotations

import os
import pathlib
import shlex
import subprocess

import gradio as gr

if os.getenv('SYSTEM') == 'spaces':
    with open('patch') as f:
        subprocess.run(shlex.split('patch -p1'), stdin=f, cwd='ControlNet')

base_url = 'https://huggingface.co/lllyasviel/ControlNet/resolve/main/annotator/ckpts/'
names = [
    'body_pose_model.pth',
    'dpt_hybrid-midas-501f0c75.pt',
    'hand_pose_model.pth',
    'mlsd_large_512_fp32.pth',
    'mlsd_tiny_512_fp32.pth',
    'network-bsds500.pth',
    'upernet_global_small.pth',
]
for name in names:
    command = f'wget https://huggingface.co/lllyasviel/ControlNet/resolve/main/annotator/ckpts/{name} -O {name}'
    out_path = pathlib.Path(f'ControlNet/annotator/ckpts/{name}')
    if out_path.exists():
        continue
    subprocess.run(shlex.split(command), cwd='ControlNet/annotator/ckpts/')

from app_canny import create_demo as create_demo_canny
from app_depth import create_demo as create_demo_depth
from app_fake_scribble import create_demo as create_demo_fake_scribble
from app_hed import create_demo as create_demo_hed
from app_hough import create_demo as create_demo_hough
from app_normal import create_demo as create_demo_normal
from app_pose import create_demo as create_demo_pose
from app_scribble import create_demo as create_demo_scribble
from app_scribble_interactive import \
    create_demo as create_demo_scribble_interactive
from app_seg import create_demo as create_demo_seg
from model import Model

DESCRIPTION = '''# ControlNet

This is an unofficial demo for [https://github.com/lllyasviel/ControlNet](https://github.com/lllyasviel/ControlNet).

If you are interested in trying out other base models, check out [this Space](https://huggingface.co/spaces/hysts/ControlNet-with-other-models) as well.
'''
if (SPACE_ID := os.getenv('SPACE_ID')) is not None:
    DESCRIPTION += f'''<p>For faster inference without waiting in queue, you may duplicate the space and upgrade to GPU in settings.<br/>
<a href="https://huggingface.co/spaces/{SPACE_ID}?duplicate=true">
<img style="margin-top: 0em; margin-bottom: 0em" src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a>
<p/>
'''

MAX_IMAGES = int(os.getenv('MAX_IMAGES', '3'))
DEFAULT_NUM_IMAGES = min(MAX_IMAGES, int(os.getenv('DEFAULT_NUM_IMAGES', '1')))

model = Model()

with gr.Blocks(css='style.css') as demo:
    gr.Markdown(DESCRIPTION)
    with gr.Tabs():
        with gr.TabItem('Canny'):
            create_demo_canny(model.process_canny,
                              max_images=MAX_IMAGES,
                              default_num_images=DEFAULT_NUM_IMAGES)
        with gr.TabItem('Hough'):
            create_demo_hough(model.process_hough,
                              max_images=MAX_IMAGES,
                              default_num_images=DEFAULT_NUM_IMAGES)
        with gr.TabItem('HED'):
            create_demo_hed(model.process_hed,
                            max_images=MAX_IMAGES,
                            default_num_images=DEFAULT_NUM_IMAGES)
        with gr.TabItem('Scribble'):
            create_demo_scribble(model.process_scribble,
                                 max_images=MAX_IMAGES,
                                 default_num_images=DEFAULT_NUM_IMAGES)
        with gr.TabItem('Scribble Interactive'):
            create_demo_scribble_interactive(
                model.process_scribble_interactive,
                max_images=MAX_IMAGES,
                default_num_images=DEFAULT_NUM_IMAGES)
        with gr.TabItem('Fake Scribble'):
            create_demo_fake_scribble(model.process_fake_scribble,
                                      max_images=MAX_IMAGES,
                                      default_num_images=DEFAULT_NUM_IMAGES)
        with gr.TabItem('Pose'):
            create_demo_pose(model.process_pose,
                             max_images=MAX_IMAGES,
                             default_num_images=DEFAULT_NUM_IMAGES)
        with gr.TabItem('Segmentation'):
            create_demo_seg(model.process_seg,
                            max_images=MAX_IMAGES,
                            default_num_images=DEFAULT_NUM_IMAGES)
        with gr.TabItem('Depth'):
            create_demo_depth(model.process_depth,
                              max_images=MAX_IMAGES,
                              default_num_images=DEFAULT_NUM_IMAGES)
        with gr.TabItem('Normal map'):
            create_demo_normal(model.process_normal,
                               max_images=MAX_IMAGES,
                               default_num_images=DEFAULT_NUM_IMAGES)

demo.queue(api_open=False).launch()