bbb / app.py
Kims12's picture
Update app.py
e640a83 verified
import os
from datetime import datetime, timedelta
import gradio as gr
def simulate_file_naming(name_option, additional_name, add_date, add_time):
# ๊ณ ์ •๋œ ์›๋ณธ ํŒŒ์ผ๋ช…
original_filename = "sample.jpg"
original_name, ext = os.path.splitext(original_filename)
ext = ext.lstrip(".") if ext else "bin"
# ์˜ต์…˜์— ๋”ฐ๋ฅธ ํŒŒ์ผ๋ช… ๊ธฐ๋ณธ ๋ถ€๋ถ„ ๊ฒฐ์ •
if name_option == "ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ":
final_base = additional_name.strip() if additional_name.strip() else "ํŒŒ์ผ"
option_text = f"ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ ({additional_name.strip() if additional_name.strip() else '๊ธฐ๋ณธ๊ฐ’'})"
elif name_option == "ํŒŒ์ผ๋ช…์œ ์ง€":
final_base = original_name
option_text = "ํŒŒ์ผ๋ช…์œ ์ง€"
elif name_option == "ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…":
final_base = original_name + (f"_{additional_name.strip()}" if additional_name.strip() else "")
option_text = f"ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช… ({additional_name.strip() if additional_name.strip() else '์—†์Œ'})"
elif name_option == "์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€":
final_base = (f"{additional_name.strip()}_" if additional_name.strip() else "") + original_name
option_text = f"์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€ ({additional_name.strip() if additional_name.strip() else '์—†์Œ'})"
else:
final_base = original_name
option_text = "๋ฏธ์„ ํƒ"
# ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ stamp (ํ•œ๊ตญ ๊ธฐ์ค€)
now = datetime.utcnow() + timedelta(hours=9)
date_str = now.strftime('%Y%m%d') if add_date else ""
time_str = now.strftime('%H%M%S') if add_time else ""
timestamp = ""
additional_info = []
if add_date:
additional_info.append("๋‚ ์งœ ์ ์šฉ")
timestamp += f"_{date_str}"
if add_time:
additional_info.append("์‹œ๊ฐ„ ์ ์šฉ")
timestamp += f"_{time_str}"
# ์ตœ์ข… ํŒŒ์ผ๋ช… ๊ตฌ์„ฑ (ํ™•์žฅ์ž ์œ ์ง€)
final_file_name = f"{final_base}{timestamp}.{ext}"
# ์ƒ์„ธ ๊ฒฐ๊ณผ ๋ฉ”์‹œ์ง€ ๊ตฌ์„ฑ
detail_msg = (
f"์›๋ณธ์ด๋ฆ„ : {original_filename}\n"
f"์˜ต์…˜์„ ํƒ : {option_text}\n"
f"์ถ”๊ฐ€ : {', '.join(additional_info) if additional_info else '์—†์Œ'}\n"
f"๊ฒฐ๊ณผ๋ช… : {final_file_name}"
)
return detail_msg, final_file_name
# ์ฝ”๋“œ์ถœ๋ ฅ์— ํ‘œ์‹œํ•  ์ „์ฒด ์ฝ”๋“œ ๋ฌธ์ž์—ด (ํ—ค๋”๋Š” ์ œ๊ฑฐ)
code_str = '''
์œ„ ์„ ํƒ๋œ ํ•ญ๋ชฉ๋ถ€๋ถ„๊ณผ ์—…๋กœ๋“œ ๋œ ํŒŒ์ผ๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ”๋กœ ์ ์šฉํ• ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.
ํŒŒ์ผ๋ช…์„ ๋ฐ”๊พธ๋Š” ๊ธฐ๋Šฅ์˜ ์ฝ”๋“œ ์™ธ ๋ชจ๋‘ ์‚ญ์ œํ•˜์„ธ์š”.
import os
import tempfile
from datetime import datetime, timedelta
import gradio as gr
from PIL import Image
def save_file(file_data, final_file_name):
"""
ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ํด๋”์— ์ €์žฅํ•˜๊ณ  ์ตœ์ข… ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜.
final_file_name์—๋Š” ํ™•์žฅ์ž ํฌํ•จ.
"""
temp_file_path = os.path.join(tempfile.gettempdir(), final_file_name)
# ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์ด ํŒŒ์ผ ๊ฒฝ๋กœ์ธ ๊ฒฝ์šฐ
if isinstance(file_data, str) and os.path.exists(file_data):
with open(file_data, "rb") as f:
data = f.read()
with open(temp_file_path, "wb") as f:
f.write(data)
# PIL ์ด๋ฏธ์ง€ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ
elif hasattr(file_data, "save"):
ext = os.path.splitext(final_file_name)[1].lstrip(".")
pil_format = "JPEG" if ext.lower() == "jpg" else ext.upper()
file_data.save(temp_file_path, format=pil_format)
# bytes ๋ฐ์ดํ„ฐ์ธ ๊ฒฝ์šฐ
elif isinstance(file_data, bytes):
with open(temp_file_path, "wb") as f:
f.write(file_data)
# ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ์ธ ๊ฒฝ์šฐ (์˜ˆ: ํ…์ŠคํŠธ)
elif isinstance(file_data, str):
with open(temp_file_path, "w", encoding="utf-8") as f:
f.write(file_data)
else:
raise ValueError("์ง€์›๋˜์ง€ ์•Š๋Š” ํŒŒ์ผ ํ˜•์‹์ž…๋‹ˆ๋‹ค.")
return temp_file_path
def process_file(file, name_option, additional_name, add_date, add_time):
"""
์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ ๋ฐ›์•„ ๋ผ๋””์˜ค ์˜ต์…˜์— ๋”ฐ๋ผ ํŒŒ์ผ๋ช…์„ ์žฌ๊ตฌ์„ฑํ•œ ํ›„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
Parameters:
file: ์—…๋กœ๋“œ๋œ ํŒŒ์ผ (gr.File ๋“ฑ, ํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” ํŒŒ์ผ ๊ฐ์ฒด)
name_option: ๋ผ๋””์˜ค ๋ฒ„ํŠผ ์„ ํƒ๊ฐ’ (๋„ค ๊ฐ€์ง€ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜)
additional_name: ์˜ต์…˜์— ๋”ฐ๋ฅธ ์ถ”๊ฐ€ ์ž…๋ ฅ(์ถ”๊ฐ€๋ช… ๋˜๋Š” ๋ณ€๊ฒฝํ•  ํŒŒ์ผ๋ช…)
add_date: ๋‚ ์งœ ์ ์šฉ ์—ฌ๋ถ€ (Boolean)
add_time: ์‹œ๊ฐ„ ์ ์šฉ ์—ฌ๋ถ€ (Boolean)
๋ฐ˜ํ™˜๊ฐ’:
๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋ช…์„ ๊ฐ€์ง„ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ๊ฒฝ๋กœ
"""
if file is None:
return None
# ์›๋ณธ ํŒŒ์ผ๋ช…๊ณผ ํ™•์žฅ์ž ์ถ”์ถœ
if isinstance(file, str) and os.path.exists(file):
original_filename = os.path.basename(file)
elif hasattr(file, "name"):
original_filename = os.path.basename(file.name)
else:
original_filename = "ํŒŒ์ผ.bin"
original_name, ext = os.path.splitext(original_filename)
ext = ext.lstrip(".") if ext else "bin"
# ๋ผ๋””์˜ค ์˜ต์…˜์— ๋”ฐ๋ผ ์ตœ์ข… ๊ธฐ๋ณธ ํŒŒ์ผ๋ช… ๊ฒฐ์ •
if name_option == "ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ":
# ์ž…๋ ฅ๋œ ์ƒˆ ํŒŒ์ผ๋ช… ์‚ฌ์šฉ (์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ "ํŒŒ์ผ")
final_base = additional_name.strip() if additional_name.strip() else "ํŒŒ์ผ"
elif name_option == "ํŒŒ์ผ๋ช…์œ ์ง€":
final_base = original_name
elif name_option == "ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…":
final_base = original_name + (f"_{additional_name.strip()}" if additional_name.strip() else "")
elif name_option == "์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€":
final_base = (f"{additional_name.strip()}_" if additional_name.strip() else "") + original_name
else:
final_base = original_name
# ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ stamp (ํ•œ๊ตญ ๊ธฐ์ค€)
now = datetime.utcnow() + timedelta(hours=9)
date_str = now.strftime('%Y%m%d') if add_date else ""
time_str = now.strftime('%H%M%S') if add_time else ""
timestamp = ""
if date_str and time_str:
timestamp = f"_{date_str}_{time_str}"
elif date_str:
timestamp = f"_{date_str}"
elif time_str:
timestamp = f"_{time_str}"
# ์ตœ์ข… ํŒŒ์ผ๋ช… ๊ตฌ์„ฑ (์ ‘๋‘์‚ฌ ์ œ๊ฑฐ)
final_file_name = f"{final_base}{timestamp}.{ext}"
return save_file(file, final_file_name)
iface = gr.Interface(
fn=process_file,
inputs=[
gr.File(label="ํŒŒ์ผ ์—…๋กœ๋“œ"),
gr.Radio(
choices=["ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ", "ํŒŒ์ผ๋ช…์œ ์ง€", "ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…", "์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€"],
label="ํŒŒ์ผ๋ช… ์˜ต์…˜"
),
gr.Text(label="์ถ”๊ฐ€๋ช…/๋ณ€๊ฒฝ ํŒŒ์ผ๋ช… ์ž…๋ ฅ", placeholder="์˜ต์…˜์— ๋”ฐ๋ผ ์ž…๋ ฅํ•˜์„ธ์š”"),
gr.Checkbox(label="๋‚ ์งœ ์ ์šฉ", value=True),
gr.Checkbox(label="์‹œ๊ฐ„ ์ ์šฉ", value=True)
],
outputs=gr.File(label="๋‹ค์šด๋กœ๋“œ ํŒŒ์ผ"),
title="ํŒŒ์ผ๋ช… ์˜ต์…˜์— ๋”ฐ๋ฅธ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ๋ฐ ๋‹ค์šด๋กœ๋“œ",
description=(
"์—…๋กœ๋“œ๋œ ํŒŒ์ผ์˜ ํŒŒ์ผ๋ช…์„ ์•„๋ž˜ ์˜ต์…˜์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.\n"
"์˜ต์…˜1(ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ): ์ž…๋ ฅํ•œ ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ\n"
"์˜ต์…˜2(ํŒŒ์ผ๋ช…์œ ์ง€): ์›๋ณธ ํŒŒ์ผ๋ช… ์œ ์ง€\n"
"์˜ต์…˜3(ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…): ์›๋ณธ ํŒŒ์ผ๋ช… ๋’ค์— ์ถ”๊ฐ€๋ช… ๋ถ€์ฐฉ\n"
"์˜ต์…˜4(์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€): ์ถ”๊ฐ€๋ช…์„ ์›๋ณธ ํŒŒ์ผ๋ช… ์•ž์— ๋ถ€์ฐฉ\n"
"๋‚ ์งœ/์‹œ๊ฐ„ ์ฒดํฌ ์‹œ ํ•ด๋‹น ์ •๋ณด๊ฐ€ ํŒŒ์ผ๋ช… ๋’ค์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค."
)
)
if __name__ == "__main__":
iface.launch()'''
def update_all(name_option, additional_name, add_date, add_time):
detail_msg, final_file_name = simulate_file_naming(name_option, additional_name, add_date, add_time)
# ์ฝ”๋“œ์ถœ๋ ฅ ์˜์—ญ ์ตœ์ƒ๋‹จ์— "[ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ์ฝ”๋“œ์˜ˆ์‹œ]"์™€ ํ•œ ์นธ ๋„์šด ํ›„ ์„ ํƒ์˜ˆ์‹œ ๊ฒฐ๊ณผ(detail_msg)์™€ ์ „์ฒด ์ฝ”๋“œ ์ถœ๋ ฅ
code_result = f"[ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ์ฝ”๋“œ์˜ˆ์‹œ]\n\n{detail_msg}\n\n{code_str}"
return final_file_name, code_result
with gr.Blocks() as demo:
with gr.Group():
gr.Markdown("### ์›๋ณธ ํŒŒ์ผ๋ช…: sample.jpg")
with gr.Row():
name_option = gr.Radio(
choices=["ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ", "ํŒŒ์ผ๋ช…์œ ์ง€", "ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…", "์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€"],
label="ํŒŒ์ผ๋ช… ์˜ต์…˜",
value="ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ"
)
additional_name = gr.Text(
label="์ถ”๊ฐ€๋ช…/๋ณ€๊ฒฝ ํŒŒ์ผ๋ช… ์ž…๋ ฅ",
placeholder="์˜ต์…˜์— ๋”ฐ๋ผ ์ž…๋ ฅํ•˜์„ธ์š”"
)
with gr.Row():
add_date = gr.Checkbox(label="๋‚ ์งœ ์ ์šฉ", value=True)
add_time = gr.Checkbox(label="์‹œ๊ฐ„ ์ ์šฉ", value=True)
with gr.Row():
final_filename_output = gr.Text(label="ํŒŒ์ผ๋ช…๊ฒฐ๊ณผ", lines=2)
with gr.Row():
code_output = gr.Text(label="์ฝ”๋“œ์ถœ๋ ฅ", lines=20)
inputs = [name_option, additional_name, add_date, add_time]
outputs = [final_filename_output, code_output]
for comp in inputs:
comp.change(update_all, inputs=inputs, outputs=outputs)
demo.launch()