File size: 4,884 Bytes
beefb5c
238f6c4
 
beefb5c
238f6c4
 
 
 
 
 
 
beefb5c
238f6c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82eb83a
238f6c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66e8dfe
 
16dcee9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import gradio as gr
from PIL import Image, ImageEnhance, ImageOps, ImageFilter
from gradio_imageslider import ImageSlider

def apply_filter(image, filter_name, intensity):
    if filter_name == "Soft Glow":
        glow = image.filter(ImageFilter.GaussianBlur(intensity))
        enhanced_image = Image.blend(image, glow, 0.5)
        return enhanced_image

    elif filter_name == "Portrait Enhancer":
        enhancer = ImageEnhance.Sharpness(image)
        image = enhancer.enhance(1 + 0.1 * intensity)
        enhancer = ImageEnhance.Color(image)
        image = enhancer.enhance(1 + 0.1 * intensity)
        return image

    elif filter_name == "Warm Tone":
        warm_tone = ImageEnhance.Color(image).enhance(1 + 0.1 * intensity)
        return warm_tone

    elif filter_name == "Cold Tone":
        # 청둝색 μ˜€λ²„λ ˆμ΄ 적용
        blue_overlay = Image.new('RGB', image.size, (173, 216, 230))
        blended_image = Image.blend(image, blue_overlay, 0.05 * intensity)
        # μ„ λͺ…도 κ°•ν™”
        enhancer = ImageEnhance.Sharpness(blended_image)
        sharpened_image = enhancer.enhance(1 + 0.3 * intensity)  # μ„ λͺ…도 μ‘°μ •
        return sharpened_image

    elif filter_name == "High-Key":
        enhancer = ImageEnhance.Brightness(image)
        high_key = enhancer.enhance(1 + 0.1 * intensity)
        enhancer = ImageEnhance.Contrast(high_key)
        high_key = enhancer.enhance(0.8 + 0.02 * intensity)
        return high_key

    elif filter_name == "Low-Key":
        enhancer = ImageEnhance.Contrast(image)
        low_key = enhancer.enhance(1 + 0.1 * intensity)
        enhancer = ImageEnhance.Brightness(low_key)
        low_key = enhancer.enhance(1 - 0.05 * intensity)
        return low_key

    elif filter_name == "Haze":
        haze = image.filter(ImageFilter.GaussianBlur(2 * intensity))
        enhancer = ImageEnhance.Brightness(haze)
        haze = enhancer.enhance(1 + 0.05 * intensity)
        return haze

    elif filter_name == "Monochrome":
        mono = image.convert("L")
        mono = ImageOps.colorize(mono, black="black", white="white")
        enhancer = ImageEnhance.Contrast(mono)
        mono = enhancer.enhance(1 + 0.1 * intensity)
        return mono

    return image

def get_filter_description(filter_name):
    descriptions = {
        "Soft Glow": "μ–Όκ΅΄μ˜ ν”ΌλΆ€λ₯Ό λΆ€λ“œλŸ½κ²Œ ν•˜λ©΄μ„œ μ€μ€ν•œ 빛을 λ”ν•΄μ£ΌλŠ” ν•„ν„°μž…λ‹ˆλ‹€.",
        "Portrait Enhancer": "ν”ΌλΆ€ 톀을 κ· μΌν•˜κ²Œ λ§Œλ“€κ³ , λˆˆμ„ 밝게 ν•˜λ©°, μ–Όκ΅΄μ˜ μž…μ²΄κ°μ„ κ°•μ‘°ν•˜λŠ” ν•„ν„°μž…λ‹ˆλ‹€.",
        "Warm Tone": "사진에 λ”°λœ»ν•œ 색쑰λ₯Ό μ μš©ν•˜μ—¬ ν”ΌλΆ€λ₯Ό κ±΄κ°•ν•˜κ²Œ 보이게 ν•©λ‹ˆλ‹€.",
        "Cold Tone": "μ•„μ£Ό μ€μ€ν•œ νŒŒλž€μƒ‰ μ˜€λ²„λ ˆμ΄λ₯Ό μ μš©ν•˜κ³  μ„ λͺ…도λ₯Ό κ°•ν™”ν•˜μ—¬ μ‹œμ›ν•˜κ³  μ„ λͺ…ν•œ λŠλ‚Œμ„ μ£ΌλŠ” ν•„ν„°μž…λ‹ˆλ‹€.",
        "High-Key": "밝고 ν™”μ‚¬ν•œ 이미지λ₯Ό λ§Œλ“€μ–΄μ£ΌλŠ” ν•„ν„°μž…λ‹ˆλ‹€. 인물 μ‚¬μ§„μ—μ„œ 특히 ν™”μ‚¬ν•œ λΆ„μœ„κΈ°λ₯Ό μ—°μΆœν•©λ‹ˆλ‹€.",
        "Low-Key": "μ–΄λ‘μš΄ 톀을 κ°•μ‘°ν•˜μ—¬ 인물의 κ°μ •μ΄λ‚˜ λΆ„μœ„κΈ°λ₯Ό 극적으둜 ν‘œν˜„ν•˜λŠ” ν•„ν„°μž…λ‹ˆλ‹€.",
        "Haze": "λΆ€λ“œλŸ½κ³  νλ¦Ών•œ 효과λ₯Ό μ£Όμ–΄ λͺ½ν™˜μ μ΄κ³  λ‘œλ§¨ν‹±ν•œ λŠλ‚Œμ„ μ£ΌλŠ” ν•„ν„°μž…λ‹ˆλ‹€.",
        "Monochrome": "νŠΉμ • 색쑰 ν•˜λ‚˜λ§Œ μ‚¬μš©ν•˜μ—¬ 인물 사진을 λ‹¨μƒ‰μœΌλ‘œ ν‘œν˜„ν•˜λŠ” ν•„ν„°μž…λ‹ˆλ‹€."
    }
    return descriptions.get(filter_name, "")

def update_description(filter_name):
    return get_filter_description(filter_name)

def process_image(image, filter_name, intensity):
    filtered_image = apply_filter(image, filter_name, intensity)
    return image, filtered_image  # 원본 이미지와 ν•„ν„° 적용된 이미지 λ°˜ν™˜

with gr.Blocks() as iface:
    with gr.Row():
        with gr.Column():
            image_input = gr.Image(type="pil", label="이미지 μ—…λ‘œλ“œ")
            filter_input = gr.Radio(
                ["Soft Glow", "Portrait Enhancer", "Warm Tone", "Cold Tone", "High-Key", "Low-Key", "Haze", "Monochrome"], 
                label="ν•„ν„° 선택",
                value="Soft Glow"
            )
            intensity_slider = gr.Slider(1, 10, value=5, step=1, label="ν•„ν„° 강도")
            description_output = gr.Markdown(get_filter_description("Soft Glow"))

        with gr.Column():
            slider_output = ImageSlider(label="Before and After", type="pil")

    filter_input.change(fn=update_description, inputs=filter_input, outputs=description_output)

    process_button = gr.Button("ν•„ν„° 적용")
    process_button.click(
        fn=process_image,
        inputs=[image_input, filter_input, intensity_slider],
        outputs=slider_output
    )

    iface.title = "인물 사진에 μ΅œμ ν™”λœ ν•„ν„°"
    iface.description = "인물 사진에 μ΅œμ ν™”λœ λ‹€μ–‘ν•œ ν•„ν„°λ₯Ό μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€."

if __name__ == "__main__":
    iface.launch()