import streamlit as st import os from PIL import Image import pickle import tensorflow import numpy as np from numpy.linalg import norm from tensorflow.keras.preprocessing import image from tensorflow.keras.layers import GlobalMaxPooling2D from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input from sklearn.neighbors import NearestNeighbors feature_list = np.array(pickle.load(open('embeddings2.pkl', 'rb'))) filenames = pickle.load(open('filenames2.pkl', 'rb')) model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) model.trainable = False model = tensorflow.keras.Sequential([ model, GlobalMaxPooling2D() ]) st.title("Fashion Recommender System") def extract_features(img_path, model): img = image.load_img(img_path, target_size=(224, 224)) image_array = image.img_to_array(img) expanded_image_array = np.expand_dims(image_array, axis=0) processed_image = preprocess_input(expanded_image_array) result = model.predict(processed_image).flatten() normalized_result = result / norm(result) return normalized_result def recommend(features,feature_list): neighbors = NearestNeighbors(n_neighbors=5, algorithm='brute', metric='euclidean') neighbors.fit(feature_list) distances, indices = neighbors.kneighbors([features]) return indices def save_uploaded_file(uploaded_file): try: with open(os.path.join('uploads', uploaded_file.name), 'wb') as f: f.write(uploaded_file.getbuffer()) return 1 except: return 0 uploaded_file = st.file_uploader("choose an image") if uploaded_file is not None: if save_uploaded_file(uploaded_file): display_image = Image.open(uploaded_file) st.image(display_image) features = extract_features(os.path.join("uploads",uploaded_file.name),model) #st.text(features) indices = recommend(features,feature_list) col1,col2,col3,col4,col5 = st.columns(5) with col1: st.image(filenames[indices[0][0]]) with col2: st.image(filenames[indices[0][1]]) with col3: st.image(filenames[indices[0][2]]) with col4: st.image(filenames[indices[0][3]]) with col5: st.image(filenames[indices[0][4]]) else: st.header("Some error has occured while uploading file")