openfree commited on
Commit
a7d8fec
Β·
verified Β·
1 Parent(s): b52175b

Update app-backup.py

Browse files
Files changed (1) hide show
  1. app-backup.py +92 -73
app-backup.py CHANGED
@@ -9,32 +9,26 @@ import torch
9
  import numpy as np
10
  from diffusers import DiffusionPipeline
11
  from transformers import pipeline as hf_pipeline
 
12
 
13
  ##############################################################################
14
  # 1) ZeroGPU ν™˜κ²½ 처리 + device, dtype μ„€μ •
15
  ##############################################################################
16
- ##############################################################################
17
- # 1) ZeroGPU ν™˜κ²½ 처리 + device, dtype μ„€μ •
18
- ##############################################################################
19
- # ZeroGPU μ΄ˆκΈ°ν™” μ‹œλ„
20
  try:
21
  import zerogpu
22
  zerogpu.init()
23
  print("ZeroGPU initialized successfully")
24
  device = "cuda" if torch.cuda.is_available() else "cpu"
25
  except ImportError:
26
- # ZeroGPUκ°€ μ„€μΉ˜λ˜μ§€ μ•Šμ€ 경우
27
  print("ZeroGPU package not installed, continuing without it")
28
  if os.getenv("ZERO_GPU"):
29
  print("ZeroGPU environment variable is set but zerogpu package is not installed.")
30
  device = "cuda" if torch.cuda.is_available() else "cpu"
31
  except Exception as e:
32
- # ZeroGPU μ΄ˆκΈ°ν™” 쀑 λ‹€λ₯Έ 였λ₯˜κ°€ λ°œμƒν•œ 경우
33
  print(f"Error initializing ZeroGPU: {e}")
34
  print("Continuing without ZeroGPU")
35
  device = "cuda" if torch.cuda.is_available() else "cpu"
36
 
37
- # GPU일 λ•Œλ§Œ bfloat16, κ·Έ μ™Έμ—λŠ” float32
38
  dtype = torch.bfloat16 if device == "cuda" else torch.float32
39
 
40
  print(f"Using device: {device}, dtype: {dtype}")
@@ -57,7 +51,6 @@ try:
57
  print("Models loaded successfully")
58
  except Exception as e:
59
  print(f"Error loading models: {e}")
60
- # λͺ¨λΈ λ‘œλ“œ μ—λŸ¬ 처리λ₯Ό μœ„ν•œ 더미 ν•¨μˆ˜λ“€
61
  def dummy_translator(text):
62
  return [{'translation_text': text}]
63
 
@@ -87,23 +80,48 @@ def contains_korean(text):
87
  return False
88
 
89
  ##############################################################################
90
- # 이미지 생성 ν•¨μˆ˜
91
  ##############################################################################
92
- def generate_design_image(prompt, seed=42, randomize_seed=True, width=1024, height=1024, num_inference_steps=4):
93
  """
94
- μƒμ„±λœ ν™•μž₯ 아이디어 ν…μŠ€νŠΈ(prompt)λ₯Ό μž…λ ₯λ°›μ•„,
95
- ν•„μš”μ‹œ ν•œκ΅­μ–΄λ₯Ό μ˜μ–΄λ‘œ λ²ˆμ—­ν•œ ν›„ DiffusionPipeline으둜 이미지λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
96
  """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  original_prompt = prompt
98
  translated = False
99
 
100
- # ν•œκ΅­μ–΄κ°€ ν¬ν•¨λ˜μ–΄ 있으면 μ˜μ–΄λ‘œ λ²ˆμ—­
 
 
 
 
 
 
101
  if contains_korean(prompt):
102
- translation = translator(prompt)
 
103
  prompt = translation[0]['translation_text']
104
  translated = True
105
 
106
- # 랜덀 μ‹œλ“œ μ„€μ •
107
  if randomize_seed:
108
  seed = random.randint(0, MAX_SEED)
109
 
