Update app.py
Browse files
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 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
|
|
|
|
|
|
|
|
226 |
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
|
|
|
|
231 |
else:
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
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 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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=[],
|