Spaces:
Sleeping
Sleeping
File size: 5,068 Bytes
ec0dbf0 16f9a51 ec0dbf0 26ae524 34a80f6 ec0dbf0 16f9a51 27e15cf 16f9a51 b99b09d 16f9a51 8a91ef2 0ce6512 16f9a51 0ce6512 16f9a51 8a91ef2 26ae524 24cb82a 16f9a51 24cb82a 16f9a51 24cb82a 16f9a51 223546c 24cb82a 16f9a51 223546c 24cb82a 16f9a51 8621860 ec0dbf0 16f9a51 223546c ec0dbf0 16f9a51 8621860 ec0dbf0 16f9a51 ec0dbf0 58f5984 16f9a51 24cb82a 58f5984 2b02fbd a59b3b3 2b02fbd ec0dbf0 4e7b811 7c01b96 2b02fbd 7c01b96 34a80f6 7c01b96 ec0dbf0 7c01b96 2b02fbd 34a80f6 3738e76 34a80f6 4e7b811 34a80f6 2b02fbd 34a80f6 2b02fbd 34a80f6 27e15cf 2b02fbd 4e7b811 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 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 111 |
import gradio as gr
import cv2
import numpy as np
from PIL import Image, ImageEnhance
from gradio_imageslider import ImageSlider
def apply_filter(image, filter_type, intensity):
image = np.array(image)
normalized_intensity = intensity / 100.0
if filter_type == "Grayscale":
return convert_to_grayscale(image)
elif filter_type == "Soft Glow":
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":
base_intensity = 0.5
adjusted_intensity = base_intensity + (normalized_intensity * (1 - base_intensity))
image_pil = Image.fromarray(image)
enhancer = ImageEnhance.Sharpness(image_pil)
image_pil = enhancer.enhance(1 + 0.5 * adjusted_intensity)
enhancer = ImageEnhance.Color(image_pil)
image_pil = enhancer.enhance(1 + 0.5 * adjusted_intensity)
enhanced_image = np.array(image_pil)
return enhanced_image
elif filter_type == "Warm Tone":
warm_image = cv2.addWeighted(image, 1.0, np.full(image.shape, (20, 66, 112), dtype=np.uint8), 0.3 * normalized_intensity, 0)
return warm_image
elif filter_type == "Cold Tone":
cold_image = cv2.addWeighted(image, 1.0, np.full(image.shape, (112, 66, 20), dtype=np.uint8), 0.3 * normalized_intensity, 0)
return cold_image
elif filter_type == "High-Key":
high_key = cv2.convertScaleAbs(image, alpha=1.0 + 0.3 * normalized_intensity, beta=20)
return high_key
elif filter_type == "Low-Key":
low_key = cv2.convertScaleAbs(image, alpha=1.0 - 0.1 * normalized_intensity, beta=-10)
return low_key
elif filter_type == "Haze":
haze = cv2.addWeighted(image, 1.0, 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 cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR)
def convert_and_save(image, filter_type, intensity):
image_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
filtered_image = apply_filter(image_cv, filter_type, intensity)
filtered_image_pil = Image.fromarray(cv2.cvtColor(filtered_image, cv2.COLOR_BGR2RGB))
output_path = "filtered_image.jpg"
filtered_image_pil.save(output_path)
return filtered_image_pil, output_path
def generate_slider_images(image, filter_type, intensity):
image_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
filtered_image = apply_filter(image_cv, filter_type, intensity)
filtered_image_pil = Image.fromarray(cv2.cvtColor(filtered_image, cv2.COLOR_BGR2RGB))
return [image, filtered_image_pil]
def get_filter_description(filter_type):
descriptions = {
"Grayscale": "이미지를 흑백으로 변환합니다.",
"Soft Glow": "부드러운 빛을 추가하여 이미지를 은은하게 만듭니다.",
"Portrait Enhancer": "피부 톤을 균일하게 하고 선명도를 조절하여 인물을 더욱 돋보이게 만듭니다.",
"Warm Tone": "따뜻한 색조를 추가하여 이미지에 온기를 더합니다.",
"Cold Tone": "차가운 색조를 추가하여 이미지에 시원함을 더합니다.",
"High-Key": "밝고 화사한 이미지를 만들어냅니다.",
"Low-Key": "어두운 톤을 강조하여 분위기 있는 이미지를 만듭니다.",
"Haze": "부드럽고 흐릿한 효과를 추가하여 몽환적인 이미지를 만듭니다."
}
return descriptions.get(filter_type, "")
with gr.Blocks() as iface:
with gr.Row():
with gr.Column():
image_input = gr.Image(type="pil", label="이미지 업로드")
filter_input = gr.Radio(
["Grayscale", "Soft Glow", "Portrait Enhancer", "Warm Tone", "Cold Tone", "High-Key", "Low-Key", "Haze"],
label="필터 선택",
value="Soft Glow"
)
intensity_slider = gr.Slider(1, 100, value=50, label="필터 강도")
description_output = gr.Markdown(get_filter_description("Soft Glow"))
with gr.Column():
image_slider = ImageSlider(label="필터 전후 비교", type="pil")
download_link = gr.File(label="Download Filtered Image")
filter_input.change(fn=get_filter_description, inputs=filter_input, outputs=description_output)
process_button = gr.Button("필터 적용")
process_button.click(
fn=generate_slider_images,
inputs=[image_input, filter_input, intensity_slider],
outputs=[image_slider]
)
iface.title = "인물 사진에 최적화된 필터"
iface.description = "인물 사진에 최적화된 다양한 필터를 적용할 수 있습니다."
iface.launch()
|