ginipick commited on
Commit
3a47996
·
verified ·
1 Parent(s): 34af73e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +66 -60
app.py CHANGED
@@ -20,20 +20,24 @@ from transformers import GroundingDinoForObjectDetection, GroundingDinoProcessor
20
  from diffusers import FluxPipeline
21
  from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM
22
  import gc
 
23
 
24
- def clear_memory():
25
- """메모리 정리 함수"""
26
- gc.collect()
27
- try:
28
- if torch.cuda.is_available():
29
- with torch.cuda.device(0): # 명시적으로 device 0 사용
30
- torch.cuda.empty_cache()
31
- except:
32
- pass
33
 
34
  # GPU 설정
35
  device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # 명시적으로 cuda:0 지정
36
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  # GPU 설정을 try-except로 감싸기
38
  if torch.cuda.is_available():
39
  try:
@@ -481,21 +485,61 @@ button.primary:hover {
481
  }
482
  """
483
 
484
- ###--------------ZERO GPU 필수/ 메모리 관리 공통 --------------------###
485
- def clear_memory():
486
- gc.collect()
487
- if torch.cuda.is_available():
488
- try:
489
- torch.cuda.empty_cache()
490
- torch.cuda.synchronize()
491
- except:
492
- pass
493
 
 
 
 
494
 
 
 
 
 
 
 
 
 
495
 
496
- # UI 구성
497
- # UI 구성 부분에서 process_btn을 위로 이동하고 position_grid.click 부분 제거
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
498
 
 
499
  # UI 구성
500
  with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:
501
  gr.HTML("""
@@ -505,46 +549,8 @@ with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:
505
  </div>
506
  """)
507
 
508
-
509
-
510
- # 예제 설명 섹션 추가
511
- gr.HTML("""
512
- <div style="margin-top: 50px; padding: 20px; background-color: #f8f9fa; border-radius: 10px;">
513
- <h2 style="text-align: center; color: #2196F3; margin-bottom: 30px;">How It Works: Step by Step Example</h2>
514
-
515
- <div style="display: flex; justify-content: space-around; align-items: center; flex-wrap: wrap; gap: 20px;">
516
- <div style="text-align: center; flex: 1; min-width: 250px; max-width: 300px;">
517
- <img src="file/aa1.png" style="width: 100%; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
518
- <h3 style="color: #333; margin: 15px 0;">Step 1: Original Image</h3>
519
- <p style="color: #666;">Upload your original image that contains the object you want to extract.</p>
520
- </div>
521
-
522
- <div style="text-align: center; flex: 1; min-width: 250px; max-width: 300px;">
523
- <img src="file/aa2.png" style="width: 100%; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
524
- <h3 style="color: #333; margin: 15px 0;">Step 2: Extracted Object</h3>
525
- <p style="color: #666;">Use prompts to identify and extract specific objects from your image.</p>
526
- </div>
527
-
528
- <div style="text-align: center; flex: 1; min-width: 250px; max-width: 300px;">
529
- <img src="file/aa3.png" style="width: 100%; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
530
- <h3 style="color: #333; margin: 15px 0;">Step 3: Final Result</h3>
531
- <p style="color: #666;">The extracted object is placed on an AI-generated background based on your description.</p>
532
- </div>
533
- </div>
534
-
535
- <div style="margin-top: 30px; text-align: center; padding: 20px; background-color: #e3f2fd; border-radius: 8px;">
536
- <h4 style="color: #1976D2; margin-bottom: 10px;">Key Features:</h4>
537
- <ul style="list-style: none; padding: 0;">
538
- <li style="margin: 5px 0;">✨ Precise object extraction using AI</li>
539
- <li style="margin: 5px 0;">🎨 Custom background generation</li>
540
- <li style="margin: 5px 0;">🔄 Flexible object positioning and sizing</li>
541
- <li style="margin: 5px 0;">📐 Multiple aspect ratio support</li>
542
- </ul>
543
- </div>
544
- </div>
545
- """)
546
-
547
- # 나머지 기존 코드...
548
 
549
  with gr.Row():
550
  with gr.Column(scale=1):
 
20
  from diffusers import FluxPipeline
21
  from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM
22
  import gc
23
+ import base64
24
 
 
 
 
 
 
 
 
 
 
25
 
26
  # GPU 설정
27
  device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # 명시적으로 cuda:0 지정
28
 
29
+ ###--------------ZERO GPU 필수/ 메모리 관리 공통 --------------------###
30
+ def clear_memory():
31
+ gc.collect()
32
+ if torch.cuda.is_available():
33
+ try:
34
+ torch.cuda.empty_cache()
35
+ torch.cuda.synchronize()
36
+ except:
37
+ pass
38
+
39
+ ###---------------------------------------------------------------
40
+
41
  # GPU 설정을 try-except로 감싸기
42
  if torch.cuda.is_available():
43
  try:
 
485
  }
486
  """
