CoolFace
Apppublic

cwthomp5/homework

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
app.py93 linesDownload Raw Back to root
1import gradio as gr2import numpy as np3from PIL import Image, ImageFilter4import cv25 6 7def apply_gaussian_blur(image, radius):8    pil_img = Image.fromarray(image)9    blurred = pil_img.filter(ImageFilter.GaussianBlur(radius=radius))10    return np.array(blurred)11 12 13def apply_lens_blur(image, radius, intensity):14    kernel_size = max(3, 2 * radius + 1)15    kernel = np.zeros((kernel_size, kernel_size), dtype=np.float32)16    center = radius17    cv2.circle(kernel, (center, center), radius, 1, -1)18    kernel /= kernel.sum()19 20    img_float = image.astype(np.float32)21    blurred_channels = []22    for c in range(img_float.shape[2]):23        channel = img_float[:, :, c]24        blurred_channel = cv2.filter2D(channel, -1, kernel)25        blurred_channels.append(blurred_channel)26 27    blurred = np.stack(blurred_channels, axis=2)28    output = cv2.addWeighted(img_float, 1 - intensity, blurred, intensity, 0)29    return np.clip(output, 0, 255).astype(np.uint8)30 31 32def process_image(image, effect_type, gaussian_radius, lens_radius, lens_intensity):33    if image is None:34        return None, "Please upload an image first."35 36    img_array = np.array(image)37 38    if effect_type == "Gaussian Blur":39        result = apply_gaussian_blur(img_array, radius=gaussian_radius)40        label = f"Gaussian Blur — Radius: {gaussian_radius}"41    else:42        result = apply_lens_blur(img_array, radius=int(lens_radius), intensity=lens_intensity)43        label = f"Lens Blur — Radius: {lens_radius}, Intensity: {lens_intensity:.2f}"44 45    return Image.fromarray(result), label46 47 48with gr.Blocks(title="Blur Effects Studio") as demo:49 50    gr.Markdown("# 🔭 Blur Effects Studio")51    gr.Markdown("Upload an image and apply **Gaussian Blur** or **Lens (Bokeh) Blur**.")52 53    with gr.Row():54        with gr.Column():55            input_image = gr.Image(type="pil", label="Upload Image")56            effect_type = gr.Radio(57                choices=["Gaussian Blur", "Lens Blur (Bokeh)"],58                value="Gaussian Blur",59                label="Effect Type",60            )61            gaussian_radius = gr.Slider(62                minimum=0.5, maximum=30.0, value=5.0, step=0.5,63                label="Gaussian Radius (for Gaussian Blur)",64            )65            lens_radius = gr.Slider(66                minimum=1, maximum=25, value=8, step=1,67                label="Lens Radius (for Lens Blur)",68            )69            lens_intensity = gr.Slider(70                minimum=0.0, maximum=1.0, value=0.8, step=0.05,71                label="Blend Intensity (for Lens Blur)",72            )73            run_btn = gr.Button("✨ Apply Effect", variant="primary")74 75        with gr.Column():76            output_image = gr.Image(label="Result")77            effect_label = gr.Textbox(label="Applied Effect", interactive=False)78 79    run_btn.click(80        fn=process_image,81        inputs=[input_image, effect_type, gaussian_radius, lens_radius, lens_intensity],82        outputs=[output_image, effect_label],83    )84 85    gr.Markdown("---")86    gr.Markdown(87        "**How to use:** Upload a photo → Select an effect → Adjust sliders → Click Apply Effect"88    )89 90 91if __name__ == "__main__":92    demo.launch()93