import cv2 import numpy as np from skimage.metrics import structural_similarity as ssim import gradio as gr # Function to calculate SSIM between two images def calculate_similarity(img1, img2): img1 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY) img2 = cv2.cvtColor(img2, cv2.COLOR_RGB2GRAY) return ssim(img1, img2) # Function to compute similarity scores for all images def compute_similarity(target_image, image_list): scores = [] for image in image_list: similarity_score = calculate_similarity(target_image, image) scores.append(similarity_score) return scores # Function to handle the Gradio interface def image_similarity(target_image, image_list): target_image = target_image.astype(np.uint8) image_list = [image.astype(np.uint8) for image in image_list] scores = compute_similarity(target_image, image_list) results = list(zip(image_list, scores)) results.sort(key=lambda x: x[1], reverse=True) # Sort by similarity score return [str(result) for result in results] # Prepare Gradio interface iface = gr.Interface( fn=image_similarity, inputs=[ gr.inputs.Image(type="numpy", label="Target Image"), gr.inputs.Image(type="numpy", label="Image List") ], outputs="text", title="Image Similarity Calculator", description="Upload an image and a list of images. Get similarity scores." ) # Launch the interface iface.launch()