Kims12 commited on
Commit
6989f5c
ยท
verified ยท
1 Parent(s): 06c7417

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -28
app.py CHANGED
@@ -213,39 +213,55 @@ def generate_with_images(prompt, images, variation_index=0):
213
  logger.exception("์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:")
214
  return None, f"์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"
215
 
216
- def process_images_with_prompt(image1, image2, image3, prompt, variation_index=0):
217
  """
218
  3๊ฐœ์˜ ์ด๋ฏธ์ง€์™€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ตœ์ข… ์˜์–ด ํ”„๋กฌํ”„ํŠธ(final_prompt)๋ฅผ ์ƒ์„ฑํ•œ ํ›„,
219
- API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
220
  """
221
- try:
222
- images = [image1, image2, image3]
223
- valid_images = [img for img in images if img is not None]
224
- if not valid_images:
225
- return None, "์ ์–ด๋„ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•ด์ฃผ์„ธ์š”.", ""
 
 
 
 
226
 
227
- if prompt and prompt.strip():
228
- processed_prompt = preprocess_prompt(prompt, image1, image2, image3)
229
- if re.search("[๊ฐ€-ํžฃ]", processed_prompt):
230
- final_prompt = translate_prompt_to_english(processed_prompt)
 
 
231
  else:
232
- final_prompt = processed_prompt
233
- else:
234
- if len(valid_images) == 1:
235
- final_prompt = "Please creatively transform this image into a more vivid and artistic version. Do not include any text or watermarks in the generated image."
236
- logger.info("Default prompt generated for single image")
237
- elif len(valid_images) == 2:
238
- final_prompt = "Please seamlessly composite these two images, integrating their key elements harmoniously into a single image. Do not include any text or watermarks in the generated image."
239
- logger.info("Default prompt generated for two images")
240
- else:
241
- final_prompt = "Please creatively composite these three images, combining their main elements into a cohesive and natural scene. Do not include any text or watermarks in the generated image."
242
- logger.info("Default prompt generated for three images")
243
 
244
- result_img, status = generate_with_images(final_prompt, valid_images, variation_index)
245
- return result_img, status, final_prompt
246
- except Exception as e:
247
- logger.exception("์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:")
248
- return None, f"์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}", prompt
 
 
 
 
 
 
 
 
 
 
 
 
249
 
250
  def generate_multiple_images(image1, image2, image3, prompt, progress=gr.Progress()):
251
  """
@@ -256,12 +272,13 @@ def generate_multiple_images(image1, image2, image3, prompt, progress=gr.Progres
256
  prompts = []
257
 
258
  num_images = 4 # ์ƒ์„ฑํ•  ์ด๋ฏธ์ง€ ์ˆ˜
 
259
 
260
  progress(0, desc="์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค€๋น„ ์ค‘...")
261
 
262
  for i in range(num_images):
263
  progress((i / num_images), desc=f"{i+1}/{num_images} ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค‘...")
264
- result_img, status, final_prompt = process_images_with_prompt(image1, image2, image3, prompt, i)
265
 
266
  if result_img is not None:
267
  results.append(result_img)
@@ -319,6 +336,7 @@ with gr.Blocks() as demo:
319
  text_change_btn = gr.Button("๊ธ€์ž๋ณ€๊ฒฝํ•˜๊ธฐ")
320
  clothes_change_btn1 = gr.Button("๊ฐ€์ƒ ์ƒํ’ˆ์ฐฉ์šฉ-1")
321
  clothes_change_btn2 = gr.Button("์ƒํ’ˆ์ฐฉ์šฉ-2")
 
322
  background_change_btn = gr.Button("๋ฐฐ๊ฒฝ๋ฐ”๊พธ๊ธฐ")
323
  composite_product_btn = gr.Button("๋ถ€๋ถ„์ง€์šฐ๊ธฐ")
324
  submit_btn = gr.Button("์ด๋ฏธ์ง€ ์ƒ์„ฑ (4์žฅ)", variant="primary")
@@ -380,6 +398,11 @@ with gr.Blocks() as demo:
380
  inputs=[],
381
  outputs=prompt_input
382
  )
 
 
 
 
 
383
  background_change_btn.click(
384
  fn=lambda: "(#1์˜ ์—ฌ์„ฑ๋ชจ๋ธ)์ด (#2 ์ด๋ฏธ์ง€์˜ ๋ฐฐ๊ฒฝ)์„ ์ฃผ์š” ํ”ผ์‚ฌ์ฒด๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜์—ฌ ๋‘ ์ด๋ฏธ์ง€์˜ ๋ถ„์œ„๊ธฐ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์–ด์šฐ๋Ÿฌ์ง€๋„๋ก ์ƒ์„ฑํ•˜๋ผ.",
385
  inputs=[],
 
213
  logger.exception("์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ:")
214
  return None, f"์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"
215
 
216
+ def process_images_with_prompt(image1, image2, image3, prompt, variation_index=0, max_retries=3):
217
  """
218
  3๊ฐœ์˜ ์ด๋ฏธ์ง€์™€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ตœ์ข… ์˜์–ด ํ”„๋กฌํ”„ํŠธ(final_prompt)๋ฅผ ์ƒ์„ฑํ•œ ํ›„,
