jpjp9292's picture
Update app.py
e5b694d verified
raw
history blame
5.97 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()
import gradio as gr
from rembg import remove
from PIL import Image
import logging
import os
# ๋กœ๊น… ์„ค์ •
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
# ์˜ˆ์ œ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ ์„ค์ •
example_images = [
"./example1.jpg",
"./example2.jpg"
]
# ์˜ˆ์ œ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
for img_path in example_images:
if not os.path.exists(img_path):
logging.warning(f"Example image {img_path} does not exist. Please provide valid paths.")
# 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=[[img] for img in example_images], # ๋ฆฌ์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๊ฒฝ๋กœ ์ „๋‹ฌ
inputs=input_image,
label="์˜ˆ์ œ ์ด๋ฏธ์ง€"
)
if __name__ == "__main__":
demo.launch()