Spaces:
Runtime error
Runtime error
import numpy as np | |
import pandas as pd | |
from PIL import Image | |
from PIL import ImageFile | |
import urllib.request | |
from sklearn.metrics import pairwise_distances | |
from datetime import datetime | |
import streamlit as st | |
st.set_option('deprecation.showfileUploaderEncoding', False) | |
fashion_df = pd.read_csv("./fashion.csv") | |
boys_extracted_features = np.load('./Boys_ResNet_features.npy') | |
boys_Productids = np.load('./Boys_ResNet_feature_product_ids.npy') | |
girls_extracted_features = np.load('./Girls_ResNet_features.npy') | |
girls_Productids = np.load('./Girls_ResNet_feature_product_ids.npy') | |
men_extracted_features = np.load('./Men_ResNet_features.npy') | |
men_Productids = np.load('./Men_ResNet_feature_product_ids.npy') | |
women_extracted_features = np.load('./Women_ResNet_features.npy') | |
women_Productids = np.load('./Women_ResNet_feature_product_ids.npy') | |
fashion_df["ProductId"] = fashion_df["ProductId"].astype(str) | |
st.image("https://storage.googleapis.com/danacita-website-v3-prd/website_v3/images/biaya_bootcamp__kursus_hacktiv8_6.original.png") | |
st.markdown('---') | |
st.subheader('FashClass - HCK-14 Final Project') | |
st.write('Name :') | |
st.write('1. Anjas Fajar Maulana (Data Science)') | |
st.write('2. Fazrin Muhammad (Data Analyst)') | |
st.write('3. Naufal Andika Ramadhan (Data Engineer)') | |
st.write('4. Salsa Sabitha Hurriyah (Data Science)') | |
st.write('---') | |
def load_data(file_path): | |
return pd.read_csv(file_path) | |
# Path to the CSV file | |
file_path = "fashion.csv" | |
# Load the data | |
data = load_data(file_path) | |
# Display the data using Streamlit | |
st.write("### List of Product") | |
st.write(data) | |
st.write('---') | |
# Define function to filter dataset based on gender | |
def filter_dataset_by_gender(data, gender_filter): | |
filtered_data = data[data['Gender'].str.contains(gender_filter, case=False)] | |
return filtered_data | |
st.write("### Filter") | |
# Create a text_input for filtering by gender | |
gender_filter = st.text_input("Filter by gender") | |
# Filter the dataset based on the input gender filter | |
filtered_data = filter_dataset_by_gender(data, gender_filter) | |
# Display the filtered dataset | |
st.write(filtered_data) | |
st.write('---') | |
def get_similar_products_cnn(product_id, num_results): | |
if product_id not in fashion_df['ProductId'].values: | |
st.write("Product ID is not valid") | |
return | |
if(fashion_df[fashion_df['ProductId']==product_id]['Gender'].values[0]=="Boys"): | |
extracted_features = boys_extracted_features | |
Productids = boys_Productids | |
elif(fashion_df[fashion_df['ProductId']==product_id]['Gender'].values[0]=="Girls"): | |
extracted_features = girls_extracted_features | |
Productids = girls_Productids | |
elif(fashion_df[fashion_df['ProductId']==product_id]['Gender'].values[0]=="Men"): | |
extracted_features = men_extracted_features | |
Productids = men_Productids | |
elif(fashion_df[fashion_df['ProductId']==product_id]['Gender'].values[0]=="Women"): | |
extracted_features = women_extracted_features | |
Productids = women_Productids | |
Productids = list(Productids) | |
doc_id = Productids.index(product_id) | |
pairwise_dist = pairwise_distances(extracted_features, extracted_features[doc_id].reshape(1,-1)) | |
indices = np.argsort(pairwise_dist.flatten())[0:num_results+1] | |
pdists = np.sort(pairwise_dist.flatten())[0:num_results+1] | |
st.write(""" | |
#### input item details | |
""") | |
ip_row = fashion_df[['ImageURL','ProductTitle']].loc[fashion_df['ProductId']==Productids[indices[0]]] | |
for indx, row in ip_row.iterrows(): | |
image = Image.open(urllib.request.urlopen(row['ImageURL'])) | |
image = image.resize((224,224)) | |
st.image(image) | |
st.write(f"Product Title: {row['ProductTitle']}") | |
st.write(f""" | |
#### Top {num_results} Recommended items | |
""") | |
for i in range(1,len(indices)): | |
rows = fashion_df[['Gender','ImageURL','ProductTitle','SubCategory']].loc[fashion_df['ProductId']==Productids[indices[i]]] | |
for indx, row in rows.iterrows(): | |
#image = Image.open(Image(url=row['ImageURL'], width = 224, height = 224,embed=True)) | |
image = Image.open(urllib.request.urlopen(row['ImageURL'])) | |
image = image.resize((224,224)) | |
st.image(image) | |
st.write(f"Gender Class: {row['Gender']}") | |
st.write(f"Sub Category: {row['SubCategory']}") | |
st.write(f"Product Title: {row['ProductTitle']}") | |
#st.write(f"Euclidean Distance from input image: {pdists[i]}") | |
st.write(""" | |
## FashClass Recommendation | |
""" | |
) | |
user_input1 = st.text_input("Enter the item id") | |
user_input2 = st.text_input("Enter number of products to be recommended") | |
button = st.button('Generate recommendations') | |
st.write('---') | |
if button: | |
get_similar_products_cnn(str(user_input1), int(user_input2)) |