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)