|
import cv2 |
|
import numpy as np |
|
from skimage.metrics import structural_similarity as ssim |
|
import gradio as gr |
|
|
|
|
|
def calculate_similarity(img1, img2): |
|
img1 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY) |
|
img2 = cv2.cvtColor(img2, cv2.COLOR_RGB2GRAY) |
|
return ssim(img1, img2) |
|
|
|
|
|
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 |
|
|
|
|
|
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) |
|
return [str(result) for result in results] |
|
|
|
|
|
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." |
|
) |
|
|
|
|
|
iface.launch() |
|
|