File size: 1,898 Bytes
690ada3 42b03f9 690ada3 3a834c5 dc979d2 3a834c5 20347ea 48e5876 20347ea 48e5876 20347ea 690ada3 48e5876 690ada3 535b225 690ada3 535b225 27b7cb5 535b225 690ada3 27b7cb5 8a8ce05 27b7cb5 690ada3 535b225 690ada3 535b225 690ada3 535b225 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import numpy as np
from skimage.metrics import structural_similarity as ssim
import gradio as gr
import cv2
# Function to calculate SSIM between two images
def calculate_similarity(img1, img2):
if len(img1.shape) == 2:
img1 = cv2.cvtColor(img1, cv2.COLOR_GRAY2RGB)
if len(img2.shape) == 2:
img2 = cv2.cvtColor(img2, cv2.COLOR_GRAY2RGB)
return ssim(img1, img2, win_size=3)
# Function to compute similarity scores for all images
def compute_similarity(target_image, image_list):
scores = []
target_image_resized = cv2.resize(target_image, (target_image.shape[1], target_image.shape[0]))
for image in image_list:
image_resized = cv2.resize(image, (target_image.shape[1], target_image.shape[0]))
similarity_score = calculate_similarity(target_image_resized, image_resized)
scores.append(similarity_score)
return scores
# Function to handle the Gradio interface
def image_similarity(target_image, image):
target_image = target_image.astype(np.uint8)
image = image.astype(np.uint8)
scores = compute_similarity(target_image, [image])
result = (format_image(image), f"Score: {scores[0]:.4f}")
return [result]
# Function to format the image representation as a string
def format_image(image):
formatted_image = ""
for row in image:
formatted_row = ", ".join([f"({', '.join(map(str, pixel))})" for pixel in row])
formatted_image += f"[{formatted_row}], "
return formatted_image[:-2]
# 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")
],
outputs="text",
title="Image Similarity Calculator",
description="Upload a target image and another image. Get the similarity score."
)
# Launch the interface
iface.launch()
|