CoolFace
Apppublic

Mehak900/Parallel_image_processing

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py82 linesDownload Raw Back to root
1import gradio as gr2import cv23import numpy as np4import cupy as cp5 6# CUDA kernel for custom filter (example sharpening)7custom_filter_kernel = cp.array([[0, -1, 0],8                                 [-1, 5, -1],9                                 [0, -1, 0]], dtype=cp.float32)10 11def edge_detection_cuda(image):12    img_gpu = cp.asarray(image, dtype=cp.uint8)13    gray_gpu = cp.asarray(cv2.cvtColor(image, cv2.COLOR_RGB2GRAY))14    edges_gpu = cv2.Canny(cp.asnumpy(gray_gpu), 100, 200)15    return cv2.cvtColor(edges_gpu, cv2.COLOR_GRAY2RGB)16 17def gaussian_blur_cuda(image):18    img_gpu = cp.asarray(image, dtype=cp.float32)19    blurred_gpu = cv2.GaussianBlur(cp.asnumpy(img_gpu), (15, 15), 0)20    return blurred_gpu.astype(np.uint8)21 22def custom_filter_cuda(image):23    img_gpu = cp.asarray(image, dtype=cp.float32)24    img_gpu = cv2.filter2D(cp.asnumpy(img_gpu), -1, cp.asnumpy(custom_filter_kernel))25    return img_gpu.astype(np.uint8)26 27def process_image(image, operation):28    if image is None:29        return None, None, None30 31    edge_result = None32    blur_result = None33    custom_result = None34 35    if operation == "All":36        # Run operations in parallel using CUDA Streams37        stream1 = cp.cuda.Stream()38        stream2 = cp.cuda.Stream()39        stream3 = cp.cuda.Stream()40 41        with stream1:42            edge_result = edge_detection_cuda(image)43        with stream2:44            blur_result = gaussian_blur_cuda(image)45        with stream3:46            custom_result = custom_filter_cuda(image)47 48        stream1.synchronize()49        stream2.synchronize()50        stream3.synchronize()51 52    elif operation == "Edge Detection":53        edge_result = edge_detection_cuda(image)54    elif operation == "Gaussian Blur":55        blur_result = gaussian_blur_cuda(image)56    elif operation == "Custom Filter":57        custom_result = custom_filter_cuda(image)58 59    return edge_result, blur_result, custom_result60 61with gr.Blocks() as demo:62    gr.Markdown("## 🖼️ Parallel Image Processing with CUDA (GPU)")63 64    with gr.Row():65        with gr.Column():66            image_input = gr.Image(type="numpy", label="Upload Image")67            process_btn = gr.Button("Process Image", variant="primary")68        with gr.Column():69            operation = gr.Radio(["All", "Edge Detection", "Gaussian Blur", "Custom Filter"],70                                 label="Choose Operation", value="All")71 72    with gr.Row():73        edge_output = gr.Image(label="Edge Detection Result")74        blur_output = gr.Image(label="Gaussian Blur Result")75        custom_output = gr.Image(label="Custom Filter Result")76 77    process_btn.click(process_image, inputs=[image_input, operation],78                      outputs=[edge_output, blur_output, custom_output])79 80# Launch app81demo.launch()82