import gradio as gr import cv2 import numpy as np from typing import Union, List from pathlib import Path from PIL import Image import torch # Function to resize images def resize_images(images, scale_percent=50): resized_images = [] for img in images: width = int(img.shape[1] * scale_percent / 100) height = int(img.shape[0] * scale_percent / 100) dim = (width, height) resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA) resized_images.append(resized) return resized_images # Function to stitch images def stitch_images(image_paths, scale_percent=50): images = [cv2.imread(path) for path in image_paths] resized_images = resize_images(images, scale_percent) stitcher = cv2.Stitcher_create() status, stitched_image = stitcher.stitch(resized_images) if status == cv2.Stitcher_OK: print("Stitching successful!") return stitched_image else: print(f"Stitching failed with status code: {status}") return None # Main image processing function def process_image(image_paths, scale_percent=50): stitched_image = stitch_images(image_paths, scale_percent) if stitched_image is not None: try: stitched_image_rgb = cv2.cvtColor(stitched_image, cv2.COLOR_BGR2RGB) return stitched_image_rgb except Exception as e: print(str(e)) return stitched_image # Gradio interface function def gradio_stitch_and_detect(image_files): image_paths = [file.name for file in image_files] result_image = process_image(image_paths, scale_percent=50) if result_image is not None: result_image_rgb = result_image pil_image = Image.fromarray(result_image_rgb) pil_image.save("stitched_image.jpg", "JPEG") return pil_image, "stitched_image.jpg" return None, None # Gradio interface with gr.Blocks() as interface: gr.Markdown("