jpjp9292's picture
Update app.py
2d20add verified
raw
history blame
2.71 kB
import gradio as gr
from rembg import remove
from PIL import Image
import logging
# ๋กœ๊น… ์„ค์ •
logging.basicConfig(level=logging.INFO)
def remove_background(input_image):
"""
์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€์—์„œ ๋ฐฐ๊ฒฝ์„ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜
Parameters:
input_image (PIL.Image ๋˜๋Š” str): ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ๊ฐ์ฒด ๋˜๋Š” ํŒŒ์ผ ๊ฒฝ๋กœ
Returns:
PIL.Image ๋˜๋Š” str: ๋ฐฐ๊ฒฝ์ด ์ œ๊ฑฐ๋œ ์ด๋ฏธ์ง€ ๋˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€
"""
try:
logging.info("Processing image.")
if isinstance(input_image, str):
input_img = Image.open(input_image)
else:
input_img = input_image
# ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ
output_img = remove(input_img)
logging.info("Background removed successfully.")
# ํˆฌ๋ช…๋„๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด PNG ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜
return output_img.convert("RGBA")
except Exception as e:
logging.error(f"Error removing background: {e}")
return f"์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"
def clear_images():
"""์ž…๋ ฅ ์ด๋ฏธ์ง€์™€ ์ถœ๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋‘ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ•จ์ˆ˜"""
return None, None
# Gradio ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์„ฑ
with gr.Blocks(css="""
#btn-remove {
background-color: #4CAF50; /* ์ดˆ๋ก์ƒ‰ */
color: white;
}
#btn-reset {
background-color: #f44336; /* ๋นจ๊ฐ„์ƒ‰ */
color: white;
}
""") as demo:
gr.Markdown("# ์ด๋ฏธ์ง€ ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ๊ธฐ")
gr.Markdown("์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ๋ฐฐ๊ฒฝ์ด ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.")
with gr.Row():
input_image = gr.Image(
type="pil",
label="์ž…๋ ฅ ์ด๋ฏธ์ง€",
interactive=True # ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •
)
output_image = gr.Image(
type="pil",
label="๋ฐฐ๊ฒฝ ์ œ๊ฑฐ๋œ ์ด๋ฏธ์ง€",
interactive=False # ์ถœ๋ ฅ ์ด๋ฏธ์ง€๋Š” ์ƒํ˜ธ์ž‘์šฉ ๋ถˆ๊ฐ€๋Šฅ
)
# ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ ๋ฒ„ํŠผ
with gr.Row():
btn_remove = gr.Button("๋ฐฐ๊ฒฝ ์ œ๊ฑฐ", elem_id="btn-remove") # elem_id๋กœ ๋ฒ„ํŠผ ์Šคํƒ€์ผ ์ง€์ •
btn_remove.click(fn=remove_background, inputs=input_image, outputs=output_image)
# ์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ ์ถ”๊ฐ€
btn_reset = gr.Button("์ดˆ๊ธฐํ™”", elem_id="btn-reset") # elem_id๋กœ ๋ฒ„ํŠผ ์Šคํƒ€์ผ ์ง€์ •
btn_reset.click(fn=clear_images, inputs=None, outputs=[input_image, output_image])
# ์˜ˆ์ œ ์ด๋ฏธ์ง€
gr.Examples(
examples=[
["./example1.jpg"],
["./example2.jpg"]
],
inputs=input_image,
label="์˜ˆ์ œ ์ด๋ฏธ์ง€"
)
if __name__ == "__main__":
demo.launch()