@@ -120,6 +138,7 @@ def generate_design_image(prompt, seed=42, randomize_seed=True, width=1024, heig
120
 
121
  return image
122
 
 
123
  ##############################################################################
124
  # λ‘œκΉ… μ„€μ •
125
  ##############################################################################
@@ -167,12 +186,17 @@ def choose_alternative(transformation):
167
  # 물리적 λ³€ν™” μΉ΄ν…Œκ³ λ¦¬ 사전 (총 15개)
168
  ##############################################################################
169
  physical_transformation_categories = {
170
- "곡간 이동": [
171
- "μ•ž/λ’€ 이동", "쒌/우 이동", "μœ„/μ•„λž˜ 이동", "μ„Έλ‘œμΆ• νšŒμ „(고개 λ„λ•μž„)",
172
- "κ°€λ‘œμΆ• νšŒμ „(고개 μ “κΈ°)", "길이좕 νšŒμ „(μ˜†μœΌλ‘œ κΈ°μšΈμž„)", "원 μš΄λ™", "λ‚˜μ„ ν˜• 이동",
173
- "관성에 μ˜ν•œ λ―Έλ„λŸ¬μ§", "νšŒμ „μΆ• λ³€ν™”", "λΆˆκ·œμΉ™ νšŒμ „", "흔듀림 μš΄λ™", "포물선 이동",
174
- "무쀑λ ₯ λΆ€μœ ", "수면 μœ„ λΆ€μœ ", "점프/도약", "μŠ¬λΌμ΄λ”©", "둀링", "자유 λ‚™ν•˜",
175
- "왕볡 μš΄λ™", "탄성 νŠ•κΉ€", "관톡", "νšŒν”Ό μ›€μ§μž„", "μ§€κ·Έμž¬κ·Έ 이동", "μŠ€μœ™ μš΄λ™"
 
 
 
 
 
176
  ],
177
  "크기와 ν˜•νƒœ λ³€ν™”": [
178
  "λΆ€ν”Ό λŠ˜μ–΄λ‚¨/쀄어듦", "길이 λŠ˜μ–΄λ‚¨/쀄어듦", "λ„ˆλΉ„ λŠ˜μ–΄λ‚¨/쀄어듦", "높이 λŠ˜μ–΄λ‚¨/쀄어듦",
@@ -190,7 +214,10 @@ physical_transformation_categories = {
190
  "광택/윀기 λ³€ν™”", "색쑰/채도 λ³€ν™”", "λ°œκ΄‘/ν˜•κ΄‘", "λΉ› μ‚°λž€ 효과",
191
  "λΉ› 흑수 λ³€ν™”", "반투λͺ… 효과", "그림자 효과 λ³€ν™”", "μžμ™Έμ„  λ°˜μ‘ λ³€ν™”",
192
  "μ•Όκ΄‘ 효과"
193
- ],
 
 
 
194
  "물질의 μƒνƒœ λ³€ν™”": [
195
  "고체/앑체/기체 μ „ν™˜", "κ²°μ •ν™”/μš©ν•΄", "μ‚°ν™”/뢀식", "딱딱해짐/λΆ€λ“œλŸ¬μ›Œμ§",
196
  "특수 μƒνƒœ μ „ν™˜", "λ¬΄μ •ν˜•/κ²°μ •ν˜• μ „ν™˜", "μ„±λΆ„ 뢄리", "λ―Έμ„Έ μž…μž ν˜•μ„±/λΆ„ν•΄",
@@ -199,14 +226,7 @@ physical_transformation_categories = {
199
  "건쑰/슡윀", "팽윀/μˆ˜μΆ•", "동결/해동", "풍화/침식", "μΆ©μ „/λ°©μ „",
200
  "κ²°ν•©/뢄리", "발효/λΆ€νŒ¨"
201
  ],
202
- "μ—΄ κ΄€λ ¨ λ³€ν™”": [
203
- "μ˜¨λ„ μƒμŠΉ/ν•˜κ°•", "열에 μ˜ν•œ 팽창/μˆ˜μΆ•", "μ—΄ 전달/차단", "μ••λ ₯ μƒμŠΉ/ν•˜κ°•",
204
- "μ—΄ 변화에 λ”°λ₯Έ μžν™”", "λ¬΄μ§ˆμ„œλ„ λ³€ν™”", "μ—΄μ „κΈ° ν˜„μƒ", "자기μž₯에 μ˜ν•œ μ—΄ λ³€ν™”",
205
- "μƒνƒœλ³€ν™” 쀑 μ—΄ μ €μž₯/방좜", "μ—΄ 슀트레슀 λ°œμƒ/ν•΄μ†Œ", "κΈ‰κ²©ν•œ μ˜¨λ„ λ³€ν™” 영ν–₯",
206
- "볡사열에 μ˜ν•œ 냉각/κ°€μ—΄", "λ°œμ—΄/흑열", "μ—΄ 뢄포 λ³€ν™”", "μ—΄ λ°˜μ‚¬/흑수",
207
- "냉각 응좕", "μ—΄ ν™œμ„±ν™”", "μ—΄ 변색", "μ—΄ 팽창 κ³„μˆ˜ λ³€ν™”", "μ—΄ μ•ˆμ •μ„± λ³€ν™”",
208
- "λ‚΄μ—΄μ„±/λ‚΄ν•œμ„±", "μžκΈ°λ°œμ—΄", "열적 ν‰ν˜•/λΆˆκ· ν˜•", "열적 λ³€ν˜•", "μ—΄ λΆ„μ‚°/집쀑"
209
- ],
210
  "μ›€μ§μž„ νŠΉμ„± λ³€ν™”": [
211
  "가속/감속", "일정 속도 μœ μ§€", "진동/진동 κ°μ†Œ", "λΆ€λ”ͺ힘/νŠ•κΉ€",
212
  "νšŒμ „ 속도 증가/κ°μ†Œ", "νšŒμ „ λ°©ν–₯ λ³€ν™”", "λΆˆκ·œμΉ™ μ›€μ§μž„", "λ©ˆμ·„λ‹€ λ―Έλ„λŸ¬μ§€λŠ” ν˜„μƒ",
@@ -223,22 +243,12 @@ physical_transformation_categories = {
223
  "μ™ΈλΆ€ ꡬ쑰 λ³€ν™”", "쀑심좕 이동", "κ· ν˜•μ  λ³€ν™”", "계측 ꡬ쑰 λ³€ν™”", "μ§€μ§€ ꡬ쑰 λ³€ν™”",
224
  "응λ ₯ λΆ„μ‚° ꡬ쑰", "좩격 흑수 ꡬ쑰", "κ·Έλ¦¬λ“œ/맀트릭슀 ꡬ쑰 λ³€ν™”", "μƒν˜Έ μ—°κ²°μ„± λ³€ν™”"
225
  ],
226
- "μ „κΈ° 및 자기 λ³€ν™”": [
227
- "μžμ„± 생성/μ†Œλ©Έ", "μ „ν•˜λŸ‰ 증가/κ°μ†Œ", "μ „κΈ°μž₯ 생성/μ†Œλ©Έ", "자기μž₯ 생성/μ†Œλ©Έ",
228
- "μ΄ˆμ „λ„ μƒνƒœ μ „ν™˜", "κ°•μœ μ „μ²΄ νŠΉμ„± λ³€ν™”", "μ–‘μž μƒνƒœ λ³€ν™”", "ν”ŒλΌμ¦ˆλ§ˆ μƒνƒœ ν˜•μ„±/μ†Œλ©Έ",
229
- "μŠ€ν•€νŒŒ 전달", "빛에 μ˜ν•œ μ „κΈ° λ°œμƒ", "μ••λ ₯에 μ˜ν•œ μ „κΈ° λ°œμƒ", "자기μž₯ 속 μ „λ₯˜ λ³€ν™”",
230
- "μ „κΈ° μ €ν•­ λ³€ν™”", "μ „κΈ° 전도성 λ³€ν™”", "μ •μ „κΈ° λ°œμƒ/λ°©μ „", "μ „μžκΈ° μœ λ„",
231
- "μ „μžκΈ°νŒŒ 방좜/흑수", "μ „κΈ° μš©λŸ‰ λ³€ν™”", "자기 이λ ₯ ν˜„μƒ", "전기적 λΆ„κ·Ή",
232
- "μ „μž 흐름 λ°©ν–₯ λ³€ν™”", "전기적 곡λͺ…", "전기적 차폐/λ…ΈμΆœ", "자기 차폐/λ…ΈμΆœ",
233
- "자기μž₯ λ°©ν–₯ μ •λ ¬"
234
- ],
235
- "화학적 λ³€ν™”": [
236
- "ν‘œλ©΄ μ½”νŒ… λ³€ν™”", "물질 μ„±λΆ„ λ³€ν™”", "ν™”ν•™ λ°˜μ‘ λ³€ν™”", "촉맀 μž‘μš© μ‹œμž‘/쀑단",
237
- "빛에 μ˜ν•œ ν™”ν•™ λ°˜μ‘", "전기에 μ˜ν•œ ν™”ν•™ λ°˜μ‘", "λ‹¨λΆ„μžλ§‰ ν˜•μ„±", "λΆ„μž μˆ˜μ€€ 계산 λ³€ν™”",
238
- "μžμ—° λͺ¨λ°© ν‘œλ©΄ λ³€ν™”", "ν™˜κ²½ λ°˜μ‘ν˜• 물질 λ³€ν™”", "주기적 ν™”ν•™ λ°˜μ‘", "μ‚°ν™”", "ν™˜μ›",
239
- "κ³ λΆ„μžν™”", "λ¬Ό λΆ„ν•΄", "ν™”ν•©", "방사선 영ν–₯", "μ‚°-μ—ΌκΈ° λ°˜μ‘", "쀑화 λ°˜μ‘",
240
- "μ΄μ˜¨ν™”", "화학적 흑착/νƒˆμ°©", "촉맀 효율 λ³€ν™”", "νš¨μ†Œ ν™œμ„± λ³€ν™”", "λ°œμƒ‰ λ°˜μ‘",
241
- "pH λ³€ν™”", "화학적 ν‰ν˜• 이동", "κ²°ν•© ν˜•μ„±/λΆ„ν•΄", "μš©ν•΄λ„ λ³€ν™”"
242
  ],
243
  "μ‹œκ°„ κ΄€λ ¨ λ³€ν™”": [
244
  "λ…Έν™”/풍화", "마λͺ¨/뢀식", "색 λ°”λž¨/변색", "손상/회볡", "수λͺ… μ£ΌκΈ° λ³€ν™”",
@@ -264,6 +274,32 @@ physical_transformation_categories = {
264
  "μ†Œλ¦¬ μ§€ν–₯μ„±", "음ν–₯ μ™œκ³‘", "λΉ„νŠΈ 생성", "ν•˜λͺ¨λ‹‰μŠ€ 생성", "주파수 λ³€μ‘°",
265
  "음ν–₯ 좩격파", "음ν–₯ 필터링"
266
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
  "생물학적 λ³€ν™”": [
268
  "생μž₯/μœ„μΆ•", "세포 λΆ„μ—΄/사멸", "생물 λ°œκ΄‘", "μ‹ μ§„λŒ€μ‚¬ λ³€ν™”", "λ©΄μ—­ λ°˜μ‘",
269
  "호λ₯΄λͺ¬ λΆ„λΉ„", "μ‹ κ²½ λ°˜μ‘", "μœ μ „μ  λ°œν˜„", "적응/μ§„ν™”", "생체리듬 λ³€ν™”",
@@ -278,19 +314,8 @@ physical_transformation_categories = {
278
  "방사선 λ°˜μ‘", "진동 감지", "pH λ°˜μ‘", "용맀 λ°˜μ‘", "기체 κ΅ν™˜",
279
  "ν™˜κ²½ μ˜€μ—Ό λ°˜μ‘", "날씨 λ°˜μ‘", "κ³„μ ˆ λ³€ν™” λ°˜μ‘", "일주기 λ°˜μ‘", "μƒνƒœκ³„ μƒν˜Έμž‘μš©",
280
  "곡생/경쟁 λ°˜μ‘", "포식/피식 관계", "κ΅°μ§‘ ν˜•μ„±", "μ˜μ—­ μ„€μ •", "이주/μ •μ°© νŒ¨ν„΄"
281
- ],
282
- "μ„Όμ„œ κΈ°λŠ₯": [
283
- "μ‹œκ° μ„Όμ„œ/감지", "청각 μ„Όμ„œ/감지", "촉각 μ„Όμ„œ/감지", "미각 μ„Όμ„œ/감지", "후각 μ„Όμ„œ/감지",
284
- "μ˜¨λ„ μ„Όμ„œ/감지", "μŠ΅λ„ μ„Όμ„œ/감지", "μ••λ ₯ μ„Όμ„œ/감지", "가속도 μ„Όμ„œ/감지", "νšŒμ „ μ„Όμ„œ/감지",
285
- "κ·Όμ ‘ μ„Όμ„œ/감지", "μœ„μΉ˜ μ„Όμ„œ/감지", "μš΄λ™ μ„Όμ„œ/감지", "κ°€μŠ€ μ„Όμ„œ/감지", "적외선 μ„Όμ„œ/감지",
286
- "μžμ™Έμ„  μ„Όμ„œ/감지", "방사선 μ„Όμ„œ/감지", "자기μž₯ μ„Όμ„œ/감지", "μ „κΈ°μž₯ μ„Όμ„œ/감지", "ν™”ν•™λ¬Όμ§ˆ μ„Όμ„œ/감지",
287
- "μƒμ²΄μ‹ ν˜Έ μ„Όμ„œ/감지", "진동 μ„Όμ„œ/감지", "μ†ŒμŒ μ„Όμ„œ/감지", "λΉ› μ„ΈκΈ° μ„Όμ„œ/감지", "λΉ› 파μž₯ μ„Όμ„œ/감지",
288
- "기울기 μ„Όμ„œ/감지", "pH μ„Όμ„œ/감지", "μ „λ₯˜ μ„Όμ„œ/감지", "μ „μ•• μ„Όμ„œ/감지", "이미지 μ„Όμ„œ/감지",
289
- "거리 μ„Όμ„œ/감지", "깊��� μ„Όμ„œ/감지", "쀑λ ₯ μ„Όμ„œ/감지", "속도 μ„Όμ„œ/감지", "흐름 μ„Όμ„œ/감지",
290
- "μˆ˜μœ„ μ„Όμ„œ/감지", "탁도 μ„Όμ„œ/감지", "염도 μ„Όμ„œ/감지", "κΈˆμ† 감지", "μ••μ „ μ„Όμ„œ/감지",
291
- "κ΄‘μ „ μ„Όμ„œ/감지", "μ—΄μ „λŒ€ μ„Όμ„œ/감지", "홀 효과 μ„Όμ„œ/감지", "초음파 μ„Όμ„œ/감지", "λ ˆμ΄λ” μ„Όμ„œ/감지",
292
- "라이닀 μ„Όμ„œ/감지", "ν„°μΉ˜ μ„Όμ„œ/감지", "제슀처 μ„Όμ„œ/감지", "심박 μ„Όμ„œ/감지", "ν˜ˆμ•• μ„Όμ„œ/감지"
293
  ]
 
294
  }
295
 
296
  ##############################################################################
@@ -420,7 +445,6 @@ def process_inputs(text1, text2, text3, selected_category, progress=gr.Progress(
420
  time.sleep(0.3)
421
  progress(0.1, desc="창의적인 아이디어 생성 μ‹œμž‘...")
422
 
423
- # μΉ΄ν…Œκ³ λ¦¬μ— ν•΄λ‹Ήν•˜λŠ” 아이디어 생성
424
  results = generate_transformations(text1, text2, text3, selected_category)
425
 
426
  progress(0.8, desc="κ²°κ³Ό ν¬λ§·νŒ… 쀑...")
@@ -497,7 +521,7 @@ with gr.Blocks(
497
  </style>
498
  """)
499
 
500
- gr.Markdown("# πŸš€ ν‚€μ›Œλ“œ 기반 창의적 λ³€ν™” 아이디어 및 λ””μžμΈ 생성기")
501
  gr.Markdown("μž…λ ₯ν•œ **ν‚€μ›Œλ“œ**(μ΅œλŒ€ 3개)와 **μΉ΄ν…Œκ³ λ¦¬**λ₯Ό λ°”νƒ•μœΌλ‘œ, 창의적인 λͺ¨λΈ/컨셉/ν˜•μƒ λ³€ν™” 아이디어λ₯Ό μƒμ„±ν•˜κ³ , ν•΄λ‹Ή ν™•μž₯ 아이디어λ₯Ό ν”„λ‘¬ν”„νŠΈλ‘œ ν•˜μ—¬ λ””μžμΈ 이미지λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.")
502
 
503
  warning = gr.Markdown(get_warning_message())
@@ -507,7 +531,7 @@ with gr.Blocks(
507
  text_input1 = gr.Textbox(label="ν‚€μ›Œλ“œ 1 (ν•„μˆ˜)", placeholder="예: 슀마트폰")
508
  text_input2 = gr.Textbox(label="ν‚€μ›Œλ“œ 2 (선택)", placeholder="예: 인곡지λŠ₯")
509
  text_input3 = gr.Textbox(label="ν‚€μ›Œλ“œ 3 (선택)", placeholder="예: ν—¬μŠ€μΌ€μ–΄")
510
- category_dropdown = gr.Dropdown(
511
  label="μΉ΄ν…Œκ³ λ¦¬ 선택",
512
  choices=list(physical_transformation_categories.keys()),
513
  value=list(physical_transformation_categories.keys())[0],
@@ -534,34 +558,30 @@ with gr.Blocks(
534
  idea_output = gr.Markdown(label="아이디어 κ²°κ³Ό")
535
  generated_image = gr.Image(label="μƒμ„±λœ λ””μžμΈ 이미지", type="pil")
536
 
537
- # 예제
538
  gr.Examples(
539
  examples=[
540
- ["슀마트폰", "", "", list(physical_transformation_categories.keys())[0]],
541
- ["μžλ™μ°¨", "", "", list(physical_transformation_categories.keys())[0]],
542
- ["μžλ™μ°¨", "인곡지λŠ₯", "", list(physical_transformation_categories.keys())[0]],
543
- ["λ“œλ‘ ", "인곡지λŠ₯", "", list(physical_transformation_categories.keys())[0]],
544
- ["μš΄λ™ν™”", "μ›¨μ–΄λŸ¬λΈ”", "건강", list(physical_transformation_categories.keys())[0]],
545
  ],
546
- inputs=[text_input1, text_input2, text_input3, category_dropdown],
547
  )
548
 
549
- # μ²˜λ¦¬μ€‘ μ•„μ΄μ½˜ 보이기
550
  def show_processing_indicator():
551
  return gr.update(visible=True)
552
 
553
- # μ²˜λ¦¬μ€‘ μ•„μ΄μ½˜ 숨기기
554
  def hide_processing_indicator():
555
  return gr.update(visible=False)
556
 
557
- # λ²„νŠΌ 클릭 μ‹œ 처리 둜직
558
  submit_button.click(
559
  fn=show_processing_indicator,
560
  inputs=None,
561
  outputs=processing_indicator
562
  ).then(
563
  fn=process_all,
564
- inputs=[text_input1, text_input2, text_input3, category_dropdown],
565
  outputs=[idea_output, generated_image]
566
  ).then(
567
  fn=hide_processing_indicator,
@@ -569,6 +589,5 @@ with gr.Blocks(
569
  outputs=processing_indicator
570
  )
571
 
572
- # 메인 μ‹€ν–‰
573
  if __name__ == "__main__":
574
  demo.launch(debug=True)
 
9
  import numpy as np
10
  from diffusers import DiffusionPipeline
11
  from transformers import pipeline as hf_pipeline
12
+ import re
13
 
14
  ##############################################################################
15
  # 1) ZeroGPU ν™˜κ²½ 처리 + device, dtype μ„€μ •
16
  ##############################################################################
 
 
 
 
17
  try:
18
  import zerogpu
19
  zerogpu.init()
20
  print("ZeroGPU initialized successfully")
21
  device = "cuda" if torch.cuda.is_available() else "cpu"
22
  except ImportError:
 
23
  print("ZeroGPU package not installed, continuing without it")
24
  if os.getenv("ZERO_GPU"):
25
  print("ZeroGPU environment variable is set but zerogpu package is not installed.")
26
  device = "cuda" if torch.cuda.is_available() else "cpu"
27
  except Exception as e:
 
28
  print(f"Error initializing ZeroGPU: {e}")
29
  print("Continuing without ZeroGPU")
30
  device = "cuda" if torch.cuda.is_available() else "cpu"
31
 
 
32
  dtype = torch.bfloat16 if device == "cuda" else torch.float32
33
 
34
  print(f"Using device: {device}, dtype: {dtype}")
 
51
  print("Models loaded successfully")
52
  except Exception as e:
53
  print(f"Error loading models: {e}")
 
54
  def dummy_translator(text):
55
  return [{'translation_text': text}]
56
 
 
80
  return False
81
 
82
  ##############################################################################
83
+ # μž…λ ₯ ν…μŠ€νŠΈ 클린징 ν•¨μˆ˜: ν•œκΈ€, 영문, 숫자, 곡백 및 일반적인 λ¬Έμž₯ λΆ€ν˜Έλ§Œ ν—ˆμš©
84
  ##############################################################################
85
+ def clean_input_text(text):
86
  """
87
+ ν•œκΈ€, 영문, 숫자, 곡백 및 . , ! ? - : ; ' " λ“±μ˜ λ¬Έμž₯ λΆ€ν˜Έλ§Œ 남기고 μ œκ±°ν•©λ‹ˆλ‹€.
88
+ ν•„μš”μ— 따라 ν—ˆμš©ν•  문자λ₯Ό μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
89
  """
90
+ allowed = re.compile(r'[^γ„±-γ…Žκ°€-힣a-zA-Z0-9\s\.\,\!\?\-\:\;\'\"]')
91
+ cleaned_text = allowed.sub('', text)
92
+ return cleaned_text
93
+
94
+ ##############################################################################
95
+ # μž…λ ₯ ν…μŠ€νŠΈμ˜ μ˜ˆμƒμΉ˜ λͺ»ν•œ 문자 둜그 ν•¨μˆ˜ (λ””λ²„κΉ…μš©)
96
+ ##############################################################################
97
+ def log_unexpected_characters(text):
98
+ allowed = re.compile(r'[γ„±-γ…Žκ°€-힣a-zA-Z0-9\s\.\,\!\?\-\:\;\'\"]')
99
+ unexpected_chars = [char for char in text if not allowed.match(char)]
100
+ if unexpected_chars:
101
+ print("μ˜ˆμƒμΉ˜ λͺ»ν•œ 문자 발견:", set(unexpected_chars))
102
+ else:
103
+ print("μž…λ ₯ ν…μŠ€νŠΈμ— μ˜ˆμƒμΉ˜ λͺ»ν•œ λ¬ΈμžλŠ” μ—†μŠ΅λ‹ˆλ‹€.")
104
+
105
+ ##############################################################################
106
+ # 이미지 생성 ν•¨μˆ˜
107
+ ##############################################################################
108
+ def generate_design_image(prompt, seed=42, randomize_seed=True, width=1024, height=1024, num_inference_steps=4):
109
  original_prompt = prompt
110
  translated = False
111
 
112
+ # μž…λ ₯ ν…μŠ€νŠΈ 클린징 적용
113
+ prompt = clean_input_text(prompt)
114
+
115
+ # 사전 처리: μž…λ ₯ ν…μŠ€νŠΈκ°€ λ„ˆλ¬΄ κΈΈλ©΄ 미리 자λ₯΄κΈ° (예: 1000자 이상이면 1000자둜 μž˜λΌλƒ„)
116
+ if len(prompt) > 1000:
117
+ prompt = prompt[:1000]
118
+
119
  if contains_korean(prompt):
120
+ # λ²ˆμ—­ 호좜 μ‹œ max_length와 truncation μ˜΅μ…˜μ„ μΆ”κ°€ν•˜μ—¬ 길이 초과 문제λ₯Ό λ°©μ§€
121
+ translation = translator(prompt, max_length=400, truncation=True)
122
  prompt = translation[0]['translation_text']
123
  translated = True
124
 
 
125
  if randomize_seed:
126
  seed = random.randint(0, MAX_SEED)
127
 
 
138
 
139
  return image
140
 
141
+
142
  ##############################################################################
143
  # λ‘œκΉ… μ„€μ •
144
  ##############################################################################
 
186
  # 물리적 λ³€ν™” μΉ΄ν…Œκ³ λ¦¬ 사전 (총 15개)
187
  ##############################################################################
188
  physical_transformation_categories = {
189
+ "μ„Όμ„œ κΈ°λŠ₯": [
190
+ "μ‹œκ° μ„Όμ„œ/감지", "청각 μ„Όμ„œ/감지", "촉각 μ„Όμ„œ/감지", "미각 μ„Όμ„œ/감지", "후각 μ„Όμ„œ/감지",
191
+ "μ˜¨λ„ μ„Όμ„œ/감지", "μŠ΅λ„ μ„Όμ„œ/감지", "μ••λ ₯ μ„Όμ„œ/감지", "가속도 μ„Όμ„œ/감지", "νšŒμ „ μ„Όμ„œ/감지",
192
+ "κ·Όμ ‘ μ„Όμ„œ/감지", "μœ„μΉ˜ μ„Όμ„œ/감지", "μš΄λ™ μ„Όμ„œ/감지", "κ°€μŠ€ μ„Όμ„œ/감지", "적외선 μ„Όμ„œ/감지",
193
+ "μžμ™Έμ„  μ„Όμ„œ/감지", "방사선 μ„Όμ„œ/감지", "자기μž₯ μ„Όμ„œ/감지", "μ „κΈ°μž₯ μ„Όμ„œ/감지", "ν™”ν•™λ¬Όμ§ˆ μ„Όμ„œ/감지",
194
+ "μƒμ²΄μ‹ ν˜Έ μ„Όμ„œ/감지", "진동 μ„Όμ„œ/감지", "μ†ŒμŒ μ„Όμ„œ/감지", "λΉ› μ„ΈκΈ° μ„Όμ„œ/감지", "λΉ› 파μž₯ μ„Όμ„œ/감지",
195
+ "기울기 μ„Όμ„œ/감지", "pH μ„Όμ„œ/감지", "μ „λ₯˜ μ„Όμ„œ/감지", "μ „μ•• μ„Όμ„œ/감지", "이미지 μ„Όμ„œ/감지",
196
+ "거리 μ„Όμ„œ/감지", "깊이 μ„Όμ„œ/감지", "쀑λ ₯ μ„Όμ„œ/감지", "속도 μ„Όμ„œ/감지", "흐름 μ„Όμ„œ/감지",
197
+ "μˆ˜μœ„ μ„Όμ„œ/감지", "탁도 μ„Όμ„œ/감지", "염도 μ„Όμ„œ/감지", "κΈˆμ† 감지", "μ••μ „ μ„Όμ„œ/감지",
198
+ "κ΄‘μ „ μ„Όμ„œ/감지", "μ—΄μ „λŒ€ μ„Όμ„œ/감지", "홀 효과 μ„Όμ„œ/감지", "초음파 μ„Όμ„œ/감지", "λ ˆμ΄λ” μ„Όμ„œ/감지",
199
+ "라이닀 μ„Όμ„œ/감지", "ν„°μΉ˜ μ„Όμ„œ/감지", "제슀처 μ„Όμ„œ/감지", "심박 μ„Όμ„œ/감지", "ν˜ˆμ•• μ„Όμ„œ/감지"
200
  ],
201
  "크기와 ν˜•νƒœ λ³€ν™”": [
202
  "λΆ€ν”Ό λŠ˜μ–΄λ‚¨/쀄어듦", "길이 λŠ˜μ–΄λ‚¨/쀄어듦", "λ„ˆλΉ„ λŠ˜μ–΄λ‚¨/쀄어듦", "높이 λŠ˜μ–΄λ‚¨/쀄어듦",
 
214
  "광택/윀기 λ³€ν™”", "색쑰/채도 λ³€ν™”", "λ°œκ΄‘/ν˜•κ΄‘", "λΉ› μ‚°λž€ 효과",
215
  "λΉ› 흑수 λ³€ν™”", "반투λͺ… 효과", "그림자 효과 λ³€ν™”", "μžμ™Έμ„  λ°˜μ‘ λ³€ν™”",
216
  "μ•Όκ΄‘ 효과"
217
+ ],
218
+
219
+
220
+
221
  "물질의 μƒνƒœ λ³€ν™”": [
222
  "고체/앑체/기체 μ „ν™˜", "κ²°μ •ν™”/μš©ν•΄", "μ‚°ν™”/뢀식", "딱딱해짐/λΆ€λ“œλŸ¬μ›Œμ§",
223
  "특수 μƒνƒœ μ „ν™˜", "λ¬΄μ •ν˜•/κ²°μ •ν˜• μ „ν™˜", "μ„±λΆ„ 뢄리", "λ―Έμ„Έ μž…μž ν˜•μ„±/λΆ„ν•΄",
 
226
  "건쑰/슡윀", "팽윀/μˆ˜μΆ•", "동결/해동", "풍화/침식", "μΆ©μ „/λ°©μ „",
227
  "κ²°ν•©/뢄리", "발효/λΆ€νŒ¨"
228
  ],
229
+
 
 
 
 
 
 
 
230
  "μ›€μ§μž„ νŠΉμ„± λ³€ν™”": [
231
  "가속/감속", "일정 속도 μœ μ§€", "진동/진동 κ°μ†Œ", "λΆ€λ”ͺ힘/νŠ•κΉ€",
232
  "νšŒμ „ 속도 증가/κ°μ†Œ", "νšŒμ „ λ°©ν–₯ λ³€ν™”", "λΆˆκ·œμΉ™ μ›€μ§μž„", "λ©ˆμ·„λ‹€ λ―Έλ„λŸ¬μ§€λŠ” ν˜„μƒ",
 
243
  "μ™ΈλΆ€ ꡬ쑰 λ³€ν™”", "쀑심좕 이동", "κ· ν˜•μ  λ³€ν™”", "계측 ꡬ쑰 λ³€ν™”", "μ§€μ§€ ꡬ쑰 λ³€ν™”",
244
  "응λ ₯ λΆ„μ‚° ꡬ쑰", "좩격 흑수 ꡬ쑰", "κ·Έλ¦¬λ“œ/맀트릭슀 ꡬ쑰 λ³€ν™”", "μƒν˜Έ μ—°κ²°μ„± λ³€ν™”"
245
  ],
246
+ "곡간 이동": [
247
+ "μ•ž/λ’€ 이동", "쒌/우 이동", "μœ„/μ•„λž˜ 이동", "μ„Έλ‘œμΆ• νšŒμ „(고개 λ„λ•μž„)",
248
+ "κ°€λ‘œμΆ• νšŒμ „(고개 μ “κΈ°)", "길이좕 νšŒμ „(μ˜†μœΌλ‘œ κΈ°μšΈμž„)", "원 μš΄λ™", "λ‚˜μ„ ν˜• 이동",
249
+ "관성에 μ˜ν•œ λ―Έλ„λŸ¬μ§", "νšŒμ „μΆ• λ³€ν™”", "λΆˆκ·œμΉ™ νšŒμ „", "흔듀림 μš΄λ™", "포물선 이동",
250
+ "무쀑λ ₯ λΆ€μœ ", "수면 μœ„ λΆ€μœ ", "점프/도약", "μŠ¬λΌμ΄λ”©", "둀링", "자유 λ‚™ν•˜",
251
+ "왕볡 μš΄λ™", "탄성 νŠ•κΉ€", "관톡", "νšŒν”Ό μ›€μ§μž„", "μ§€κ·Έμž¬κ·Έ 이동", "μŠ€μœ™ μš΄λ™"
 
 
 
 
 
 
 
 
 
 
252
  ],
253
  "μ‹œκ°„ κ΄€λ ¨ λ³€ν™”": [
254
  "λ…Έν™”/풍화", "마λͺ¨/뢀식", "색 λ°”λž¨/변색", "손상/회볡", "수λͺ… μ£ΌκΈ° λ³€ν™”",
 
274
  "μ†Œλ¦¬ μ§€ν–₯μ„±", "음ν–₯ μ™œκ³‘", "λΉ„νŠΈ 생성", "ν•˜λͺ¨λ‹‰μŠ€ 생성", "주파수 λ³€μ‘°",
275
  "음ν–₯ 좩격파", "음ν–₯ 필터링"
276
  ],
277
+ "μ—΄ κ΄€λ ¨ λ³€ν™”": [
278
+ "μ˜¨λ„ μƒμŠΉ/ν•˜κ°•", "열에 μ˜ν•œ 팽창/μˆ˜μΆ•", "μ—΄ 전달/차단", "μ••λ ₯ μƒμŠΉ/ν•˜κ°•",
279
+ "μ—΄ 변화에 λ”°λ₯Έ μžν™”", "λ¬΄μ§ˆμ„œλ„ λ³€ν™”", "μ—΄μ „κΈ° ν˜„μƒ", "자기μž₯에 μ˜ν•œ μ—΄ λ³€ν™”",
280
+ "μƒνƒœλ³€ν™” 쀑 μ—΄ μ €μž₯/방좜", "μ—΄ 슀트레슀 λ°œμƒ/ν•΄μ†Œ", "κΈ‰κ²©ν•œ μ˜¨λ„ λ³€ν™” 영ν–₯",
281
+ "볡사열에 μ˜ν•œ 냉각/κ°€μ—΄", "λ°œμ—΄/흑열", "μ—΄ 뢄포 λ³€ν™”", "μ—΄ λ°˜μ‚¬/흑수",
282
+ "냉각 응좕", "μ—΄ ν™œμ„±ν™”", "μ—΄ 변색", "μ—΄ 팽창 κ³„μˆ˜ λ³€ν™”", "μ—΄ μ•ˆμ •μ„± λ³€ν™”",
283
+ "λ‚΄μ—΄μ„±/λ‚΄ν•œμ„±", "μžκΈ°λ°œμ—΄", "열적 ν‰ν˜•/λΆˆκ· ν˜•", "열적 λ³€ν˜•", "μ—΄ λΆ„μ‚°/집쀑"
284
+ ],
285
+ "μ „κΈ° 및 자기 λ³€ν™”": [
286
+ "μžμ„± 생성/μ†Œλ©Έ", "μ „ν•˜λŸ‰ 증가/κ°μ†Œ", "μ „κΈ°μž₯ 생성/μ†Œλ©Έ", "자기μž₯ 생성/μ†Œλ©Έ",
287
+ "μ΄ˆμ „λ„ μƒνƒœ μ „ν™˜", "κ°•μœ μ „μ²΄ νŠΉμ„± λ³€ν™”", "μ–‘μž μƒνƒœ λ³€ν™”", "ν”ŒλΌμ¦ˆλ§ˆ μƒνƒœ ν˜•μ„±/μ†Œλ©Έ",
288
+ "μŠ€ν•€νŒŒ 전달", "빛에 μ˜ν•œ μ „κΈ° λ°œμƒ", "μ••λ ₯에 μ˜ν•œ μ „κΈ° λ°œμƒ", "자기μž₯ 속 μ „λ₯˜ λ³€ν™”",
289
+ "μ „κΈ° μ €ν•­ λ³€ν™”", "μ „κΈ° 전도성 λ³€ν™”", "μ •μ „κΈ° λ°œμƒ/λ°©μ „", "μ „μžκΈ° μœ λ„",
290
+ "μ „μžκΈ°νŒŒ 방좜/흑수", "μ „κΈ° μš©λŸ‰ λ³€ν™”", "자기 이λ ₯ ν˜„μƒ", "전기적 λΆ„κ·Ή",
291
+ "μ „μž 흐름 λ°©ν–₯ λ³€ν™”", "전기적 곡λͺ…", "전기적 차폐/λ…ΈμΆœ", "자기 차폐/λ…ΈμΆœ",
292
+ "자기μž₯ λ°©ν–₯ μ •λ ¬"
293
+ ],
294
+ "화학적 λ³€ν™”": [
295
+ "ν‘œλ©΄ μ½”νŒ… λ³€ν™”", "물질 μ„±λΆ„ λ³€ν™”", "ν™”ν•™ λ°˜μ‘ λ³€ν™”", "촉맀 μž‘μš© μ‹œμž‘/쀑단",
296
+ "빛에 μ˜ν•œ ν™”ν•™ λ°˜μ‘", "전기에 μ˜ν•œ ν™”ν•™ λ°˜μ‘", "λ‹¨λΆ„μžλ§‰ ν˜•μ„±", "λΆ„μž μˆ˜μ€€ 계산 λ³€ν™”",
297
+ "μžμ—° λͺ¨λ°© ν‘œλ©΄ λ³€ν™”", "ν™˜κ²½ λ°˜μ‘ν˜• 물질 λ³€ν™”", "주기적 ν™”ν•™ λ°˜μ‘", "μ‚°ν™”", "ν™˜μ›",
298
+ "κ³ λΆ„μžν™”", "λ¬Ό λΆ„ν•΄", "ν™”ν•©", "방사선 영ν–₯", "μ‚°-μ—ΌκΈ° λ°˜μ‘", "쀑화 λ°˜μ‘",
299
+ "μ΄μ˜¨ν™”", "화학적 흑착/νƒˆμ°©", "촉맀 효율 λ³€ν™”", "νš¨μ†Œ ν™œμ„± λ³€ν™”", "λ°œμƒ‰ λ°˜μ‘",
300
+ "pH λ³€ν™”", "화학적 ν‰ν˜• 이동", "κ²°ν•© ν˜•μ„±/λΆ„ν•΄", "μš©ν•΄λ„ λ³€ν™”"
301
+ ],
302
+
303
  "생물학적 λ³€ν™”": [
304
  "생μž₯/μœ„μΆ•", "세포 λΆ„μ—΄/사멸", "생물 λ°œκ΄‘", "μ‹ μ§„λŒ€μ‚¬ λ³€ν™”", "λ©΄μ—­ λ°˜μ‘",
305
  "호λ₯΄λͺ¬ λΆ„λΉ„", "μ‹ κ²½ λ°˜μ‘", "μœ μ „μ  λ°œν˜„", "적응/μ§„ν™”", "생체리듬 λ³€ν™”",
 
314
  "방사선 λ°˜μ‘", "진동 감지", "pH λ°˜μ‘", "용맀 λ°˜μ‘", "기체 κ΅ν™˜",
315
  "ν™˜κ²½ μ˜€μ—Ό λ°˜μ‘", "날씨 λ°˜μ‘", "κ³„μ ˆ λ³€ν™” λ°˜μ‘", "일주기 λ°˜μ‘", "μƒνƒœκ³„ μƒν˜Έμž‘μš©",
316
  "곡생/경쟁 λ°˜μ‘", "포식/피식 관계", "κ΅°μ§‘ ν˜•μ„±", "μ˜μ—­ μ„€μ •", "이주/μ •μ°© νŒ¨ν„΄"
 
 
 
 
 
 
 
 
 
 
 
 
317
  ]
318
+
319
  }
320
 
321
  ##############################################################################
 
445
  time.sleep(0.3)
446
  progress(0.1, desc="창의적인 아이디어 생성 μ‹œμž‘...")
447
 
 
448
  results = generate_transformations(text1, text2, text3, selected_category)
449
 
450
  progress(0.8, desc="κ²°κ³Ό ν¬λ§·νŒ… 쀑...")
 
521
  </style>
522
  """)
523
 
524
+ gr.Markdown("# πŸš€ 아이디어 트랜슀포머")
525
  gr.Markdown("μž…λ ₯ν•œ **ν‚€μ›Œλ“œ**(μ΅œλŒ€ 3개)와 **μΉ΄ν…Œκ³ λ¦¬**λ₯Ό λ°”νƒ•μœΌλ‘œ, 창의적인 λͺ¨λΈ/컨셉/ν˜•μƒ λ³€ν™” 아이디어λ₯Ό μƒμ„±ν•˜κ³ , ν•΄λ‹Ή ν™•μž₯ 아이디어λ₯Ό ν”„λ‘¬ν”„νŠΈλ‘œ ν•˜μ—¬ λ””μžμΈ 이미지λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.")
526
 
527
  warning = gr.Markdown(get_warning_message())
 
531
  text_input1 = gr.Textbox(label="ν‚€μ›Œλ“œ 1 (ν•„μˆ˜)", placeholder="예: 슀마트폰")
532
  text_input2 = gr.Textbox(label="ν‚€μ›Œλ“œ 2 (선택)", placeholder="예: 인곡지λŠ₯")
533
  text_input3 = gr.Textbox(label="ν‚€μ›Œλ“œ 3 (선택)", placeholder="예: ν—¬μŠ€μΌ€μ–΄")
534
+ category_radio = gr.Radio(
535
  label="μΉ΄ν…Œκ³ λ¦¬ 선택",
536
  choices=list(physical_transformation_categories.keys()),
537
  value=list(physical_transformation_categories.keys())[0],
 
558
  idea_output = gr.Markdown(label="아이디어 κ²°κ³Ό")
559
  generated_image = gr.Image(label="μƒμ„±λœ λ””μžμΈ 이미지", type="pil")
560
 
 
561
  gr.Examples(
562
  examples=[
563
+ ["슀마트폰", "", "", "μ„Όμ„œ κΈ°λŠ₯"],
564
+ ["μžλ™μ°¨", "", "", "크기와 ν˜•νƒœ λ³€ν™”"],
565
+ ["μžλ™μ°¨", "인곡지λŠ₯", "", "ν‘œλ©΄ 및 μ™Έκ΄€ λ³€ν™”"],
566
+ ["λ“œλ‘ ", "인곡지λŠ₯", "", "물질의 μƒνƒœ λ³€ν™”"],
567
+ ["μš΄λ™ν™”", "μ›¨μ–΄λŸ¬λΈ”", "건강", "ꡬ쑰적 λ³€ν™”"],
568
  ],
569
+ inputs=[text_input1, text_input2, text_input3, category_radio],
570
  )
571
 
 
572
  def show_processing_indicator():
573
  return gr.update(visible=True)
574
 
 
575
  def hide_processing_indicator():
576
  return gr.update(visible=False)
577
 
 
578
  submit_button.click(
579
  fn=show_processing_indicator,
580
  inputs=None,
581
  outputs=processing_indicator
582
  ).then(
583
  fn=process_all,
584
+ inputs=[text_input1, text_input2, text_input3, category_radio],
585
  outputs=[idea_output, generated_image]
586
  ).then(
587
  fn=hide_processing_indicator,
 
589
  outputs=processing_indicator
590
  )
591
 
 
592
  if __name__ == "__main__":
593
  demo.launch(debug=True)