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": # 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=5, sigma_r=0.1 + 0.15 * normalized_intensity) return enhanced 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 효과 (밝기 증가) high_key = cv2.convertScaleAbs(image, alpha=1.0 + 0.2 * normalized_intensity, beta=30) return high_key elif filter_type == "Low-Key": # Low-Key 효과 (밝기 감소) low_key = cv2.convertScaleAbs(image, alpha=1.0 - 0.3 * normalized_intensity, beta=-30) return low_key elif filter_type == "Haze": # 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 # Gradio 인터페이스 정의 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, default=50, label="필터 강도") ], outputs=["image", "file"], title="이미지 필터 및 흑백 변환기", description="이미지를 업로드하고 필터와 강도를 선택하면, 변환된 이미지를 JPG 파일로 다운로드할 수 있습니다." ) iface.launch()