Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
@@ -185,6 +185,7 @@ def calculate_dimensions(aspect_ratio: str, base_size: int = 512) -> tuple[int,
|
|
185 |
return base_size * 4 // 3, base_size
|
186 |
return base_size, base_size
|
187 |
|
|
|
188 |
def generate_background(prompt: str, aspect_ratio: str) -> Image.Image:
|
189 |
try:
|
190 |
width, height = calculate_dimensions(aspect_ratio)
|
@@ -217,7 +218,6 @@ def generate_background(prompt: str, aspect_ratio: str) -> Image.Image:
|
|
217 |
print(f"Background generation error: {str(e)}")
|
218 |
return Image.new('RGB', (512, 512), 'white')
|
219 |
|
220 |
-
|
221 |
def create_position_grid():
|
222 |
return """
|
223 |
<div class="position-grid" style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; width: 150px; margin: auto;">
|
@@ -274,22 +274,26 @@ def combine_with_background(foreground: Image.Image, background: Image.Image,
|
|
274 |
result.paste(scaled_foreground, (x, y), scaled_foreground)
|
275 |
return result
|
276 |
|
277 |
-
@spaces.GPU
|
278 |
def _gpu_process(img: Image.Image, prompt: str | BoundingBox | None) -> tuple[Image.Image, BoundingBox | None, list[str]]:
|
279 |
time_log: list[str] = []
|
280 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
281 |
t0 = time.time()
|
282 |
-
|
283 |
-
time_log.append(f"
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
bbox = prompt
|
289 |
-
t0 = time.time()
|
290 |
-
mask = segmenter(img, bbox)
|
291 |
-
time_log.append(f"segment: {time.time() - t0}")
|
292 |
-
return mask, bbox, time_log
|
293 |
|
294 |
def _process(img: Image.Image, prompt: str | BoundingBox | None, bg_prompt: str | None = None, aspect_ratio: str = "1:1") -> tuple[tuple[Image.Image, Image.Image, Image.Image], gr.DownloadButton]:
|
295 |
try:
|
|
|
185 |
return base_size * 4 // 3, base_size
|
186 |
return base_size, base_size
|
187 |
|
188 |
+
@spaces.GPU(duration=40) # 배경 생성은 30초 제한
|
189 |
def generate_background(prompt: str, aspect_ratio: str) -> Image.Image:
|
190 |
try:
|
191 |
width, height = calculate_dimensions(aspect_ratio)
|
|
|
218 |
print(f"Background generation error: {str(e)}")
|
219 |
return Image.new('RGB', (512, 512), 'white')
|
220 |
|
|
|
221 |
def create_position_grid():
|
222 |
return """
|
223 |
<div class="position-grid" style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; width: 150px; margin: auto;">
|
|
|
274 |
result.paste(scaled_foreground, (x, y), scaled_foreground)
|
275 |
return result
|
276 |
|
277 |
+
@spaces.GPU(duration=120) # 60초 동안만 GPU 리소스 사용
|
278 |
def _gpu_process(img: Image.Image, prompt: str | BoundingBox | None) -> tuple[Image.Image, BoundingBox | None, list[str]]:
|
279 |
time_log: list[str] = []
|
280 |
+
try:
|
281 |
+
if isinstance(prompt, str):
|
282 |
+
t0 = time.time()
|
283 |
+
bbox = gd_detect(img, prompt)
|
284 |
+
time_log.append(f"detect: {time.time() - t0}")
|
285 |
+
if not bbox:
|
286 |
+
print(time_log[0])
|
287 |
+
raise gr.Error("No object detected")
|
288 |
+
else:
|
289 |
+
bbox = prompt
|
290 |
t0 = time.time()
|
291 |
+
mask = segmenter(img, bbox)
|
292 |
+
time_log.append(f"segment: {time.time() - t0}")
|
293 |
+
return mask, bbox, time_log
|
294 |
+
except Exception as e:
|
295 |
+
print(f"GPU process error: {str(e)}")
|
296 |
+
raise
|
|
|
|
|
|
|
|
|
|
|
297 |
|
298 |
def _process(img: Image.Image, prompt: str | BoundingBox | None, bg_prompt: str | None = None, aspect_ratio: str = "1:1") -> tuple[tuple[Image.Image, Image.Image, Image.Image], gr.DownloadButton]:
|
299 |
try:
|