Kims12 commited on
Commit
e640a83
ยท
verified ยท
1 Parent(s): 3d2c425

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +207 -0
app.py CHANGED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from datetime import datetime, timedelta
3
+ import gradio as gr
4
+
5
+ def simulate_file_naming(name_option, additional_name, add_date, add_time):
6
+ # ๊ณ ์ •๋œ ์›๋ณธ ํŒŒ์ผ๋ช…
7
+ original_filename = "sample.jpg"
8
+ original_name, ext = os.path.splitext(original_filename)
9
+ ext = ext.lstrip(".") if ext else "bin"
10
+
11
+ # ์˜ต์…˜์— ๋”ฐ๋ฅธ ํŒŒ์ผ๋ช… ๊ธฐ๋ณธ ๋ถ€๋ถ„ ๊ฒฐ์ •
12
+ if name_option == "ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ":
13
+ final_base = additional_name.strip() if additional_name.strip() else "ํŒŒ์ผ"
14
+ option_text = f"ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ ({additional_name.strip() if additional_name.strip() else '๊ธฐ๋ณธ๊ฐ’'})"
15
+ elif name_option == "ํŒŒ์ผ๋ช…์œ ์ง€":
16
+ final_base = original_name
17
+ option_text = "ํŒŒ์ผ๋ช…์œ ์ง€"
18
+ elif name_option == "ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…":
19
+ final_base = original_name + (f"_{additional_name.strip()}" if additional_name.strip() else "")
20
+ option_text = f"ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช… ({additional_name.strip() if additional_name.strip() else '์—†์Œ'})"
21
+ elif name_option == "์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€":
22
+ final_base = (f"{additional_name.strip()}_" if additional_name.strip() else "") + original_name
23
+ option_text = f"์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€ ({additional_name.strip() if additional_name.strip() else '์—†์Œ'})"
24
+ else:
25
+ final_base = original_name
26
+ option_text = "๋ฏธ์„ ํƒ"
27
+
28
+ # ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ stamp (ํ•œ๊ตญ ๊ธฐ์ค€)
29
+ now = datetime.utcnow() + timedelta(hours=9)
30
+ date_str = now.strftime('%Y%m%d') if add_date else ""
31
+ time_str = now.strftime('%H%M%S') if add_time else ""
32
+ timestamp = ""
33
+ additional_info = []
34
+ if add_date:
35
+ additional_info.append("๋‚ ์งœ ์ ์šฉ")
36
+ timestamp += f"_{date_str}"
37
+ if add_time:
38
+ additional_info.append("์‹œ๊ฐ„ ์ ์šฉ")
39
+ timestamp += f"_{time_str}"
40
+
41
+ # ์ตœ์ข… ํŒŒ์ผ๋ช… ๊ตฌ์„ฑ (ํ™•์žฅ์ž ์œ ์ง€)
42
+ final_file_name = f"{final_base}{timestamp}.{ext}"
43
+
44
+ # ์ƒ์„ธ ๊ฒฐ๊ณผ ๋ฉ”์‹œ์ง€ ๊ตฌ์„ฑ
45
+ detail_msg = (
46
+ f"์›๋ณธ์ด๋ฆ„ : {original_filename}\n"
47
+ f"์˜ต์…˜์„ ํƒ : {option_text}\n"
48
+ f"์ถ”๊ฐ€ : {', '.join(additional_info) if additional_info else '์—†์Œ'}\n"
49
+ f"๊ฒฐ๊ณผ๋ช… : {final_file_name}"
50
+ )
51
+
52
+ return detail_msg, final_file_name
53
+
54
+ # ์ฝ”๋“œ์ถœ๋ ฅ์— ํ‘œ์‹œํ•  ์ „์ฒด ์ฝ”๋“œ ๋ฌธ์ž์—ด (ํ—ค๋”๋Š” ์ œ๊ฑฐ)
55
+ code_str = '''
56
+ ์œ„ ์„ ํƒ๋œ ํ•ญ๋ชฉ๋ถ€๋ถ„๊ณผ ์—…๋กœ๋“œ ๋œ ํŒŒ์ผ๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ”๋กœ ์ ์šฉํ• ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.
57
+ ํŒŒ์ผ๋ช…์„ ๋ฐ”๊พธ๋Š” ๊ธฐ๋Šฅ์˜ ์ฝ”๋“œ ์™ธ ๋ชจ๋‘ ์‚ญ์ œํ•˜์„ธ์š”.
58
+
59
+ import os
60
+ import tempfile
61
+ from datetime import datetime, timedelta
62
+ import gradio as gr
63
+ from PIL import Image
64
+ def save_file(file_data, final_file_name):
65
+ """
66
+ ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ํด๋”์— ์ €์žฅํ•˜๊ณ  ์ตœ์ข… ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜.
67
+ final_file_name์—๋Š” ํ™•์žฅ์ž ํฌํ•จ.
68
+ """
69
+ temp_file_path = os.path.join(tempfile.gettempdir(), final_file_name)
70
+
71
+ # ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์ด ํŒŒ์ผ ๊ฒฝ๋กœ์ธ ๊ฒฝ์šฐ
72
+ if isinstance(file_data, str) and os.path.exists(file_data):
73
+ with open(file_data, "rb") as f:
74
+ data = f.read()
75
+ with open(temp_file_path, "wb") as f:
76
+ f.write(data)
77
+ # PIL ์ด๋ฏธ์ง€ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ
78
+ elif hasattr(file_data, "save"):
79
+ ext = os.path.splitext(final_file_name)[1].lstrip(".")
80
+ pil_format = "JPEG" if ext.lower() == "jpg" else ext.upper()
81
+ file_data.save(temp_file_path, format=pil_format)
82
+ # bytes ๋ฐ์ดํ„ฐ์ธ ๊ฒฝ์šฐ
83
+ elif isinstance(file_data, bytes):
84
+ with open(temp_file_path, "wb") as f:
85
+ f.write(file_data)
86
+ # ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ์ธ ๊ฒฝ์šฐ (์˜ˆ: ํ…์ŠคํŠธ)
87
+ elif isinstance(file_data, str):
88
+ with open(temp_file_path, "w", encoding="utf-8") as f:
89
+ f.write(file_data)
90
+ else:
91
+ raise ValueError("์ง€์›๋˜์ง€ ์•Š๋Š” ํŒŒ์ผ ํ˜•์‹์ž…๋‹ˆ๋‹ค.")
92
+
93
+ return temp_file_path
94
+ def process_file(file, name_option, additional_name, add_date, add_time):
95
+ """
96
+ ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์„ ๋ฐ›์•„ ๋ผ๋””์˜ค ์˜ต์…˜์— ๋”ฐ๋ผ ํŒŒ์ผ๋ช…์„ ์žฌ๊ตฌ์„ฑํ•œ ํ›„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
97
+
98
+ Parameters:
99
+ file: ์—…๋กœ๋“œ๋œ ํŒŒ์ผ (gr.File ๋“ฑ, ํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” ํŒŒ์ผ ๊ฐ์ฒด)
100
+ name_option: ๋ผ๋””์˜ค ๋ฒ„ํŠผ ์„ ํƒ๊ฐ’ (๋„ค ๊ฐ€์ง€ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜)
101
+ additional_name: ์˜ต์…˜์— ๋”ฐ๋ฅธ ์ถ”๊ฐ€ ์ž…๋ ฅ(์ถ”๊ฐ€๋ช… ๋˜๋Š” ๋ณ€๊ฒฝํ•  ํŒŒ์ผ๋ช…)
102
+ add_date: ๋‚ ์งœ ์ ์šฉ ์—ฌ๋ถ€ (Boolean)
103
+ add_time: ์‹œ๊ฐ„ ์ ์šฉ ์—ฌ๋ถ€ (Boolean)
104
+
105
+ ๋ฐ˜ํ™˜๊ฐ’:
106
+ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋ช…์„ ๊ฐ€์ง„ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ๊ฒฝ๋กœ
107
+ """
108
+ if file is None:
109
+ return None
110
+ # ์›๋ณธ ํŒŒ์ผ๋ช…๊ณผ ํ™•์žฅ์ž ์ถ”์ถœ
111
+ if isinstance(file, str) and os.path.exists(file):
112
+ original_filename = os.path.basename(file)
113
+ elif hasattr(file, "name"):
114
+ original_filename = os.path.basename(file.name)
115
+ else:
116
+ original_filename = "ํŒŒ์ผ.bin"
117
+
118
+ original_name, ext = os.path.splitext(original_filename)
119
+ ext = ext.lstrip(".") if ext else "bin"
120
+
121
+ # ๋ผ๋””์˜ค ์˜ต์…˜์— ๋”ฐ๋ผ ์ตœ์ข… ๊ธฐ๋ณธ ํŒŒ์ผ๋ช… ๊ฒฐ์ •
122
+ if name_option == "ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ":
123
+ # ์ž…๋ ฅ๋œ ์ƒˆ ํŒŒ์ผ๋ช… ์‚ฌ์šฉ (์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ "ํŒŒ์ผ")
124
+ final_base = additional_name.strip() if additional_name.strip() else "ํŒŒ์ผ"
125
+ elif name_option == "ํŒŒ์ผ๋ช…์œ ์ง€":
126
+ final_base = original_name
127
+ elif name_option == "ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…":
128
+ final_base = original_name + (f"_{additional_name.strip()}" if additional_name.strip() else "")
129
+ elif name_option == "์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€":
130
+ final_base = (f"{additional_name.strip()}_" if additional_name.strip() else "") + original_name
131
+ else:
132
+ final_base = original_name
133
+ # ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ stamp (ํ•œ๊ตญ ๊ธฐ์ค€)
134
+ now = datetime.utcnow() + timedelta(hours=9)
135
+ date_str = now.strftime('%Y%m%d') if add_date else ""
136
+ time_str = now.strftime('%H%M%S') if add_time else ""
137
+ timestamp = ""
138
+ if date_str and time_str:
139
+ timestamp = f"_{date_str}_{time_str}"
140
+ elif date_str:
141
+ timestamp = f"_{date_str}"
142
+ elif time_str:
143
+ timestamp = f"_{time_str}"
144
+
145
+ # ์ตœ์ข… ํŒŒ์ผ๋ช… ๊ตฌ์„ฑ (์ ‘๋‘์‚ฌ ์ œ๊ฑฐ)
146
+ final_file_name = f"{final_base}{timestamp}.{ext}"
147
+
148
+ return save_file(file, final_file_name)
149
+ iface = gr.Interface(
150
+ fn=process_file,
151
+ inputs=[
152
+ gr.File(label="ํŒŒ์ผ ์—…๋กœ๋“œ"),
153
+ gr.Radio(
154
+ choices=["ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ", "ํŒŒ์ผ๋ช…์œ ์ง€", "ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…", "์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€"],
155
+ label="ํŒŒ์ผ๋ช… ์˜ต์…˜"
156
+ ),
157
+ gr.Text(label="์ถ”๊ฐ€๋ช…/๋ณ€๊ฒฝ ํŒŒ์ผ๋ช… ์ž…๋ ฅ", placeholder="์˜ต์…˜์— ๋”ฐ๋ผ ์ž…๋ ฅํ•˜์„ธ์š”"),
158
+ gr.Checkbox(label="๋‚ ์งœ ์ ์šฉ", value=True),
159
+ gr.Checkbox(label="์‹œ๊ฐ„ ์ ์šฉ", value=True)
160
+ ],
161
+ outputs=gr.File(label="๋‹ค์šด๋กœ๋“œ ํŒŒ์ผ"),
162
+ title="ํŒŒ์ผ๋ช… ์˜ต์…˜์— ๋”ฐ๋ฅธ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ๋ฐ ๋‹ค์šด๋กœ๋“œ",
163
+ description=(
164
+ "์—…๋กœ๋“œ๋œ ํŒŒ์ผ์˜ ํŒŒ์ผ๋ช…์„ ์•„๋ž˜ ์˜ต์…˜์— ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.\n"
165
+ "์˜ต์…˜1(ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ): ์ž…๋ ฅํ•œ ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ\n"
166
+ "์˜ต์…˜2(ํŒŒ์ผ๋ช…์œ ์ง€): ์›๋ณธ ํŒŒ์ผ๋ช… ์œ ์ง€\n"
167
+ "์˜ต์…˜3(ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…): ์›๋ณธ ํŒŒ์ผ๋ช… ๋’ค์— ์ถ”๊ฐ€๋ช… ๋ถ€์ฐฉ\n"
168
+ "์˜ต์…˜4(์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€): ์ถ”๊ฐ€๋ช…์„ ์›๋ณธ ํŒŒ์ผ๋ช… ์•ž์— ๋ถ€์ฐฉ\n"
169
+ "๋‚ ์งœ/์‹œ๊ฐ„ ์ฒดํฌ ์‹œ ํ•ด๋‹น ์ •๋ณด๊ฐ€ ํŒŒ์ผ๋ช… ๋’ค์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค."
170
+ )
171
+ )
172
+ if __name__ == "__main__":
173
+ iface.launch()'''
174
+
175
+ def update_all(name_option, additional_name, add_date, add_time):
176
+ detail_msg, final_file_name = simulate_file_naming(name_option, additional_name, add_date, add_time)
177
+ # ์ฝ”๋“œ์ถœ๋ ฅ ์˜์—ญ ์ตœ์ƒ๋‹จ์— "[ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ์ฝ”๋“œ์˜ˆ์‹œ]"์™€ ํ•œ ์นธ ๋„์šด ํ›„ ์„ ํƒ์˜ˆ์‹œ ๊ฒฐ๊ณผ(detail_msg)์™€ ์ „์ฒด ์ฝ”๋“œ ์ถœ๋ ฅ
178
+ code_result = f"[ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ์ฝ”๋“œ์˜ˆ์‹œ]\n\n{detail_msg}\n\n{code_str}"
179
+ return final_file_name, code_result
180
+
181
+ with gr.Blocks() as demo:
182
+ with gr.Group():
183
+ gr.Markdown("### ์›๋ณธ ํŒŒ์ผ๋ช…: sample.jpg")
184
+ with gr.Row():
185
+ name_option = gr.Radio(
186
+ choices=["ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ", "ํŒŒ์ผ๋ช…์œ ์ง€", "ํŒŒ์ผ๋ช…์œ ์ง€ + ์ถ”๊ฐ€๋ช…", "์ถ”๊ฐ€๋ช… + ํŒŒ์ผ๋ช…์œ ์ง€"],
187
+ label="ํŒŒ์ผ๋ช… ์˜ต์…˜",
188
+ value="ํŒŒ์ผ๋ช…๋ณ€๊ฒฝ"
189
+ )
190
+ additional_name = gr.Text(
191
+ label="์ถ”๊ฐ€๋ช…/๋ณ€๊ฒฝ ํŒŒ์ผ๋ช… ์ž…๋ ฅ",
192
+ placeholder="์˜ต์…˜์— ๋”ฐ๋ผ ์ž…๋ ฅํ•˜์„ธ์š”"
193
+ )
194
+ with gr.Row():
195
+ add_date = gr.Checkbox(label="๋‚ ์งœ ์ ์šฉ", value=True)
196
+ add_time = gr.Checkbox(label="์‹œ๊ฐ„ ์ ์šฉ", value=True)
197
+ with gr.Row():
198
+ final_filename_output = gr.Text(label="ํŒŒ์ผ๋ช…๊ฒฐ๊ณผ", lines=2)
199
+ with gr.Row():
200
+ code_output = gr.Text(label="์ฝ”๋“œ์ถœ๋ ฅ", lines=20)
201
+
202
+ inputs = [name_option, additional_name, add_date, add_time]
203
+ outputs = [final_filename_output, code_output]
204
+ for comp in inputs:
205
+ comp.change(update_all, inputs=inputs, outputs=outputs)
206
+
207
+ demo.launch()