|
import gradio as gr |
|
import cv2 |
|
import numpy as np |
|
from PIL import Image, ImageEnhance |
|
|
|
def apply_filter(image, filter_type, intensity): |
|
|
|
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(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() |
|
|