|
import gradio as gr |
|
import cv2 |
|
import numpy as np |
|
|
|
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": |
|
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=10, sigma_r=0.1 + 0.1 * normalized_intensity) |
|
|
|
|
|
blurred = cv2.GaussianBlur(enhanced, (5, 5), 0) |
|
|
|
|
|
smoothed = cv2.bilateralFilter(blurred, d=5, sigmaColor=50, sigmaSpace=50) |
|
|
|
|
|
final_image = cv2.addWeighted(enhanced, 0.7, smoothed, 0.3, 0) |
|
|
|
return final_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() |
|
|