487
 
 
 
 
 
 
 
 
 
 
488
 
489
+ def get_image_base64(image_path):
490
+ with open(image_path, "rb") as image_file:
491
+ return base64.b64encode(image_file.read()).decode()
492
 
493
+ # 이미지를 Base64로 변환
494
+ try:
495
+ example_img1 = get_image_base64("aa1.png")
496
+ example_img2 = get_image_base64("aa2.png")
497
+ example_img3 = get_image_base64("aa3.png")
498
+ except Exception as e:
499
+ print(f"Error loading example images: {e}")
500
+ example_img1 = example_img2 = example_img3 = ""
501
 
502
+ # HTML 템플릿 수정
503
+ example_html = f"""
504
+ <div style="margin-top: 50px; padding: 20px; background-color: #f8f9fa; border-radius: 10px;">
505
+ <h2 style="text-align: center; color: #2196F3; margin-bottom: 30px;">How It Works: Step by Step Guide</h2>
506
+
507
+ <div style="display: flex; justify-content: space-around; align-items: center; flex-wrap: wrap; gap: 20px;">
508
+ <div style="text-align: center; flex: 1; min-width: 250px; max-width: 300px;">
509
+ <img src="data:image/png;base64,{example_img1}"
510
+ style="width: 100%; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
511
+ <h3 style="color: #333; margin: 15px 0;">Step 1: Original Image</h3>
512
+ <p style="color: #666;">Upload your original image containing the object you want to extract.</p>
513
+ </div>
514
+
515
+ <div style="text-align: center; flex: 1; min-width: 250px; max-width: 300px;">
516
+ <img src="data:image/png;base64,{example_img2}"
517
+ style="width: 100%; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
518
+ <h3 style="color: #333; margin: 15px 0;">Step 2: Object Extraction</h3>
519
+ <p style="color: #666;">AI automatically detects and extracts the specified object.</p>
520
+ </div>
521
+
522
+ <div style="text-align: center; flex: 1; min-width: 250px; max-width: 300px;">
523
+ <img src="data:image/png;base64,{example_img3}"
524
+ style="width: 100%; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
525
+ <h3 style="color: #333; margin: 15px 0;">Step 3: Final Result</h3>
526
+ <p style="color: #666;">The extracted object is placed on an AI-generated background.</p>
527
+ </div>
528
+ </div>
529
+
530
+ <div style="margin-top: 30px; text-align: center; padding: 20px; background-color: #e3f2fd; border-radius: 8px;">
531
+ <h4 style="color: #1976D2; margin-bottom: 10px;">Key Features:</h4>
532
+ <ul style="list-style: none; padding: 0;">
533
+ <li style="margin: 5px 0;">✨ Advanced AI-powered object detection and extraction</li>
534
+ <li style="margin: 5px 0;">🎨 Custom background generation with text prompts</li>
535
+ <li style="margin: 5px 0;">🔄 Flexible object positioning and sizing options</li>
536
+ <li style="margin: 5px 0;">📐 Multiple aspect ratio support for various use cases</li>
537
+ </ul>
538
+ </div>
539
+ </div>
540
+ """
541
 
542
+
543
  # UI 구성
544
  with gr.Blocks(theme=gr.themes.Soft(), css=css) as demo:
545
  gr.HTML("""
 
549
  </div>
550
  """)
551
 
552
+ # 예제 섹션 추가
553
+ gr.HTML(example_html)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
554
 
555
  with gr.Row():
556
  with gr.Column(scale=1):