Mehak900/Parallel_image_processing
0
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 