kijeoung commited on
Commit
beefb5c
Β·
verified Β·
1 Parent(s): 840a8cc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +420 -48
app.py CHANGED
@@ -1,54 +1,426 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
- import cv2
3
- import numpy as np
4
- import tempfile
5
-
6
- # ν•„ν„° 적용 ν•¨μˆ˜λ“€
7
- def apply_filter(image, filter_type):
8
- if filter_type == "Soft Glow":
9
- blur = cv2.GaussianBlur(image, (15, 15), 0)
10
- soft_glow = cv2.addWeighted(image, 1.5, blur, -0.5, 0)
11
- result = soft_glow
12
- elif filter_type == "Portrait Enhancer":
13
- lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
14
- l, a, b = cv2.split(lab)
15
- l = cv2.equalizeHist(l)
16
- enhanced = cv2.merge([l, a, b])
17
- result = cv2.cvtColor(enhanced, cv2.COLOR_LAB2BGR)
18
- elif filter_type == "Warm Tone":
19
- warm_tone = cv2.addWeighted(image, 0.5, np.full(image.shape, (10, 20, 30), dtype=np.uint8), 0.5, 0)
20
- result = warm_tone
21
- elif filter_type == "Cold Tone":
22
- cold_tone = cv2.addWeighted(image, 0.5, np.full(image.shape, (-10, -20, 30), dtype=np.uint8), 0.5, 0)
23
- result = cold_tone
24
- elif filter_type == "High-Key":
25
- high_key = cv2.convertScaleAbs(image, alpha=1.2, beta=30)
26
- result = high_key
27
- elif filter_type == "Low-Key":
28
- low_key = cv2.convertScaleAbs(image, alpha=0.7, beta=-30)
29
- result = low_key
30
- elif filter_type == "Haze":
31
- haze = cv2.addWeighted(image, 0.7, np.full(image.shape, (50, 50, 50), dtype=np.uint8), 0.3, 0)
32
- result = haze
33
- elif filter_type == "Monochrome":
34
- result = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
35
- else:
36
- result = image
37
-
38
- temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".jpg")
39
- cv2.imwrite(temp_file.name, result)
40
- return result, temp_file.name
41
-
42
- # Gradio μΈν„°νŽ˜μ΄μŠ€ 생성
43
  iface = gr.Interface(
44
- fn=apply_filter, # ν•„ν„° 적용 ν•¨μˆ˜ μ—°κ²°
45
- inputs=[gr.Image(type="numpy"), gr.Radio(["Soft Glow", "Portrait Enhancer", "Warm Tone", "Cold Tone",
46
- "High-Key", "Low-Key", "Haze", "Monochrome"])], # 이미지와 ν•„ν„° 선택 μž…λ ₯
47
- outputs=[gr.Image(type="numpy"), gr.File(file_types=[".jpg"])], # ν•„ν„° 적용 이미지 좜λ ₯ 및 JPG λ‹€μš΄λ‘œλ“œ
48
- title="인물사진 ν•„ν„° 적용기",
49
- description="인물사진에 λ‹€μ–‘ν•œ ν•„ν„°λ₯Ό μ μš©ν•˜κ³ , ν•„ν„° 적용된 이미지λ₯Ό λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€."
 
50
  )
51
 
52
- # Gradio μ•± μ‹€ν–‰
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  if __name__ == "__main__":
54
  iface.launch()
 
