venkataseetharam's picture
Update app.py
8bec0eb
#!/usr/bin/env python
# coding: utf-8
# In[3]:
import numpy as np
import tensorflow as tf
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.applications.resnet50 import preprocess_input
from PIL import Image
import cv2
from sklearn.neighbors import NearestNeighbors
import os
import shutil
import zipfile
import streamlit as st
# Open the zip file
with zipfile.ZipFile("lfw.zip", "r") as zip_ref:
# Extract its contents to the current working directory
zip_ref.extractall(".")
if os.path.exists('lfw/Aaron_Pena/Aaron_Pena_0001.jpg'):
print('Image file extracted successfully')
else:
print('Error: Image file not found')
# Load pre-trained ResNet-50 model
model = ResNet50(weights='imagenet', include_top=False, pooling='avg')
# Define preprocessing function
def preprocess(image):
x = preprocess_input(image)
return x
# Load features dictionary
features_dict = np.load('new_data.npy', allow_pickle=True).item()
# Convert feature vectors dictionary to numpy array
features_array = np.array(list(features_dict.values()))
# Train k-NN model
k = 10 # Number of neighbors to retrieve
nbrs = NearestNeighbors(n_neighbors=k, algorithm='ball_tree').fit(features_array)
# Define function to retrieve k-NN for a query image
def get_similar_images(query_image):
query_feature = model.predict(np.expand_dims(preprocess(query_image), axis=0)).squeeze()
distances, indices = nbrs.kneighbors(np.array([query_feature]))
similar_images = []
for idx in indices.squeeze():
image_path = list(features_dict.keys())[idx].replace('\\', '/')
similar_images.append(image_path)
#similar_images.append(list(features_dict.keys())[idx])
return similar_images
# Define Streamlit app
def app():
st.title("Image Similarity Search System")
# Create option to select image from test dataset
test_images = ['Aaron_Pena_0001.jpg', 'Alain_Cervantes_0001.jpg', 'Alan_Jackson_0001.jpg']
test_image = st.selectbox("Select an image from the test dataset", test_images)
# Display selected image
st.image(test_image)
# Display similar images
st.write("Similar Images:")
similar_images = get_similar_images(cv2.imread(test_image))
for image_path in similar_images:
image = Image.open(image_path)
st.image(image)
# Create option to upload an image
uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
image = Image.open(uploaded_file)
st.image(image)
# Display similar images
st.write("Similar Images:")
similar_images = get_similar_images(np.array(image))
for image_path in similar_images:
image = Image.open(image_path)
st.image(image)
if __name__ == '__main__':
app()
# In[ ]: