File size: 3,321 Bytes
ec0dbf0
 
 
 
0bee58f
 
 
 
58f5984
 
 
 
ec0dbf0
 
0bee58f
ec0dbf0
 
dbdd417
0bee58f
ec0dbf0
 
50a5493
0bee58f
50a5493
0bee58f
50a5493
ec0dbf0
 
50a5493
0bee58f
50a5493
0bee58f
50a5493
ec0dbf0
 
 
0bee58f
ec0dbf0
 
 
0bee58f
ec0dbf0
 
 
0bee58f
ec0dbf0
 
 
 
58f5984
 
 
 
 
0bee58f
 
 
ec0dbf0
 
ee7d7d6
 
ec0dbf0
 
 
 
ee7d7d6
 
58f5984
50a5493
58f5984
0bee58f
 
ee7d7d6
ec0dbf0
ee7d7d6
0bee58f
ec0dbf0
 
 
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
import gradio as gr
import cv2
import numpy as np

def apply_filter(image, filter_type, intensity):
    # ๊ฐ•๋„๋ฅผ 0.0์—์„œ 1.0 ์‚ฌ์ด๋กœ ์ •๊ทœํ™”
    normalized_intensity = intensity / 100.0

    if filter_type == "Grayscale":
        # ํ‘๋ฐฑ ๋ณ€ํ™˜
        return convert_to_grayscale(image)
    elif filter_type == "Soft Glow":
        # Soft Glow ํšจ๊ณผ
        gaussian = cv2.GaussianBlur(image, (15, 15), 0)
        soft_glow = cv2.addWeighted(image, 1 - normalized_intensity, gaussian, normalized_intensity, 0)
        return soft_glow
    elif filter_type == "Portrait Enhancer":
        # ๊ฐ„๋‹จํ•œ ํฌํŠธ๋ ˆ์ดํŠธ ํ–ฅ์ƒ (๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์กฐ์ •๋œ ๋Œ€๋น„ ๋ฐ ๋ฐ๊ธฐ)
        enhanced = cv2.detailEnhance(image, sigma_s=5, sigma_r=0.1 + 0.15 * normalized_intensity)
        return enhanced
    elif filter_type == "Warm Tone":
        # ๋”ฐ๋œปํ•œ ํ†ค ํšจ๊ณผ (๋นจ๊ฐ• ๋ฐ ๋…ธ๋ž‘ ํ†ค์„ ๊ฐ•์กฐ)
        increase_red = np.array([[1.0 + 0.2 * normalized_intensity, 0.0, 0.0],
                                 [0.0, 1.0, 0.0],
                                 [0.0, 0.0, 1.0 - 0.2 * normalized_intensity]])
        warm_image = cv2.transform(image, increase_red)
        return warm_image
    elif filter_type == "Cold Tone":
        # ์ฐจ๊ฐ€์šด ํ†ค ํšจ๊ณผ (ํŒŒ๋ž‘ ํ†ค์„ ๊ฐ•์กฐ)
        increase_blue = np.array([[1.0 - 0.2 * normalized_intensity, 0.0, 0.0],
                                  [0.0, 1.0, 0.0],
                                  [0.0, 0.0, 1.0 + 0.2 * normalized_intensity]])
        cold_image = cv2.transform(image, increase_blue)
        return cold_image
    elif filter_type == "High-Key":
        # High-Key ํšจ๊ณผ (๋ฐ๊ธฐ ์ฆ๊ฐ€)
        high_key = cv2.convertScaleAbs(image, alpha=1.0 + 0.2 * normalized_intensity, beta=30)
        return high_key
    elif filter_type == "Low-Key":
        # Low-Key ํšจ๊ณผ (๋ฐ๊ธฐ ๊ฐ์†Œ)
        low_key = cv2.convertScaleAbs(image, alpha=1.0 - 0.3 * normalized_intensity, beta=-30)
        return low_key
    elif filter_type == "Haze":
        # Haze ํšจ๊ณผ
        haze = cv2.addWeighted(image, 1.0 - 0.3 * normalized_intensity, np.full(image.shape, 255, dtype=np.uint8), 0.3 * normalized_intensity, 0)
        return haze
    else:
        return image

def convert_to_grayscale(image):
    # ์ด๋ฏธ์ง€๋ฅผ ํ‘๋ฐฑ์œผ๋กœ ๋ณ€ํ™˜
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    return gray_image

def convert_and_save(image, filter_type, intensity):
    # ์„ ํƒํ•œ ํ•„ํ„ฐ์™€ ๊ฐ•๋„๋ฅผ ์ด๋ฏธ์ง€์— ์ ์šฉ
    filtered_image = apply_filter(image, filter_type, intensity)
    # ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅ
    output_path = "output.jpg"
    cv2.imwrite(output_path, filtered_image)
    return filtered_image, output_path

# Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
iface = gr.Interface(
    fn=convert_and_save, 
    inputs=[
        "image", 
        gr.Radio(
            ["Grayscale", "Soft Glow", "Portrait Enhancer", "Warm Tone", "Cold Tone", "High-Key", "Low-Key", "Haze"], 
            label="ํ•„ํ„ฐ ์„ ํƒ"
        ),
        gr.Slider(minimum=1, maximum=100, default=50, label="ํ•„ํ„ฐ ๊ฐ•๋„")
    ], 
    outputs=["image", "file"], 
    title="์ด๋ฏธ์ง€ ํ•„ํ„ฐ ๋ฐ ํ‘๋ฐฑ ๋ณ€ํ™˜๊ธฐ",
    description="์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  ํ•„ํ„ฐ์™€ ๊ฐ•๋„๋ฅผ ์„ ํƒํ•˜๋ฉด, ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€๋ฅผ JPG ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."
)

iface.launch()