Kims12's picture
Update app.py
42691c3 verified
raw
history blame
3.23 kB
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":
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":
# λΆ€λ“œλŸ¬μš΄ ν”ΌλΆ€ ν‘œν˜„μ„ μœ„ν•œ ν•„ν„° μ‘°ν•©
# Step 1: Detail Enhance μ‚¬μš© μ΅œμ†Œν™”
enhanced = cv2.detailEnhance(image, sigma_s=5, sigma_r=0.05 + 0.05 * normalized_intensity)
# Step 2: Gaussian Blur 적용 (μ λ‹Ήν•œ κ°•λ„λ‘œ)
blurred = cv2.GaussianBlur(enhanced, (15, 15), 0)
# Step 3: Bilateral Filter 적용 (경계 λ³΄μ‘΄ν•˜λ©΄μ„œ λΆ€λ“œλŸ½κ²Œ)
smoothed = cv2.bilateralFilter(blurred, d=9, sigmaColor=75, sigmaSpace=75)
return smoothed
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()