Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -86,7 +86,7 @@ class CustomTheme(gr.themes.Base):
|
|
86 |
|
87 |
|
88 |
css = """
|
89 |
-
/* Скрываем нижний колонтитул */
|
90 |
footer {
|
91 |
visibility: hidden;
|
92 |
height: 0;
|
@@ -95,8 +95,9 @@ footer {
|
|
95 |
overflow: hidden;
|
96 |
}
|
97 |
|
98 |
-
|
99 |
-
|
|
|
100 |
|
101 |
/* Общий стиль */
|
102 |
body, input, textarea, select {
|
@@ -105,34 +106,60 @@ body, input, textarea, select {
|
|
105 |
color: #FFFFFF;
|
106 |
}
|
107 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
/* Убираем фон у контейнеров */
|
109 |
#processed-container, #glb-container {
|
110 |
-
|
111 |
-
|
|
|
|
|
112 |
}
|
113 |
|
114 |
/* Убираем фон и стили контейнера изображения */
|
115 |
.gr-image {
|
116 |
-
background-color: transparent !important;
|
117 |
-
border: none !important;
|
118 |
-
box-shadow: none !important;
|
119 |
}
|
120 |
|
121 |
-
/*
|
122 |
-
.
|
123 |
-
background-color: #
|
124 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
}
|
126 |
|
127 |
-
|
128 |
-
|
129 |
-
background-color: transparent !important;
|
130 |
-
color: #FFFFFF !important;
|
131 |
-
border: 1px solid #FFFFFF !important;
|
132 |
}
|
|
|
133 |
"""
|
134 |
# Интерфейс
|
135 |
-
with gr.Blocks(
|
136 |
with gr.Column():
|
137 |
# Заголовок
|
138 |
gr.Markdown("<span style='color: white; font-weight: bold;'>Upload and Process Your Image</span>")
|
@@ -150,7 +177,7 @@ with gr.Blocks(theme=CustomTheme(), css=css) as demo:
|
|
150 |
)
|
151 |
|
152 |
# Обработанное изображение и лоадер
|
153 |
-
with gr.Column(elem_id="processed-container"):
|
154 |
processed_image = gr.Image(
|
155 |
label="Processed Image",
|
156 |
interactive=False,
|
@@ -176,7 +203,7 @@ with gr.Blocks(theme=CustomTheme(), css=css) as demo:
|
|
176 |
submit = gr.Button("Generate", elem_classes="generate-button")
|
177 |
|
178 |
# Контейнер для модели GLB и лоадера
|
179 |
-
with gr.Column(elem_id="glb-container"):
|
180 |
output_model = gr.Model3D(
|
181 |
label="Generated GLB Model",
|
182 |
interactive=False,
|
@@ -185,35 +212,36 @@ with gr.Blocks(theme=CustomTheme(), css=css) as demo:
|
|
185 |
|
186 |
# Логика кнопки и цепочки событий
|
187 |
submit.click(
|
188 |
-
fn=start_loading_processed,
|
189 |
inputs=[],
|
190 |
outputs=[processed_loader],
|
191 |
).then(
|
192 |
-
fn=check_input_image,
|
193 |
inputs=[input_image],
|
194 |
outputs=[]
|
195 |
).then(
|
196 |
-
fn=preprocess,
|
197 |
inputs=[input_image, do_remove_background, foreground_ratio],
|
198 |
outputs=[processed_image]
|
199 |
).then(
|
200 |
-
fn=stop_loading_processed,
|
201 |
inputs=[],
|
202 |
outputs=[processed_loader],
|
203 |
).then(
|
204 |
-
fn=start_loading_glb,
|
205 |
inputs=[],
|
206 |
outputs=[glb_loader],
|
207 |
).then(
|
208 |
-
fn=generate,
|
209 |
inputs=[processed_image],
|
210 |
outputs=[output_model]
|
211 |
).then(
|
212 |
-
fn=stop_loading_glb,
|
213 |
inputs=[],
|
214 |
outputs=[glb_loader],
|
215 |
)
|
216 |
|
|
|
217 |
# Запуск приложения
|
218 |
demo.launch(
|
219 |
server_name="0.0.0.0",
|
|
|
86 |
|
87 |
|
88 |
css = """
|
89 |
+
/* Скрываем нижний колонтитул и системный лоадер */
|
90 |
footer {
|
91 |
visibility: hidden;
|
92 |
height: 0;
|
|
|
95 |
overflow: hidden;
|
96 |
}
|
97 |
|
98 |
+
#gradio-loader {
|
99 |
+
display: none !important;
|
100 |
+
}
|
101 |
|
102 |
/* Общий стиль */
|
103 |
body, input, textarea, select {
|
|
|
106 |
color: #FFFFFF;
|
107 |
}
|
108 |
|
109 |
+
/* Кастомный круговой лоадер */
|
110 |
+
#loading-bar-processed, #loading-bar-glb {
|
111 |
+
display: none; /* Скрыт по умолчанию */
|
112 |
+
position: absolute;
|
113 |
+
top: 50%;
|
114 |
+
left: 50%;
|
115 |
+
transform: translate(-50%, -50%);
|
116 |
+
width: 60px;
|
117 |
+
height: 60px;
|
118 |
+
border: 8px solid #f3f3f3; /* Светло-серый фон */
|
119 |
+
border-top: 8px solid #5271FF; /* Активная часть голубого цвета */
|
120 |
+
border-radius: 50%;
|
121 |
+
animation: spin 1s linear infinite; /* Анимация вращения */
|
122 |
+
}
|
123 |
+
|
124 |
+
@keyframes spin {
|
125 |
+
0% { transform: translate(-50%, -50%) rotate(0deg); }
|
126 |
+
100% { transform: translate(-50%, -50%) rotate(360deg); }
|
127 |
+
}
|
128 |
+
|
129 |
/* Убираем фон у контейнеров */
|
130 |
#processed-container, #glb-container {
|
131 |
+
width: 400px !important; /* Ширина как у Drop Image */
|
132 |
+
height: 300px !important; /* Высота как у Drop Image */
|
133 |
+
background-color: #191a1e !important; /* Цвет совпадает с бэкграундом */
|
134 |
+
border: none !important; /* Убираем границы */
|
135 |
}
|
136 |
|
137 |
/* Убираем фон и стили контейнера изображения */
|
138 |
.gr-image {
|
139 |
+
background-color: transparent !important; /* Прозрачный фон */
|
140 |
+
border: none !important; /* Убираем границы */
|
141 |
+
box-shadow: none !important; /* Убираем тени */
|
142 |
}
|
143 |
|
144 |
+
/* Стиль кнопки Generate */
|
145 |
+
.generate-button {
|
146 |
+
background-color: #5271FF !important; /* Голубой фон */
|
147 |
+
color: #FFFFFF !important; /* Белый текст */
|
148 |
+
border: none;
|
149 |
+
border-radius: 5px;
|
150 |
+
font-weight: bold;
|
151 |
+
padding: 10px 20px;
|
152 |
+
cursor: pointer;
|
153 |
+
transition: background-color 0.3s ease;
|
154 |
}
|
155 |
|
156 |
+
.generate-button:hover {
|
157 |
+
background-color: #395BB5 !important; /* Тёмно-голубой при наведении */
|
|
|
|
|
|
|
158 |
}
|
159 |
+
|
160 |
"""
|
161 |
# Интерфейс
|
162 |
+
with gr.Blocks(css=css) as demo:
|
163 |
with gr.Column():
|
164 |
# Заголовок
|
165 |
gr.Markdown("<span style='color: white; font-weight: bold;'>Upload and Process Your Image</span>")
|
|
|
177 |
)
|
178 |
|
179 |
# Обработанное изображение и лоадер
|
180 |
+
with gr.Column(elem_id="processed-container"):
|
181 |
processed_image = gr.Image(
|
182 |
label="Processed Image",
|
183 |
interactive=False,
|
|
|
203 |
submit = gr.Button("Generate", elem_classes="generate-button")
|
204 |
|
205 |
# Контейнер для модели GLB и лоадера
|
206 |
+
with gr.Column(elem_id="glb-container"):
|
207 |
output_model = gr.Model3D(
|
208 |
label="Generated GLB Model",
|
209 |
interactive=False,
|
|
|
212 |
|
213 |
# Логика кнопки и цепочки событий
|
214 |
submit.click(
|
215 |
+
fn=start_loading_processed,
|
216 |
inputs=[],
|
217 |
outputs=[processed_loader],
|
218 |
).then(
|
219 |
+
fn=check_input_image,
|
220 |
inputs=[input_image],
|
221 |
outputs=[]
|
222 |
).then(
|
223 |
+
fn=preprocess,
|
224 |
inputs=[input_image, do_remove_background, foreground_ratio],
|
225 |
outputs=[processed_image]
|
226 |
).then(
|
227 |
+
fn=stop_loading_processed,
|
228 |
inputs=[],
|
229 |
outputs=[processed_loader],
|
230 |
).then(
|
231 |
+
fn=start_loading_glb,
|
232 |
inputs=[],
|
233 |
outputs=[glb_loader],
|
234 |
).then(
|
235 |
+
fn=generate,
|
236 |
inputs=[processed_image],
|
237 |
outputs=[output_model]
|
238 |
).then(
|
239 |
+
fn=stop_loading_glb,
|
240 |
inputs=[],
|
241 |
outputs=[glb_loader],
|
242 |
)
|
243 |
|
244 |
+
|
245 |
# Запуск приложения
|
246 |
demo.launch(
|
247 |
server_name="0.0.0.0",
|