219
+ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ตœ๋Œ€ max_retries ํšŸ์ˆ˜๋งŒํผ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
220
  """
221
+ retry_count = 0
222
+ last_error = None
223
+
224
+ while retry_count < max_retries:
225
+ try:
226
+ images = [image1, image2, image3]
227
+ valid_images = [img for img in images if img is not None]
228
+ if not valid_images:
229
+ return None, "์ ์–ด๋„ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•ด์ฃผ์„ธ์š”.", ""
230
 
231
+ if prompt and prompt.strip():
232
+ processed_prompt = preprocess_prompt(prompt, image1, image2, image3)
233
+ if re.search("[๊ฐ€-ํžฃ]", processed_prompt):
234
+ final_prompt = translate_prompt_to_english(processed_prompt)
235
+ else:
236
+ final_prompt = processed_prompt
237
  else:
238
+ if len(valid_images) == 1:
239
+ final_prompt = "Please creatively transform this image into a more vivid and artistic version. Do not include any text or watermarks in the generated image."
240
+ logger.info("Default prompt generated for single image")
241
+ elif len(valid_images) == 2:
242
+ final_prompt = "Please seamlessly composite these two images, integrating their key elements harmoniously into a single image. Do not include any text or watermarks in the generated image."
243
+ logger.info("Default prompt generated for two images")
244
+ else:
245
+ final_prompt = "Please creatively composite these three images, combining their main elements into a cohesive and natural scene. Do not include any text or watermarks in the generated image."
246
+ logger.info("Default prompt generated for three images")
 
 
247
 
248
+ result_img, status = generate_with_images(final_prompt, valid_images, variation_index)
249
+ if result_img is not None:
250
+ return result_img, status, final_prompt
251
+ else:
252
+ # API ํ˜ธ์ถœ์€ ์„ฑ๊ณตํ–ˆ์ง€๋งŒ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹คํŒจ
253
+ last_error = status
254
+ retry_count += 1
255
+ logger.warning(f"์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹คํŒจ, ์žฌ์‹œ๋„ {retry_count}/{max_retries}: {status}")
256
+ time.sleep(1) # 1์ดˆ ๋Œ€๊ธฐ ํ›„ ์žฌ์‹œ๋„
257
+ except Exception as e:
258
+ last_error = str(e)
259
+ retry_count += 1
260
+ logger.exception(f"์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ, ์žฌ์‹œ๋„ {retry_count}/{max_retries}:")
261
+ time.sleep(1) # 1์ดˆ ๋Œ€๊ธฐ ํ›„ ์žฌ์‹œ๋„
262
+
263
+ # ๋ชจ๋“  ์žฌ์‹œ๋„ ์‹คํŒจ ํ›„
264
+ return None, f"์ตœ๋Œ€ ์žฌ์‹œ๋„ ํšŸ์ˆ˜({max_retries}ํšŒ) ์ดˆ๊ณผ ํ›„ ์‹คํŒจ: {last_error}", prompt
265
 
266
  def generate_multiple_images(image1, image2, image3, prompt, progress=gr.Progress()):
267
  """
 
272
  prompts = []
273
 
274
  num_images = 4 # ์ƒ์„ฑํ•  ์ด๋ฏธ์ง€ ์ˆ˜
275
+ max_retries = 3 # ๊ฐ ์ด๋ฏธ์ง€ ๋‹น ์ตœ๋Œ€ ์žฌ์‹œ๋„ ํšŸ์ˆ˜
276
 
277
  progress(0, desc="์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค€๋น„ ์ค‘...")
278
 
279
  for i in range(num_images):
280
  progress((i / num_images), desc=f"{i+1}/{num_images} ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค‘...")
281
+ result_img, status, final_prompt = process_images_with_prompt(image1, image2, image3, prompt, i, max_retries)
282
 
283
  if result_img is not None:
284
  results.append(result_img)
 
336
  text_change_btn = gr.Button("๊ธ€์ž๋ณ€๊ฒฝํ•˜๊ธฐ")
337
  clothes_change_btn1 = gr.Button("๊ฐ€์ƒ ์ƒํ’ˆ์ฐฉ์šฉ-1")
338
  clothes_change_btn2 = gr.Button("์ƒํ’ˆ์ฐฉ์šฉ-2")
339
+ holding_product_btn = gr.Button("์ƒํ’ˆ๋“ค๊ณ  ์žˆ๊ธฐ")
340
  background_change_btn = gr.Button("๋ฐฐ๊ฒฝ๋ฐ”๊พธ๊ธฐ")
341
  composite_product_btn = gr.Button("๋ถ€๋ถ„์ง€์šฐ๊ธฐ")
342
  submit_btn = gr.Button("์ด๋ฏธ์ง€ ์ƒ์„ฑ (4์žฅ)", variant="primary")
 
398
  inputs=[],
399
  outputs=prompt_input
400
  )
401
+ holding_product_btn.click(
402
+ fn=lambda: "(#1์˜ ์—ฌ์„ฑ๋ชจ๋ธ)์ด ์‹ ์ฒด ๋น„์œจ๊ณผ ํฌ์ฆˆ๋Š” ์œ ์น˜ํ•œ ์ฒด (#2์˜ ํฌ์ง€ ์•Š๋Š” ์™€์ธ์ž”)๋ฅผ ์ง์ ‘ ๋ชจ๋ธ์ด ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋“ค๊ณ  ์žˆ๋Š” ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ชจ์Šต์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ผ.",
403
+ inputs=[],
404
+ outputs=prompt_input
405
+ )
406
  background_change_btn.click(
407
  fn=lambda: "(#1์˜ ์—ฌ์„ฑ๋ชจ๋ธ)์ด (#2 ์ด๋ฏธ์ง€์˜ ๋ฐฐ๊ฒฝ)์„ ์ฃผ์š” ํ”ผ์‚ฌ์ฒด๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜์—ฌ ๋‘ ์ด๋ฏธ์ง€์˜ ๋ถ„์œ„๊ธฐ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์–ด์šฐ๋Ÿฌ์ง€๋„๋ก ์ƒ์„ฑํ•˜๋ผ.",
408
  inputs=[],