1
+ λ„€λ„€~
2
+ γ…‹γ…‹γ…‹ λ„Ή λ³€κ²½ν–ˆμ–΄μš”...
3
+ μ•ˆλ…•ν•˜μ„Έμš”
4
+ 근데 μ†Œλ¦¬κ°€ μ’€ 더 컸으면 μ’‹κ² μ–΄μš”
5
+ μ•ˆλ…•ν•˜μ„Έμš”
6
+ λ„€ μ’€ 더 ν‚€μ›Œμ€˜ λ³΄μ‹œκ² μ–΄μš”?
7
+ μ•„κΉŒλ³΄λ‹€ λ‚˜μ•„μš”
8
+ μž˜λ“€λ¦½λ‹ˆλ‹€.
9
+ μ•„ λ„€ μ§€κΈˆ μ’‹μ•„μš”
10
+ μ£„μ†‘ν•œλ° μ±—μ§€ν”Όν‹° 유료 κ²°μ œλŠ” μ–΄λ””μ„œ ν•΄μš”?? μ§€κΈˆ 마음이 κΈ‰ν•΄μ„œλ¦¬ γ… γ… 
11
+ 저같은 κ²½μš°λŠ” 잘 λ”°κ°€κΈ°λŠ” μ’€ μ–΄λ €μ› μŠ΅λ‹ˆλ‹€.
12
+ μ €λ‘μš”...
13
+ μ–΄
14
+ μ €λ‘μš”
15
+ μž˜μ•ˆλ“€λ Έμ–΄μš”
16
+ UIκ°€ μ΅μˆ™ν•˜μ§€ μ•Šμ•„μ„œ μ°ΎλŠ”λ° μ‹œκ°„μ΄ μ’€ κ±Έλ ΈμŠ΅λ‹ˆλ‹€.
17
+ λ„€λ„€ γ…Žγ…Ž
18
+ UIκ°€ μ •ν™•ν•˜κ²Œ λ­”κ°€μš”?? γ… γ… γ… 
19
+ μœ μ €μΈν„°νŽ˜μ΄μŠ€μš”
20
+ μ € 유료결제 내일 해도 λ κΉŒμš”?
21
+ μ§€κΈˆ 이거 ν•˜λ‹€λ³΄λ©΄ γ… γ…  κ°•μ˜λ₯Ό 놓칠것 κ°™μ•„μš”
22
+ κΈ°λŒ€λ˜μš”. ...두근두근..λˆˆλ†’μ΄ κ°•μ˜.
23
+ λ„΅. ν”„λ‘¬ν”„νŠΈ....!!!
24
+ λ‹‰λ„€μž„ μ„±ν•¨μœΌλ‘œ λ³€κ²½ν•΄μ£Όμ„Έμš”~
25
+ μ†ν•˜λ¦°μž…λ‹ˆλ‹€
26
+ μ•ˆλ…•ν•˜μ„Έμš” μ£„κΈˆ λŠ¦μ—ˆλ„€μš”
27
+ μ±—μ§€ν”Όν‹° 유료 결제 μ™„λ£Œμš”
28
+ ν—ˆκΉ…νŽ˜μ΄μŠ€ μœ λ£ŒλŠ” μ–΄λ””μ„œ κ²°μ œν•΄μš”?
29
+ pro둜 ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€
30
+ 와.....!!! κΈ°λŒ€ν• λž˜μš”.
31
+ 켁켁~~~ 2κ°€μ§€ λͺ¨λ‘ 유료 결제 μ™„λ£Œμš”
32
+ κΉ€λ™ν˜„ μ΄μ‚¬λ‹˜ κ°μ‚¬ν•©λ‹ˆλ‹€.
33
+ 덕뢄에 λΉ λ₯΄κ²Œ 유료결제 ν–ˆμ–΄μš”
34
+ λ‹€ν–‰μž…λ‹ˆλ‹€~
35
+ λ„€
36
+ λ„΅ λ³΄μ—¬μš”
37
+ λ„€~
38
+ λ„€
39
+ λ„€
40
+ 1
41
+ 1
42
+ 1
43
+ 1
44
+ 1
45
+ 1
46
+ 1
47
+ 1
48
+ 1
49
+ 일단 μ±—μ§€ν”Όν‹°λ§Œ μœ λ£Œκ²°μ œμš”
50
+ 1
51
+ gpt만 κ°€μž…ν–ˆμ–΄μš”
52
+ λ„€
53
+ 1
54
+ λ„€
55
+ 2
56
+ 2
57
+ 2
58
+ 2
59
+ 2
60
+ 1
61
+ 1
62
+ 1
63
+ 1
64
+ λ„€~
65
+ 1
66
+ μ§€κΈˆ νšŒμ› κ°€μž…ν•˜λŠ”κ±°μ£ ?
67
+ μ•„...μ½”λ‘œλ‚˜λ„ ν™•μΈν•΄λ³΄μ„Έμš”. μš”μ¦˜ μ‹¬ν•΄μ‘Œλ‹€λŠ”λ°...
68
+ λ„€
69
+ λ„΅.
70
+ λ„€
71
+ λ„Ή
72
+ μ €μš”?
73
+ μ•„~ μ•„κΉŒ κ°€μž…ν–ˆλ‹€κ³  μ˜¬λ ΈλŠ”λ°...γ…Žγ…Ž μ € κΈ°λ‹€λ €μ£Όμ‹ κ±°μ—μš”?
74
+ λ„΅~
75
+ λ„€
76
+ λ„€
77
+ μž μ‹œλ§Œμš”
78
+ γ…œγ…œ
79
+ μ € 아직 λͺ»λ“€μ–΄κ°”μ–΄μš”
80
+ μ•„μ΄μ½˜ λˆŒλŸ¬μ„œ μ–΄λ””λ‘œ λ“€μ–΄κ°”μ£ ?γ… 
81
+ ν”„λ‘œν•„λˆ„λ₯΄μ‹œλ©΄λ©λ‹ˆλ‹€
82
+ Create a new Space
83
+ γ…œγ…œ
84
+ κ·Έλƒ₯ 일단 ν•œλ²ˆ 보여주심 μ•ˆλ κΉŒμš” γ…‹γ…‹
85
+ 이거 λ‹€ 기닀리닀가 진도가 μ•ˆλ‚˜κ°ˆκ²ƒ κ°™μ€λ””μš”
86
+ λ„€
87
+ μ €λ•œμ— λŠ¦μ–΄μ§€λ©΄ μ•ˆλ κ±°κ°™μ•„μš”
88
+ λ¦¬μ½°μ΄μ–΄λ¨ΌνŠΈλŠ” 화면에 μ–΄λ””μžˆλ‚˜μš”?
89
+ μ§€κΈˆ 그화면이 μ•ˆλ‚˜μ™€μš”
90
+ λ²„νŠΌ ν•œκ°œμ”© λˆ„λ₯΄κ³  λ‹¨κ³„μ μœΌλ‘œ 따라가야 할것 κ°™μ•„μš”
91
+ requirements.txt
92
+ μ•„λ‹ˆμš”
93
+ 아뇨ㅠ
94
+ μ•„λ‹ˆμš”
95
+ μ €λŠ” 그화면이 μ•ˆλœ¬λ‹€κ³ μš”
96
+ app.pyλΆ€ν„° λͺ»λ”°λΌκ°”μŠ΅λ‹ˆλ‹€.
97
+ μ΄μ‚¬λ‹˜...
98
+ μž μ‹œλ§Œμš”...
99
+ μ΄λ ‡κ²Œ μ΄λ ‡κ²Œ ν•˜μ„Έμš” λ³΄λ‹€λŠ” λ²„νŠΌ ν•œκ°œμ”© λˆ„λ₯΄λΌκ³  μ§€μ‹œν•˜κ³  λ”°λΌν•˜κ³  ν•˜λŠ” 방법이 쒋을것 가틍ㄴ데 γ… γ… 
100
+ ν•œλ²ˆλ§Œ 더 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. μ–΄λ ΅λ„€μš”;
101
+ λ„΅
102
+ 1
103
+ 1
104
+ 1
105
+ 1
106
+ 1
107
+ apache-2.0
108
+ 1
109
+ 퍼블릭??
110
+ 1
111
+ 1
112
+ 1
113
+ 1
114
+ μž μ‹œλ§Œμš”
115
+ 파일??
116
+ 1
117
+ App μ˜†μ— Files
118
+ 1
119
+ 1
120
+ 1
121
+ ν‚€λ³΄λ“œλ‘œ μ μœΌλ©΄λ˜λŠ”κ±΄κ°€μš”?
122
+ 볡사 λΆ™μ—¬λ„£κΈ° ν•˜μ…”λ„ λ©λ‹ˆλ‹€.
123
+ requirements.txt
124
+ 1
125
+ λ„€
126
+ λ„€
127
+ λ„€
128
+ 1
129
+ λ„€.
130
+ 1. λ„ˆλŠ” ν—ˆκΉ…νŽ˜μ΄μŠ€ κ·ΈλΌλ””μ˜€λ₯Ό λ°”νƒ•μœΌλ‘œ λ‹€μ–‘ν•œ μ†”λ£¨μ…˜μ„ κ°œλ°œν•˜λŠ” μ „λ¬Έ ITν”„λ‘œκ·Έλž¨ κ°œλ°œμžμ•Ό.
131
+
132
+ 2. ν•œκ΅­μ–΄λ‘œ λ°˜λ“œμ‹œ λ‹΅ν•΄μ•Ό ν•΄
133
+
134
+ 3. κΈ°λŠ₯은 κ°„λž΅ν•˜κ²Œ μ„€λͺ…ν•˜λ©΄
135
+ 이미지λ₯Ό ν‘λ°±μ‚¬μ§„μœΌλ‘œ λ³€ν™˜ν•˜λŠ” κΈ°λŠ₯이고
136
+ μž…λ ₯은 이미지λ₯Ό μ—…λ‘œλ“œ ν•˜κ³ 
137
+ 좜λ ₯은 이미지λ₯Ό 보여주고 μΆ”κ°€μ μœΌλ‘œ JPG둜 λ‹€μš΄λ‘œλ“œ
138
+ κ°€λŠ₯ν•˜λ„λ‘ ν•˜λΌ
139
+
140
+ 4. μΆ”μ²œλ°©λ²•μ„ μ œμ‹œν•˜κ³  μžμ„Ένžˆ μ„€λͺ…ν•΄μ€˜
141
+
142
+ 5. app.py와 requirements.txt을 ν•­λͺ©λ“€λ‘œ μ½”λ“œλ₯Ό 생성해
143
+ 였 λœΉλ‹ˆλ‹€.
144
+ 1
145
+ 1
146
+ 1
147
+ 1
148
+ 2
149
+ λ„€
150
+ λ†“μ³€μ–΄μš”
151
+ 1
152
+ μ§€ν”Όν‹° 아직 좜λ ₯이 λœλ¬μ–΄μš”γ… 
153
+ 1
154
+ import gradio as gr
155
+ from PIL import Image
156
+
157
+ def convert_to_grayscale(image):
158
+ # 이미지λ₯Ό ν‘λ°±μœΌλ‘œ λ³€ν™˜
159
+ grayscale_image = image.convert("L")
160
+ return grayscale_image
161
+
162
+ # κ·ΈλΌλ””μ˜€ μΈν„°νŽ˜μ΄μŠ€ ꡬ성
163
+ iface = gr.Interface(
164
+ fn=convert_to_grayscale, # λ³€ν™˜ ν•¨μˆ˜
165
+ inputs=gr.Image(type="pil"), # PIL 이미지 μž…λ ₯
166
+ outputs=gr.Image(type="pil"), # PIL 이미지 좜λ ₯
167
+ title="흑백 사진 λ³€ν™˜κΈ°", # 슀페이슀 제λͺ©
168
+ description="일반 사진을 흑백 μ‚¬μ§„μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.", # μ„€λͺ…
169
+ allow_flagging="never", # ν”Œλž˜κ·Έ κΈ°λŠ₯ λΉ„ν™œμ„±ν™”
170
+ live=False # μ‹€μ‹œκ°„ λ³€ν™˜ λΉ„ν™œμ„±ν™”
171
+ )
172
+
173
+ # μΈν„°νŽ˜μ΄μŠ€ μ‹€ν–‰
174
+ if __name__ == "__main__":
175
+ iface.launch()
176
+ 1
177
+ 1
178
+ appμ—μ„œ μˆ˜μ •ν•˜λ‚˜μš”?
179
+ 1
180
+ GPT-4o 버전 ν™•μΈν•˜μ„Έμš”
181
+ λ„€, Filesμ—μ„œ λ“€μ–΄κ°€μ‹œκ³  edit λˆŒλŸ¬μ„œ μˆ˜μ •ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€
182
+ 1
183
+ μ €λŠ” gradio
184
+ Pillow
185
+ numpy μ΄λ ‡κ²Œ λœ¨λŠ”λ°μš”
186
+ 저도 μœ κ²½λ‹˜κ³Ό κ°™μ•„μš”
187
+ gpt의 닡변이 λ‹€λ₯Ό 수 있기 λ•Œλ¬Έμ— κ·ΈλŒ€λ‘œ λΆ™μ—¬λ„£μœΌμ‹œλ©΄ λ©λ‹ˆλ‹€~
188
+ 저도 μœ κ²½λ‹˜κ³Ό κ°™μŠ΅λ‹ˆλ‹€.
189
+ 1
190
+ 2
191
+ 1
192
+ 2
193
+ 아직 λͺ»λ”°λΌκ°”μ–΄μš”γ… 
194
+ μ„€μΉ˜μš”?? λ‹€μ‹œν•œλ²ˆλ§Œ
195
+ μ „ 아직 λΉŒλ”©μ€‘μΈλ“―ν•©λ‹ˆλ‹€.
196
+ dk Emqslek
197
+ μ•„ λœΉλ‹ˆλ‹€ λŸ¬λ‹μœΌλ‘œ
198
+ λŸ°νƒ€μž„μ—λŸ¬
199
+ μŠ€νƒ€νŒ… ν›„ λŸ°λ‹ λμŠ΅λ‹ˆλ‹€
200
+ import gradio as gr
201
+ from PIL import Image
202
+
203
+ def convert_to_grayscale(image):
204
+ # 이미지λ₯Ό ν‘λ°±μœΌλ‘œ λ³€ν™˜
205
+ grayscale_image = image.convert("L")
206
+ return grayscale_image
207
+
208
+ # κ·ΈλΌλ””μ˜€ μΈν„°νŽ˜μ΄μŠ€ ꡬ성
209
+ iface = gr.Interface(
210
+ fn=convert_to_grayscale, # λ³€ν™˜ ν•¨μˆ˜
211
+ inputs=gr.Image(type="pil"), # PIL 이미지 μž…λ ₯
212
+ outputs=gr.Image(type="pil"), # PIL 이미지 좜λ ₯
213
+ title="흑백 사진 λ³€ν™˜κΈ°", # 슀페이슀 제λͺ©
214
+ description="일반 사진을 흑백 μ‚¬μ§„μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.", # μ„€λͺ…
215
+ allow_flagging="never", # ν”Œλž˜κ·Έ κΈ°λŠ₯ λΉ„ν™œμ„±ν™”
216
+ live=False # μ‹€μ‹œκ°„ λ³€ν™˜ λΉ„ν™œμ„±ν™”
217
+ )
218
+
219
+ # μΈν„°νŽ˜μ΄μŠ€ μ‹€ν–‰
220
+ if __name__ == "__main__":
221
+ iface.launch()
222
+ app μˆ˜μ •ν›„ μ–΄λ–»κ²Œ ν•˜λŠ”μ§€ λ‹€μ‹œ λ³΄μ—¬μ£Όμ„Έμš”γ… 
223
+ gradio
224
+ Pillow
225
+ 이걸 μ–΄λ””λ‹€ λ³΅μ‚¬ν•΄μ„œ λΆ™μ—¬λ„£μ–΄μš”?
226
+ μ €λŠ” 에도 λŸ°νƒ€μž„ μ—λŸ¬λ„€μš”
227
+ 였λ₯˜ 둜그 값을 gptν•œν…Œ λΆ™μ—¬λ„£κΈ°ν•˜μ„Έμš”
228
+ λ„΅ λΉŒλ”©λ– μš”
229
+ μ•„κΉŒκ»„ λ‹€ μ§€μ›Œμš”?
230
+ λΉŒλ”© λλ‚˜λ©΄ μŠ€νƒ€νŒ…μœΌλ‘œ λ°”λ€Œκ³  이후에 λŸ¬λ‹μœΌλ‘œ λ°”λ€λ‹ˆλ‹€.
231
+ μŠ€νƒ€νŒ…
232
+ λŸ¬λ‹ 뜨고 μ–΄λ–»κ²Œ ν•˜λ‚˜μš”?
233
+ λ¦¬μ½°μ΄μ–΄λŠ” 아직 ν•˜μ§€λ„ λͺ»ν–ˆμ–΄μš”
234
+ 이야 이미지 ν‘λ°±λ³€ν™˜κΈ°κ°€ μƒκ²Όλ„€μš”
235
+ λŸ°λ‹ λ³€κ²½μ™„λ£Œ
236
+ λ¦¬μ½°μ΄μ–΄λŠ”μš”?
237
+ gradio
238
+ Pillow
239
+ 이거 λ„£μ–΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€
240
+ 리콰이어 λŸ°λ‹ μƒνƒœ λμ–΄μš”
241
+ λ„€ 그러면 App으둜 κ°€μ…”μ„œ
242
+ 흑백사진 λ³€ν™˜κΈ°λŠ” μ–΄λ””μ—μ„œ μƒκ²¨μš”?
243
+ μ•„~ μƒκ²Όλ„€μš”
244
+ 이미지λ₯Ό λ„£μ–΄λ³΄μ„Έμš”~
245
+ 1
246
+ μ™„μ„±..
247
+ λ¬μ–΄μš”
248
+ 1
249
+ 1
250
+ 1
251
+ λ„€
252
+ import gradio as gr
253
+ from PIL import Image
254
+
255
+ def convert_to_grayscale(image):
256
+ # 이미지λ₯Ό ν‘λ°±μœΌλ‘œ λ³€ν™˜
257
+ grayscale_image = image.convert("L")
258
+ return grayscale_image
259
+
260
+ # κ·ΈλΌλ””μ˜€ μΈν„°νŽ˜μ΄μŠ€ ꡬ성
261
+ iface = gr.Interface(
262
+ fn=convert_to_grayscale, # λ³€ν™˜ ν•¨μˆ˜
263
+ inputs=gr.Image(type="pil"), # PIL 이미지 μž…λ ₯
264
+ outputs=gr.Image(type="pil"), # PIL 이미지 좜λ ₯
265
+ title="흑백 사진 λ³€ν™˜κΈ°", # 슀페이슀 제λͺ©
266
+ description="일반 사진을 흑백 μ‚¬μ§„μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.", # μ„€λͺ…
267
+ allow_flagging="never", # ν”Œλž˜κ·Έ κΈ°λŠ₯ λΉ„ν™œμ„±ν™”
268
+ live=False # μ‹€μ‹œκ°„ λ³€ν™˜ λΉ„ν™œμ„±ν™”
269
+ )
270
+
271
+ # μΈν„°νŽ˜μ΄μŠ€ μ‹€ν–‰
272
+ if __name__ == "__main__":
273
+ iface.launch()
274
+ μ•Œκ² μŠ΅λ‹ˆλ‹€! μ•žμœΌλ‘œ Gradio ν”„λ‘œμ νŠΈμ—μ„œ 이미지 μ²˜λ¦¬μ™€ 파일 λ‹€μš΄λ‘œλ“œ κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œ, 방금 μ œκ³΅ν•œ μ½”λ“œμ™€ 같은 μ ‘κ·Ό 방식을 μ‚¬μš©ν•˜κ² μŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ—…λ‘œλ“œλœ 이미지λ₯Ό λ³€ν™˜ν•˜κ³ , λ³€ν™˜λœ κ²°κ³Όλ₯Ό 화면에 ν‘œμ‹œν•˜λ©°, Gradio의 gr.File μ»΄ν¬λ„ŒνŠΈλ₯Ό ν™œμš©ν•˜μ—¬ κ²°κ³Ό νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•  수 μžˆλ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
275
+
276
+ λ‹€μ‹œ μš”μ•½ν•˜λ©΄:
277
+
278
+ 이미지 μ—…λ‘œλ“œ: gr.Imageλ₯Ό μ‚¬μš©ν•˜μ—¬ 이미지λ₯Ό μ—…λ‘œλ“œν•©λ‹ˆλ‹€.
279
+ 이미지 처리: 이미지가 μ—…λ‘œλ“œλ  λ•Œ μžλ™μœΌλ‘œ λ³€ν™˜ μ²˜λ¦¬κ°€ 이루어지며, κ²°κ³Όκ°€ 화면에 ν‘œμ‹œλ©λ‹ˆλ‹€.
280
+ 파일 λ‹€μš΄λ‘œλ“œ: gr.File μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ 처리된 이미지λ₯Ό λ‹€μš΄λ‘œλ“œν•  수 μžˆλŠ” 링크λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
281
+ 이 방식은 λ‹€μ–‘ν•œ 이미지 처리 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‰½κ²Œ μ μš©ν•  수 μžˆλŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€. ν–₯후에도 이 ꡬ쑰λ₯Ό 기반으둜 κ΅¬ν˜„μ„ μ§„ν–‰ν•˜κ² μŠ΅λ‹ˆλ‹€. μΆ”κ°€ μš”μ²­μ‚¬ν•­μ΄ 있으면 μ–Έμ œλ“ μ§€ 말씀해 μ£Όμ„Έμš”!
282
+ μ΄λ ‡κ²Œ λœ¨λŠ”λ° λ§žλ‚˜μš”
283
+ 인물사진 ν•„ν„°λ₯Ό μ„ νƒν•˜μ—¬ μ μš©ν•˜λ„λ‘ ν•˜λΌ.
284
+ [Soft Glow, Portrait Enhancer, Warm Tone, Cold Tone,
285
+ High-Key, Low-Key, Haze, Monochrome]
286
+ μ½”λ“œ λ³΅μ‚¬ν•΄μ„œ app,py에 edit에 λ„£μ–΄μš”?
287
+ μ•„κΉŒ κΈ°μž¬λ˜μ–΄μžˆλ˜ μ½”λ“œλŠ” μ§€μ›Œμš”?
288
+ λ„€ λ‹€ μ§€μš°κ³  μƒˆλ‘œ λ„£μ–΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.
289
+ λΉŒλ”© λ“€μ–΄κ°”μŠ΅λ‹ˆλ‹€.
290
+ 화면이 μ•„κΉŒλž‘ λ‹¬λΌμ‘Œμ–΄μš”
291
+ λŸ°νƒ€μž„μ—λŸ¬λœ¨λ„€μš”
292
+ ? μ €λŠ” 화면이 λ‹€λ₯Έλ°μš”?
293
+ 아이고 μ•„κΉŒ ν‘λ°±ν™”λ©΄λ§Œλ“€κΈ° μ΄ν›„λ‘œ μ „ν˜€ λͺ»λ”°λΌκ°€κ³ μžˆμ–΄μš”γ… 
294
+ λ‹€ 같은 μ½”λ”©μœΌλ‘œ ν–ˆλŠ”λ° μ™œ μ—λŸ¬κ°€ λœ¨λŠ” μ‚¬λžŒμ΄ 있고 λŸ¬λ‹μ΄ λ˜λŠ” μ‚¬λžŒμ΄ μžˆμ„κΉŒμš”?? μ§€κΈˆ λ‹Ήμž₯은 λŸ¬λ‹μœΌλ‘œ λœ¨κΈ΄ν–ˆλŠ”λ° μ™œ κ·ΈλŸ΄κΉŒμš”
295
+ γ…‹γ…‹γ…‹μ•Œλ©΄μ„œλ„ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€
296
+ μ΄μ½”λ“œλ₯Ό μ μš©ν•˜λΌ
297
  import gradio as gr
