Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -73,13 +73,30 @@ class CustomTheme(gr.themes.Base):
|
|
73 |
|
74 |
|
75 |
css = """
|
76 |
-
/*
|
77 |
-
|
78 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
position: absolute;
|
80 |
-
top:
|
81 |
-
left:
|
82 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
width: 60px;
|
84 |
height: 60px;
|
85 |
border: 8px solid #f3f3f3;
|
@@ -88,25 +105,9 @@ css = """
|
|
88 |
animation: spin 1s linear infinite;
|
89 |
}
|
90 |
|
91 |
-
/* Анимация вращения */
|
92 |
@keyframes spin {
|
93 |
-
0% { transform:
|
94 |
-
100% { transform:
|
95 |
-
}
|
96 |
-
|
97 |
-
/* Лоадер для DropImage */
|
98 |
-
#drop-image-loader .loading-bar {
|
99 |
-
display: block;
|
100 |
-
}
|
101 |
-
|
102 |
-
/* Лоадер для Processed Image */
|
103 |
-
#processed-image-loader .loading-bar {
|
104 |
-
display: block;
|
105 |
-
}
|
106 |
-
|
107 |
-
/* Лоадер для GLB */
|
108 |
-
#glb-loader .loading-bar {
|
109 |
-
display: block;
|
110 |
}
|
111 |
"""
|
112 |
|
@@ -115,20 +116,25 @@ with gr.Blocks(theme=CustomTheme(), css=css) as demo:
|
|
115 |
with gr.Column():
|
116 |
gr.Markdown("<span style='color: white; font-weight: bold;'>Upload and Process Your Image</span>")
|
117 |
with gr.Row():
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
|
|
|
|
|
|
|
|
|
|
132 |
foreground_ratio = gr.Slider(
|
133 |
label="Foreground Ratio",
|
134 |
minimum=0.5,
|
@@ -137,45 +143,45 @@ with gr.Blocks(theme=CustomTheme(), css=css) as demo:
|
|
137 |
step=0.05,
|
138 |
)
|
139 |
do_remove_background = gr.Checkbox(
|
140 |
-
label="Remove Background",
|
141 |
value=True,
|
142 |
)
|
143 |
submit = gr.Button("Generate", elem_classes="generate-button")
|
144 |
-
drop_loader = gr.HTML("<div id='drop-image-loader' class='loading-bar'></div>")
|
145 |
-
process_loader = gr.HTML("<div id='processed-image-loader' class='loading-bar'></div>")
|
146 |
output_model = gr.Model3D(
|
147 |
label="Generated GLB Model",
|
148 |
interactive=False,
|
149 |
)
|
150 |
-
model_loader = gr.HTML("<div id='glb-loader' class='loading-bar'></div>")
|
151 |
|
152 |
submit.click(
|
153 |
-
|
154 |
inputs=[],
|
155 |
-
outputs=[
|
156 |
).then(
|
157 |
fn=check_input_image,
|
158 |
inputs=[input_image],
|
159 |
outputs=[]
|
|
|
|
|
|
|
|
|
160 |
).then(
|
161 |
fn=preprocess,
|
162 |
inputs=[input_image, do_remove_background, foreground_ratio],
|
163 |
-
outputs=[processed_image]
|
164 |
).then(
|
165 |
-
|
166 |
inputs=[],
|
167 |
-
outputs=[
|
168 |
).then(
|
169 |
fn=generate,
|
170 |
inputs=[processed_image],
|
171 |
-
outputs=[output_model]
|
172 |
).then(
|
173 |
-
|
174 |
inputs=[],
|
175 |
-
outputs=[
|
176 |
)
|
177 |
|
178 |
-
# Запуск приложения
|
179 |
demo.launch(
|
180 |
server_name="0.0.0.0",
|
181 |
server_port=7860,
|
|
|
73 |
|
74 |
|
75 |
css = """
|
76 |
+
/* Скрываем нижний колонтитул */
|
77 |
+
footer {
|
78 |
+
visibility: hidden;
|
79 |
+
height: 0;
|
80 |
+
margin: 0;
|
81 |
+
padding: 0;
|
82 |
+
overflow: hidden;
|
83 |
+
}
|
84 |
+
/* Лоадер */
|
85 |
+
.loader-container {
|
86 |
position: absolute;
|
87 |
+
top: 0;
|
88 |
+
left: 0;
|
89 |
+
width: 100%;
|
90 |
+
height: 100%;
|
91 |
+
display: flex;
|
92 |
+
justify-content: center;
|
93 |
+
align-items: center;
|
94 |
+
background: rgba(0, 0, 0, 0.5);
|
95 |
+
z-index: 100;
|
96 |
+
display: none;
|
97 |
+
}
|
98 |
+
|
99 |
+
#loading-bar {
|
100 |
width: 60px;
|
101 |
height: 60px;
|
102 |
border: 8px solid #f3f3f3;
|
|
|
105 |
animation: spin 1s linear infinite;
|
106 |
}
|
107 |
|
|
|
108 |
@keyframes spin {
|
109 |
+
0% { transform: rotate(0deg); }
|
110 |
+
100% { transform: rotate(360deg); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
}
|
112 |
"""
|
113 |
|
|
|
116 |
with gr.Column():
|
117 |
gr.Markdown("<span style='color: white; font-weight: bold;'>Upload and Process Your Image</span>")
|
118 |
with gr.Row():
|
119 |
+
with gr.Column():
|
120 |
+
input_image = gr.Image(
|
121 |
+
label="Upload Image",
|
122 |
+
image_mode="RGBA",
|
123 |
+
sources="upload",
|
124 |
+
type="pil",
|
125 |
+
width=400,
|
126 |
+
height=300,
|
127 |
+
)
|
128 |
+
gr.HTML("<div class='loader-container' id='loader-dropimage'><div id='loading-bar'></div></div>")
|
129 |
+
with gr.Column():
|
130 |
+
processed_image = gr.Image(
|
131 |
+
label="Processed Image",
|
132 |
+
interactive=False,
|
133 |
+
width=400,
|
134 |
+
height=300,
|
135 |
+
)
|
136 |
+
gr.HTML("<div class='loader-container' id='loader-processedimage'><div id='loading-bar'></div></div>")
|
137 |
+
gr.HTML("<div class='loader-container' id='loader-glb'><div id='loading-bar'></div></div>")
|
138 |
foreground_ratio = gr.Slider(
|
139 |
label="Foreground Ratio",
|
140 |
minimum=0.5,
|
|
|
143 |
step=0.05,
|
144 |
)
|
145 |
do_remove_background = gr.Checkbox(
|
146 |
+
label="Remove Background",
|
147 |
value=True,
|
148 |
)
|
149 |
submit = gr.Button("Generate", elem_classes="generate-button")
|
|
|
|
|
150 |
output_model = gr.Model3D(
|
151 |
label="Generated GLB Model",
|
152 |
interactive=False,
|
153 |
)
|
|
|
154 |
|
155 |
submit.click(
|
156 |
+
lambda: gr.update(visible=True, target="loader-dropimage"),
|
157 |
inputs=[],
|
158 |
+
outputs=[],
|
159 |
).then(
|
160 |
fn=check_input_image,
|
161 |
inputs=[input_image],
|
162 |
outputs=[]
|
163 |
+
).then(
|
164 |
+
lambda: gr.update(visible=True, target="loader-processedimage"),
|
165 |
+
inputs=[],
|
166 |
+
outputs=[],
|
167 |
).then(
|
168 |
fn=preprocess,
|
169 |
inputs=[input_image, do_remove_background, foreground_ratio],
|
170 |
+
outputs=[processed_image]
|
171 |
).then(
|
172 |
+
lambda: gr.update(visible=True, target="loader-glb"),
|
173 |
inputs=[],
|
174 |
+
outputs=[],
|
175 |
).then(
|
176 |
fn=generate,
|
177 |
inputs=[processed_image],
|
178 |
+
outputs=[output_model]
|
179 |
).then(
|
180 |
+
lambda: gr.update(visible=False, targets=["loader-dropimage", "loader-processedimage", "loader-glb"]),
|
181 |
inputs=[],
|
182 |
+
outputs=[],
|
183 |
)
|
184 |
|
|
|
185 |
demo.launch(
|
186 |
server_name="0.0.0.0",
|
187 |
server_port=7860,
|