ginipick commited on
Commit
1160b91
·
verified ·
1 Parent(s): 10c000d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -49
app.py CHANGED
@@ -201,29 +201,6 @@ def _process(img: Image.Image, prompt: str | BoundingBox | None, bg_prompt: str
201
  except Exception as e:
202
  raise gr.Error(f"Processing failed: {str(e)}")
203
 
204
- def process_bbox(img: Image.Image, box_input: str) -> tuple[list[Image.Image], str]:
205
- try:
206
- if img is None or box_input.strip() == "":
207
- raise gr.Error("Please provide both image and bounding box coordinates")
208
-
209
- # Parse box coordinates
210
- try:
211
- coords = eval(box_input)
212
- if not isinstance(coords, list) or len(coords) != 4:
213
- raise ValueError("Invalid box format")
214
- bbox = tuple(int(x) for x in coords)
215
- except:
216
- raise gr.Error("Invalid box format. Please provide [xmin, ymin, xmax, ymax]")
217
-
218
- # Process the image
219
- results, download_path = _process(img, bbox)
220
-
221
- # Convert results to list for gallery
222
- gallery_images = list(results)
223
-
224
- return gallery_images, download_path
225
- except Exception as e:
226
- raise gr.Error(str(e))
227
 
228
 
229
  def on_change_bbox(prompts: dict[str, Any] | None):
@@ -233,21 +210,39 @@ def on_change_bbox(prompts: dict[str, Any] | None):
233
  def on_change_prompt(img: Image.Image | None, prompt: str | None, bg_prompt: str | None = None):
234
  return gr.update(interactive=bool(img and prompt))
235
 
236
- def process_prompt(img: Image.Image, prompt: str, bg_prompt: str | None = None) -> tuple[list[Image.Image], str]:
237
  try:
238
  if img is None or prompt.strip() == "":
239
  raise gr.Error("Please provide both image and prompt")
240
 
241
  # Process the image
242
- results, download_path = _process(img, prompt, bg_prompt)
243
 
244
- # Convert results to list for gallery
245
- gallery_images = list(results)
246
-
247
- return gallery_images, download_path
248
  except Exception as e:
249
  raise gr.Error(str(e))
250
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
 
252
  # Event handler functions 수정
253
  def update_process_button(img, prompt):
@@ -322,6 +317,7 @@ button.primary:hover {
322
 
323
  # UI 부분만 수정
324
  # Main Gradio app
 
325
  with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:
326
  gr.HTML("""
327
  <div class="main-title">
@@ -357,15 +353,20 @@ with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:
357
  )
358
 
359
  with gr.Column(scale=1):
360
- output_display = gr.Gallery(
361
- label="Results",
362
- show_download_button=False,
363
- visible=True
364
- )
365
- download_btn = gr.DownloadButton(
366
- "Download Result",
367
- visible=True
368
- )
 
 
 
 
 
369
 
370
  # Box-based extraction tab
371
  with gr.TabItem("Extract by Box"):
@@ -388,15 +389,20 @@ with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:
388
  )
389
 
390
  with gr.Column(scale=1):
391
- box_output = gr.Gallery(
392
- label="Results",
393
- show_download_button=False,
394
- visible=True
395
- )
396
- box_download = gr.DownloadButton(
397
- "Download Result",
398
- visible=True
399
- )
 
 
 
 
 
400
 
401
  # Event bindings
402
  input_image.change(
@@ -416,7 +422,7 @@ with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:
416
  process_btn.click(
417
  fn=process_prompt,
418
  inputs=[input_image, text_prompt, bg_prompt],
419
- outputs=[output_display, download_btn],
420
  queue=True
421
  )
422
 
@@ -437,7 +443,7 @@ with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:
437
  box_btn.click(
438
  fn=process_bbox,
439
  inputs=[box_image, box_input],
440
- outputs=[box_output, box_download],
441
  queue=True
442
  )
443
 
 
201
  except Exception as e:
202
  raise gr.Error(f"Processing failed: {str(e)}")
203
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
204
 
205
 
206
  def on_change_bbox(prompts: dict[str, Any] | None):
 
210
  def on_change_prompt(img: Image.Image | None, prompt: str | None, bg_prompt: str | None = None):
211
  return gr.update(interactive=bool(img and prompt))
212
 
213
+ def process_prompt(img: Image.Image, prompt: str, bg_prompt: str | None = None) -> tuple[Image.Image, Image.Image]:
214
  try:
215
  if img is None or prompt.strip() == "":
216
  raise gr.Error("Please provide both image and prompt")
217
 
218
  # Process the image
219
+ results, _ = _process(img, prompt, bg_prompt)
220
 
221
+ # 합성된 이미지와 추출된 이미지만 반환
222
+ return results[1], results[2]
 
 
223
  except Exception as e:
224
  raise gr.Error(str(e))
225
 
226
+ def process_bbox(img: Image.Image, box_input: str) -> tuple[Image.Image, Image.Image]:
227
+ try:
228
+ if img is None or box_input.strip() == "":
229
+ raise gr.Error("Please provide both image and bounding box coordinates")
230
+
231
+ try:
232
+ coords = eval(box_input)
233
+ if not isinstance(coords, list) or len(coords) != 4:
234
+ raise ValueError("Invalid box format")
235
+ bbox = tuple(int(x) for x in coords)
236
+ except:
237
+ raise gr.Error("Invalid box format. Please provide [xmin, ymin, xmax, ymax]")
238
+
239
+ # Process the image
240
+ results, _ = _process(img, bbox)
241
+
242
+ # 합성된 이미지와 추출된 이미지만 반환
243
+ return results[1], results[2]
244
+ except Exception as e:
245
+ raise gr.Error(str(e))
246
 
247
  # Event handler functions 수정
248
  def update_process_button(img, prompt):
 
317
 
318
  # UI 부분만 수정
319
  # Main Gradio app
320
+ # UI 부분 수정
321
  with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:
322
  gr.HTML("""
323
  <div class="main-title">
 
353
  )
354
 
355
  with gr.Column(scale=1):
356
+ with gr.Row():
357
+ combined_image = gr.Image(
358
+ label="Combined Result",
359
+ show_download_button=True,
360
+ type="pil",
361
+ height=512
362
+ )
363
+ with gr.Row():
364
+ extracted_image = gr.Image(
365
+ label="Extracted Object",
366
+ show_download_button=True,
367
+ type="pil",
368
+ height=256
369
+ )
370
 
371
  # Box-based extraction tab
372
  with gr.TabItem("Extract by Box"):
 
389
  )
390
 
391
  with gr.Column(scale=1):
392
+ with gr.Row():
393
+ box_combined_image = gr.Image(
394
+ label="Combined Result",
395
+ show_download_button=True,
396
+ type="pil",
397
+ height=512
398
+ )
399
+ with gr.Row():
400
+ box_extracted_image = gr.Image(
401
+ label="Extracted Object",
402
+ show_download_button=True,
403
+ type="pil",
404
+ height=256
405
+ )
406
 
407
  # Event bindings
408
  input_image.change(
 
422
  process_btn.click(
423
  fn=process_prompt,
424
  inputs=[input_image, text_prompt, bg_prompt],
425
+ outputs=[combined_image, extracted_image], # 출력 변경
426
  queue=True
427
  )
428
 
 
443
  box_btn.click(
444
  fn=process_bbox,
445
  inputs=[box_image, box_input],
446
+ outputs=[box_combined_image, box_extracted_image], # 출력 변경
447
  queue=True
448
  )
449