Update app.py
Browse files
app.py
CHANGED
@@ -235,90 +235,100 @@ def run_example_2():
|
|
235 |
result_img.save(output_path, "WEBP")
|
236 |
return result_img, status, final_prompt
|
237 |
|
238 |
-
#
|
239 |
-
# ์์ ์ ์ฉ ๋ถ๋ถ (์ฐธ์กฐ ์ฝ๋ ์ ์ฉ)
|
240 |
-
# -------------------------------------------------------------------
|
241 |
-
# Set up the interaction with two outputs.
|
242 |
-
submit_btn.click(
|
243 |
-
fn=process_image_and_prompt,
|
244 |
-
inputs=[image_input, prompt_input, gemini_api_key],
|
245 |
-
outputs=[output_gallery, output_text],
|
246 |
-
)
|
247 |
-
|
248 |
-
gr.Markdown("## Try these examples", elem_classes="gr-examples-header")
|
249 |
-
|
250 |
-
examples = [
|
251 |
-
["data/1.webp", 'change text to "AMEER"', ""],
|
252 |
-
["data/2.webp", "remove the spoon from hand only", ""],
|
253 |
-
["data/3.webp", 'change text to "Make it "', ""],
|
254 |
-
["data/1.jpg", "add joker style only on face", ""],
|
255 |
-
["data/1777043.jpg", "add joker style only on face", ""],
|
256 |
-
["data/2807615.jpg", "add lipstick on lip only", ""],
|
257 |
-
["data/76860.jpg", "add lipstick on lip only", ""],
|
258 |
-
["data/2807615.jpg", "make it happy looking face only", ""],
|
259 |
-
]
|
260 |
-
|
261 |
-
gr.Examples(
|
262 |
-
examples=examples,
|
263 |
-
inputs=[image_input, prompt_input],
|
264 |
-
elem_id="examples-grid"
|
265 |
-
)
|
266 |
-
# -------------------------------------------------------------------
|
267 |
-
|
268 |
-
# ๊ธฐ์กด Gradio ์ธํฐํ์ด์ค ๊ตฌ์ฑ (์์ ์ ์ฉ ์ธ ๋ค๋ฅธ ์ฝ๋๋ ๊ทธ๋๋ก ์ ์ง)
|
269 |
with gr.Blocks() as demo:
|
270 |
gr.HTML(
|
271 |
"""
|
272 |
<div style="text-align: center; margin-bottom: 1rem;">
|
273 |
-
<h1
|
274 |
-
<p
|
275 |
</div>
|
276 |
"""
|
277 |
)
|
278 |
|
279 |
with gr.Row():
|
280 |
with gr.Column():
|
281 |
-
|
282 |
-
type="pil",
|
283 |
-
label="
|
284 |
-
image_mode="
|
285 |
-
elem_id="image-input"
|
286 |
-
)
|
287 |
-
gemini_api_key = gr.Textbox(
|
288 |
-
lines=1,
|
289 |
-
placeholder="Enter Gemini API Key (optional)",
|
290 |
-
label="Gemini API Key (optional)"
|
291 |
-
)
|
292 |
prompt_input = gr.Textbox(
|
293 |
-
lines=
|
294 |
-
placeholder="
|
295 |
-
label="
|
296 |
)
|
297 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
298 |
with gr.Column():
|
299 |
-
|
300 |
-
output_text = gr.Textbox(
|
301 |
-
|
302 |
-
|
303 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
304 |
|
305 |
-
gr.
|
|
|
|
|
306 |
|
307 |
-
|
308 |
-
|
309 |
-
[
|
310 |
-
[
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
[
|
315 |
-
[
|
316 |
-
|
317 |
|
318 |
-
gr.
|
319 |
-
|
320 |
-
|
321 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
322 |
)
|
323 |
|
324 |
-
|
|
|
|
235 |
result_img.save(output_path, "WEBP")
|
236 |
return result_img, status, final_prompt
|
237 |
|
238 |
+
# Gradio ์ธํฐํ์ด์ค
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
239 |
with gr.Blocks() as demo:
|
240 |
gr.HTML(
|
241 |
"""
|
242 |
<div style="text-align: center; margin-bottom: 1rem;">
|
243 |
+
<h1>๊ฐ๋จํ ์ด๋ฏธ์ง ์์ฑ๊ธฐ (์์ ํฌํจ)</h1>
|
244 |
+
<p>์ด๋ฏธ์ง๋ฅผ ์
๋ก๋ํ๊ฑฐ๋ ์๋ ์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๊ฐ down ํด๋์ ์ ์ฅ๋ฉ๋๋ค.</p>
|
245 |
</div>
|
246 |
"""
|
247 |
)
|
248 |
|
249 |
with gr.Row():
|
250 |
with gr.Column():
|
251 |
+
with gr.Row():
|
252 |
+
image1_input = gr.Image(type="pil", label="#1", image_mode="RGB")
|
253 |
+
image2_input = gr.Image(type="pil", label="#2", image_mode="RGB")
|
254 |
+
image3_input = gr.Image(type="pil", label="#3", image_mode="RGB")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
255 |
prompt_input = gr.Textbox(
|
256 |
+
lines=3,
|
257 |
+
placeholder="ํ๋กฌํํธ๋ฅผ ์
๋ ฅํ๊ฑฐ๋ ๋น์๋๋ฉด ์๋ ํฉ์ฑ๋ฉ๋๋ค.",
|
258 |
+
label="ํ๋กฌํํธ (์ ํ ์ฌํญ)"
|
259 |
)
|
260 |
+
with gr.Row():
|
261 |
+
image_change_btn = gr.Button("์ด๋ฏธ์ง ๋ณ๊ฒฝ")
|
262 |
+
text_remove_btn = gr.Button("๊ธ์์ง์ฐ๊ธฐ")
|
263 |
+
clothes_change_btn = gr.Button("์ท๋ฐ๊พธ๊ธฐ")
|
264 |
+
background_change_btn = gr.Button("๋ฐฐ๊ฒฝ๋ฐ๊พธ๊ธฐ")
|
265 |
+
composite_product_btn = gr.Button("์ด๋ฏธ์ง ํฉ์ฑ(์ํํฌํจ)")
|
266 |
+
submit_btn = gr.Button("์ด๋ฏธ์ง ์์ฑ", variant="primary")
|
267 |
with gr.Column():
|
268 |
+
output_image = gr.Image(label="์์ฑ๋ ์ด๋ฏธ์ง")
|
269 |
+
output_text = gr.Textbox(label="์ํ ๋ฉ์์ง")
|
270 |
+
prompt_display = gr.Textbox(label="์ฌ์ฉ๋ ํ๋กฌํํธ (์์ด)", visible=True)
|
271 |
+
|
272 |
+
# ์ ํ ์ต์
๋ฒํผ ํด๋ฆญ ์ ํ๋กฌํํธ ์
๋ ฅ๋ ์
๋ฐ์ดํธ (ํ๊ตญ์ด ๋ฌธ๊ตฌ)
|
273 |
+
image_change_btn.click(
|
274 |
+
fn=lambda: "#1 ์ด๋ฏธ์ง์ [๋ค๋ฅธ ๋ชจ์ต]์ผ๋ก ๋ณ๊ฒฝํ๋ผ.",
|
275 |
+
inputs=[],
|
276 |
+
outputs=prompt_input
|
277 |
+
)
|
278 |
+
text_remove_btn.click(
|
279 |
+
fn=lambda: "#1 ์ด๋ฏธ์ง์ [์ค๊ตญ์ด๋ฅผ ๋ชจ๋]๋ฅผ ์ ๊ฑฐํ๋ผ.",
|
280 |
+
inputs=[],
|
281 |
+
outputs=prompt_input
|
282 |
+
)
|
283 |
+
clothes_change_btn.click(
|
284 |
+
fn=lambda: "#1 ์ด๋ฏธ์ง์ ์ธ๋ฌผ ์์์ #2 ์ด๋ฏธ์ง์ ์์์ผ๋ก ๋ณ๊ฒฝํ๋ผ.",
|
285 |
+
inputs=[],
|
286 |
+
outputs=prompt_input
|
287 |
+
)
|
288 |
+
background_change_btn.click(
|
289 |
+
fn=lambda: "#1 ์ด๋ฏธ์ง์ ๋ฐฐ๊ฒฝ์ #2 ์ด๋ฏธ์ง์ ๋ฐฐ๊ฒฝ์ผ๋ก ๋ณ๊ฒฝํ๋ผ.",
|
290 |
+
inputs=[],
|
291 |
+
outputs=prompt_input
|
292 |
+
)
|
293 |
+
composite_product_btn.click(
|
294 |
+
fn=lambda: "#1 ์ด๋ฏธ์ง์ #2 ์ด๋ฏธ์ง(๋๋ #3 ์ด๋ฏธ์ง)๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ํฉ์ฑํ๋ผ.",
|
295 |
+
inputs=[],
|
296 |
+
outputs=prompt_input
|
297 |
+
)
|
298 |
+
|
299 |
+
submit_btn.click(
|
300 |
+
fn=process_and_show_prompt,
|
301 |
+
inputs=[image1_input, image2_input, image3_input, prompt_input],
|
302 |
+
outputs=[output_image, output_text, prompt_display],
|
303 |
+
)
|
304 |
|
305 |
+
with gr.Row():
|
306 |
+
example1_btn = gr.Button("์์ 1 ์คํ")
|
307 |
+
example2_btn = gr.Button("์์ 2 ์คํ")
|
308 |
|
309 |
+
example1_btn.click(
|
310 |
+
fn=run_example_1,
|
311 |
+
inputs=[],
|
312 |
+
outputs=[output_image, output_text, prompt_display]
|
313 |
+
)
|
314 |
+
example2_btn.click(
|
315 |
+
fn=run_example_2,
|
316 |
+
inputs=[],
|
317 |
+
outputs=[output_image, output_text, prompt_display]
|
318 |
+
)
|
319 |
|
320 |
+
gr.Markdown(
|
321 |
+
"""
|
322 |
+
### ์ฌ์ฉ ๋ฐฉ๋ฒ:
|
323 |
+
|
324 |
+
1. **์๋ ํฉ์ฑ**: ์ด๋ฏธ์ง๋ฅผ ์
๋ก๋ํ๊ณ ํ๋กฌํํธ๋ฅผ ๋น์๋๋ฉด ์๋์ผ๋ก ํฉ์ฑ๋ฉ๋๋ค.
|
325 |
+
2. **์ด๋ฏธ์ง ์ฐธ์กฐ**: #1, #2, #3์ผ๋ก ๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
|
326 |
+
3. **์์ ์คํ**: ์๋ "์์ 1 ์คํ" ๋๋ "์์ 2 ์คํ" ๋ฒํผ์ ๋๋ฅด๋ฉด down ํด๋์ ์
๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ์ฌ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
|
327 |
+
4. **์ ํ ์ต์
**: ์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ๋กฌํํธ ์
๋ ฅ๋์ ํ๊ตญ์ด ๋ฌธ๊ตฌ๊ฐ ์ฑ์์ง๊ณ , ์ดํ Geminiโ2.0โflash ๋ชจ๋ธ์ ํตํด ์์ด๋ก ๋ฒ์ญ๋์ด ์ค์ API ํธ์ถ ํ๋กฌํํธ๋ก ์ ์ฉ๋ฉ๋๋ค.
|
328 |
+
|
329 |
+
> **ํ**: ํ๋กฌํํธ๋ฅผ ์ง์ ์์ ํ ์๋ ์์ต๋๋ค.
|
330 |
+
"""
|
331 |
)
|
332 |
|
333 |
+
if __name__ == "__main__":
|
334 |
+
demo.launch(share=True)
|