File size: 3,580 Bytes
ec0dbf0
16f9a51
ec0dbf0
26ae524
ec0dbf0
16f9a51
 
 
b99b09d
16f9a51
 
 
8a91ef2
 
0ce6512
 
16f9a51
0ce6512
16f9a51
 
8a91ef2
 
26ae524
 
16f9a51
 
 
26ae524
16f9a51
 
26ae524
16f9a51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ec0dbf0
16f9a51
 
ec0dbf0
16f9a51
 
ec0dbf0
16f9a51
 
ec0dbf0
58f5984
16f9a51
58f5984
 
0bee58f
 
ec0dbf0
16f9a51
ee7d7d6
ec0dbf0
 
 
ee7d7d6
16f9a51
58f5984
16f9a51
58f5984
0bee58f
841fb88
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
81
82
83
84
85
import gradio as gr
import cv2
import numpy as np
from PIL import Image, ImageEnhance

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":
        # κΈ°λ³Έ 10% κ°•λ„μ—μ„œ μ‹œμž‘ν•˜μ—¬ μ΅œλŒ€ 100% κ°•λ„κΉŒμ§€ 쑰절
        base_intensity = 0.1
        adjusted_intensity = base_intensity + (normalized_intensity * (1 - base_intensity))
        
        gaussian = cv2.GaussianBlur(image, (15, 15), 0)
        soft_glow = cv2.addWeighted(image, 1 - adjusted_intensity, gaussian, adjusted_intensity, 0)
        return soft_glow
    elif filter_type == "Portrait Enhancer":
        # κΈ°λ³Έ 50% κ°•λ„μ—μ„œ μ‹œμž‘ν•˜μ—¬ μ΅œλŒ€ 100% κ°•λ„κΉŒμ§€ 쑰절
        base_intensity = 0.5
        adjusted_intensity = base_intensity + (normalized_intensity * (1 - base_intensity))
        
        image_pil = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
        
        enhancer = ImageEnhance.Sharpness(image_pil)
        image_pil = enhancer.enhance(1 + 0.1 * adjusted_intensity)
        
        enhancer = ImageEnhance.Color(image_pil)
        image_pil = enhancer.enhance(1 + 0.1 * adjusted_intensity)
        
        enhanced_image = cv2.cvtColor(np.array(image_pil), cv2.COLOR_RGB2BGR)
        return enhanced_image
    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 = cv2.convertScaleAbs(image, alpha=1.0 + 0.2 * normalized_intensity, beta=30)
        return high_key
    elif filter_type == "Low-Key":
        low_key = cv2.convertScaleAbs(image, alpha=1.0 - 0.3 * normalized_intensity, beta=-30)
        return low_key
    elif filter_type == "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

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, value=50, label="ν•„ν„° 강도")
    ], 
    outputs=["image", "file"], 
    title="이미지 ν•„ν„° 및 흑백 λ³€ν™˜κΈ°",
    description="이미지λ₯Ό μ—…λ‘œλ“œν•˜κ³  필터와 강도λ₯Ό μ„ νƒν•˜λ©΄, λ³€ν™˜λœ 이미지λ₯Ό JPG 파일둜 λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€."
)

iface.launch()