Ali Asgarov
Update app.py
43ff31b verified
raw
history blame contribute delete
1.6 kB
import gradio as gr
import numpy as np
import tensorflow as tf
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
from tensorflow.keras.preprocessing import image
# Load the pre-trained MobileNetV2 model for feature extraction
model = MobileNetV2(weights='imagenet', include_top=False, pooling='avg')
def preprocess_image(img):
"""Preprocess the image to fit MobileNetV2 requirements"""
img = img.resize((224, 224)) # Resize the image to 224x224
img_array = image.img_to_array(img) # Convert to numpy array
img_array = np.expand_dims(img_array, axis=0) # Add batch dimension
return preprocess_input(img_array) # Preprocess the image
def compare_images(image1, image2):
"""Compare two images using cosine similarity of their features"""
# Extract features for both images
features1 = model.predict(preprocess_image(image1))
features2 = model.predict(preprocess_image(image2))
# Compute cosine similarity between features
similarity = np.dot(features1, features2.T)
similarity /= (np.linalg.norm(features1) * np.linalg.norm(features2))
return {'Similarity': float(similarity)}
# Setup Gradio interface
iface = gr.Interface(
fn=compare_images,
inputs=[gr.components.Image(), gr.components.Image()], # Updated to remove 'shape'
outputs=gr.components.Label(),
title="Image Similarity Checker",
description="Upload two images to compare their similarity based on extracted features using MobileNetV2."
)
if __name__ == "__main__":
iface.launch()