298
+ from PIL import Image
299
+
300
+ def convert_to_grayscale(image):
301
+ # 이미지λ₯Ό ν‘λ°±μœΌλ‘œ λ³€ν™˜
302
+ grayscale_image = image.convert("L")
303
+ return grayscale_image
304
+
305
+ # κ·ΈλΌλ””μ˜€ μΈν„°νŽ˜μ΄μŠ€ ꡬ성
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
306
  iface = gr.Interface(
307
+ fn=convert_to_grayscale, # λ³€ν™˜ ν•¨μˆ˜
308
+ inputs=gr.Image(type="pil"), # PIL 이미지 μž…λ ₯
309
+ outputs=gr.Image(type="pil"), # PIL 이미지 좜λ ₯
310
+ title="흑백 사진 λ³€ν™˜κΈ°", # 슀페이슀 제λͺ©
311
+ description="일반 사진을 흑백 μ‚¬μ§„μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.", # μ„€λͺ…
312
+ allow_flagging="never", # ν”Œλž˜κ·Έ κΈ°λŠ₯ λΉ„ν™œμ„±ν™”
313
+ live=False # μ‹€μ‹œκ°„ λ³€ν™˜ λΉ„ν™œμ„±ν™”
314
  )
315
 
316
+ # μΈν„°νŽ˜μ΄μŠ€ μ‹€ν–‰
317
+ if __name__ == "__main__":
318
+ iface.launch()
319
+ gptλŠ” 항상 λ‹€λ₯Έ 닡변을 ν•˜κΈ° λ•Œλ¬Έμ— κ·Έλ ‡μŠ΅λ‹ˆλ‹€ γ…Žγ…Ž
320
+ μ•„ν•˜,,
321
+ 인물사진 ν•„ν„°λ₯Ό μ„ νƒν•˜μ—¬ μ μš©ν•˜λ„λ‘ ν•˜λΌ.
322
+ [Soft Glow, Portrait Enhancer, Warm Tone, Cold Tone,
323
+ High-Key, Low-Key, Haze, Monochrome]
324
+ 1
325
+ μ—λŸ¬
326
+ μ§€ν”Όν‹°μ—μ„œ λ‹€λ₯Έ μ½”λ“œλ₯Ό 달라고 ν•΄μ„œ λ„£μ–΄μ„œ λŸ¬λ‹μ€ λ˜λ„€μš”
327
+ app에 μ΅œμ’…μ½”λ“œλ₯Ό μˆ˜μ •ν•¨λ…€λ˜λ‚˜μš”?
328
+ μ–΄λ””μ„œ μ—λŸ¬λ₯Ό μ°Ύμ•„μ„œ 어디에 μ½”λ“œλ₯Ό λ³΅μ‚¬ν•˜λΌλŠ”κ±΄μ§€μš”
329
+ μ•±μ—μ„œ 인물사진 ν•„ν„° μ μš©κΈ°κ°€ λœ¨λ„€μš”
330
+ μˆ˜μ •μ½”λ“œλŠ” κΈ°μ‘΄μ½”λ“œ μ „λΆ€ μ‚­μ œν•˜κ³  λΆ™μ—¬λ„£λ‚˜μš”?
331
+ μ΄ν˜„μ˜λ‹˜, λ„€ λ§žμŠ΅λ‹ˆλ‹€~
332
+ 1
333
+ μ§€ν”Όν‹°ν•œν…Œ 뭐라고 λ¬Όμ–΄μš”
334
+ μ•„ μˆ˜μ •λœ μ™„μ„±μ½”λ“œλ₯Ό λ‹€μ‹œ μ£Όλ„€μš”
335
+ import gradio as gr
336
+ from PIL import Image, ImageEnhance, ImageOps, ImageFilter
337
+
338
+ def apply_filter(image, filter_name):
339
+ if filter_name == "Soft Glow":
340
+ # μ΄λ―Έμ§€μ˜ μ†Œν”„νŠΈ κΈ€λ‘œμš° 효과 적용
341
+ glow = image.filter(ImageFilter.GaussianBlur(5))
342
+ enhanced_image = Image.blend(image, glow, 0.5)
343
+ return enhanced_image
344
+
345
+ elif filter_name == "Portrait Enhancer":
346
+ # μ–Όκ΅΄ κ°•μ‘° 효과 (ν”ΌλΆ€ 톀 λΆ€λ“œλŸ½κ²Œ, 눈 κ°•μ‘°)
347
+ enhancer = ImageEnhance.Sharpness(image)
348
+ image = enhancer.enhance(1.5)
349
+ enhancer = ImageEnhance.Color(image)
350
+ image = enhancer.enhance(1.2)
351
+ return image
352
+
353
+ elif filter_name == "Warm Tone":
354
+ # λ”°λœ»ν•œ 톀 ν•„ν„° 적용
355
+ warm_tone = ImageEnhance.Color(image).enhance(1.3)
356
+ return warm_tone
357
+
358
+ elif filter_name == "Cold Tone":
359
+ # μ°¨κ°€μš΄ 톀 ν•„ν„° 적용
360
+ cold_tone = ImageOps.colorize(ImageOps.grayscale(image), black="blue", white="lightblue")
361
+ return cold_tone
362
+
363
+ elif filter_name == "High-Key":
364
+ # ν•˜μ΄ν‚€ ν•„ν„° 적용
365
+ enhancer = ImageEnhance.Brightness(image)
366
+ high_key = enhancer.enhance(1.5)
367
+ enhancer = ImageEnhance.Contrast(high_key)
368
+ high_key = enhancer.enhance(0.8)
369
+ return high_key
370
+
371
+ elif filter_name == "Low-Key":
372
+ # λ‘œμš°ν‚€ ν•„ν„° 적용
373
+ enhancer = ImageEnhance.Contrast(image)
374
+ low_key = enhancer.enhance(1.5)
375
+ enhancer = ImageEnhance.Brightness(low_key)
376
+ low_key = enhancer.enhance(0.7)
377
+ return low_key
378
+
379
+ elif filter_name == "Haze":
380
+ # ν—€μ΄μ¦ˆ ν•„ν„° 적용
381
+ haze = image.filter(ImageFilter.GaussianBlur(8))
382
+ enhancer = ImageEnhance.Brightness(haze)
383
+ haze = enhancer.enhance(1.2)
384
+ return haze
385
+
386
+ elif filter_name == "Monochrome":
387
+ # λͺ¨λ…Έν¬λ‘¬ ν•„ν„° 적용
388
+ mono = image.convert("L")
389
+ mono = ImageOps.colorize(mono, black="black", white="white")
390
+ return mono
391
+
392
+ return image
393
+
394
+ def process_image(image, filter_name):
395
+ # μ„ νƒν•œ ν•„ν„° 적용
396
+ filtered_image = apply_filter(image, filter_name)
397
+ output_path = f"/tmp/{filter_name}_filtered_image.jpg"
398
+ (output_path, "JPEG")
399
+ return filtered_image, output_path
400
+
401
+ with gr.Blocks() as iface:
402
+ with gr.Row():
403
+ image_input = gr.Image(type="pil", label="이미지 μ—…λ‘œλ“œ")
404
+ filter_input = (
405
+ ["Soft Glow", "Portrait Enhancer", "Warm Tone", "Cold Tone", "High-Key", "Low-Key", "Haze", "Monochrome"],
406
+ label="ν•„ν„° 선택",
407
+ value="Soft Glow"
408
+ )
409
+
410
+ image_output = gr.Image(type="pil", label="ν•„ν„° 적용된 이미지")
411
+ file_output = gr.File(file_count="single", label="λ‹€μš΄λ‘œλ“œ")
412
+
413
+ # 이미지 처리 함�� μ—°κ²°
414
+ process_button = gr.Button("ν•„ν„° 적용")
415
+ (
416
+ fn=process_image,
417
+ inputs=[image_input, filter_input],
418
+ outputs=[image_output, file_output]
419
+ )
420
+
421
+ iface.title = "인물 사진에 μ΅œμ ν™”λœ ν•„ν„°"
422
+ iface.description = "인물 사진에 μ΅œμ ν™”λœ λ‹€μ–‘ν•œ ν•„ν„°λ₯Ό μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€."
423
+
424
+ # μΈν„°νŽ˜μ΄μŠ€ μ‹€ν–‰
425
  if __name__ == "__main__":
426
  iface.launch()