Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -57,15 +57,6 @@ def generate(image):
|
|
57 |
return mesh_path2.name
|
58 |
|
59 |
|
60 |
-
# Функция для отображения загрузки
|
61 |
-
def set_loader_context(context):
|
62 |
-
return f"<div id='loading-bar' class='loader-{context}' style='display: block;'></div>"
|
63 |
-
|
64 |
-
|
65 |
-
def stop_loading():
|
66 |
-
return "<div id='loading-bar' style='display: none;'></div>"
|
67 |
-
|
68 |
-
|
69 |
# Настройка темы и CSS
|
70 |
class CustomTheme(gr.themes.Base):
|
71 |
def __init__(self):
|
@@ -82,17 +73,9 @@ class CustomTheme(gr.themes.Base):
|
|
82 |
|
83 |
|
84 |
css = """
|
85 |
-
/*
|
86 |
-
|
87 |
-
|
88 |
-
height: 0;
|
89 |
-
margin: 0;
|
90 |
-
padding: 0;
|
91 |
-
overflow: hidden;
|
92 |
-
}
|
93 |
-
/* Лоадер (анимация) */
|
94 |
-
#loading-bar {
|
95 |
-
display: none; /* Скрыт по умолчанию */
|
96 |
position: absolute;
|
97 |
top: 50%;
|
98 |
left: 50%;
|
@@ -100,36 +83,30 @@ footer {
|
|
100 |
width: 60px;
|
101 |
height: 60px;
|
102 |
border: 8px solid #f3f3f3;
|
103 |
-
border-top: 8px solid #5271FF;
|
104 |
border-radius: 50%;
|
105 |
animation: spin 1s linear infinite;
|
106 |
}
|
|
|
107 |
/* Анимация вращения */
|
108 |
@keyframes spin {
|
109 |
0% { transform: translate(-50%, -50%) rotate(0deg); }
|
110 |
100% { transform: translate(-50%, -50%) rotate(360deg); }
|
111 |
}
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
height: 100%;
|
117 |
-
top: 0;
|
118 |
-
left: 0;
|
119 |
}
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
top: 0;
|
125 |
-
left: 0;
|
126 |
}
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
top: 0;
|
132 |
-
left: 0;
|
133 |
}
|
134 |
"""
|
135 |
|
@@ -160,45 +137,42 @@ with gr.Blocks(theme=CustomTheme(), css=css) as demo:
|
|
160 |
step=0.05,
|
161 |
)
|
162 |
do_remove_background = gr.Checkbox(
|
163 |
-
label="Remove Background",
|
164 |
value=True,
|
165 |
)
|
166 |
submit = gr.Button("Generate", elem_classes="generate-button")
|
167 |
-
|
|
|
168 |
output_model = gr.Model3D(
|
169 |
label="Generated GLB Model",
|
170 |
interactive=False,
|
171 |
-
elem_classes="gr-model3d-container",
|
172 |
)
|
|
|
173 |
|
174 |
submit.click(
|
175 |
-
fn=lambda:
|
176 |
inputs=[],
|
177 |
-
outputs=[
|
178 |
).then(
|
179 |
fn=check_input_image,
|
180 |
inputs=[input_image],
|
181 |
outputs=[]
|
182 |
-
).then(
|
183 |
-
fn=lambda image, do_remove_bg, ratio: set_loader_context("ProcessedImage"),
|
184 |
-
inputs=[input_image, do_remove_background, foreground_ratio],
|
185 |
-
outputs=[loading_bar],
|
186 |
).then(
|
187 |
fn=preprocess,
|
188 |
inputs=[input_image, do_remove_background, foreground_ratio],
|
189 |
-
outputs=[processed_image]
|
190 |
).then(
|
191 |
-
fn=lambda image
|
192 |
-
inputs=[
|
193 |
-
outputs=[
|
194 |
).then(
|
195 |
fn=generate,
|
196 |
inputs=[processed_image],
|
197 |
-
outputs=[output_model]
|
198 |
).then(
|
199 |
-
fn=
|
200 |
inputs=[],
|
201 |
-
outputs=[
|
202 |
)
|
203 |
|
204 |
# Запуск приложения
|
|
|
57 |
return mesh_path2.name
|
58 |
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
# Настройка темы и CSS
|
61 |
class CustomTheme(gr.themes.Base):
|
62 |
def __init__(self):
|
|
|
73 |
|
74 |
|
75 |
css = """
|
76 |
+
/* Общий стиль для лоадера */
|
77 |
+
.loading-bar {
|
78 |
+
display: none;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
position: absolute;
|
80 |
top: 50%;
|
81 |
left: 50%;
|
|
|
83 |
width: 60px;
|
84 |
height: 60px;
|
85 |
border: 8px solid #f3f3f3;
|
86 |
+
border-top: 8px solid #5271FF;
|
87 |
border-radius: 50%;
|
88 |
animation: spin 1s linear infinite;
|
89 |
}
|
90 |
+
|
91 |
/* Анимация вращения */
|
92 |
@keyframes spin {
|
93 |
0% { transform: translate(-50%, -50%) rotate(0deg); }
|
94 |
100% { transform: translate(-50%, -50%) rotate(360deg); }
|
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 |
|
|
|
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 |
+
fn=lambda: "<div id='drop-image-loader' class='loading-bar'></div>",
|
154 |
inputs=[],
|
155 |
+
outputs=[drop_loader],
|
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 |
+
fn=lambda: "<div id='processed-image-loader' class='loading-bar'></div>",
|
166 |
+
inputs=[],
|
167 |
+
outputs=[process_loader],
|
168 |
).then(
|
169 |
fn=generate,
|
170 |
inputs=[processed_image],
|
171 |
+
outputs=[output_model],
|
172 |
).then(
|
173 |
+
fn=lambda: "<div id='glb-loader' class='loading-bar'></div>",
|
174 |
inputs=[],
|
175 |
+
outputs=[model_loader],
|
176 |
)
|
177 |
|
178 |
# Запуск приложения
|