NextGrocery / app.py
student-abdullah's picture
Create app.py
275bf5e verified
raw
history blame contribute delete
No virus
3 kB
import streamlit as st
from PIL import Image
from io import BytesIO
from unique_product_mapping import product_to_category, goal_format, unique_items_list
from cooccurance import get_recommendations, co_occurrence_df
from jaccard_similarity import collaborative_recommendations, product_item_matrix
# Helper function to load images
def load_image(image_path):
try:
with open(image_path, "rb") as f:
img = Image.open(BytesIO(f.read()))
return img
except Exception as e:
st.error(f"Error loading image: {e}")
return None
# Function to get items bought together
def get_items_bought_together(product_name):
cosine_recommendations = get_recommendations(product_name, co_occurrence_df, product_item_matrix)
jacquard_recommendations = collaborative_recommendations(product_name)
common_recommendations = set(cosine_recommendations) | set(jacquard_recommendations)
return list(common_recommendations)
# Streamlit UI
def main():
st.title("Groceries Recommender")
# Product list for selection
product_list = unique_items_list
# Select a product
selected_product = st.selectbox("Type or select a product", options=product_list)
search_button = st.button("Commence Search")
if search_button:
if selected_product:
# Display the basic search results
st.write("Basic Search Results:")
st.image(load_image(product_to_category[selected_product]['image']), caption=selected_product.capitalize())
product_info = product_to_category[selected_product]
# Display items bought together
st.write("Items Bought Together:")
items_bought_together = get_items_bought_together(selected_product)
if items_bought_together:
for i in range(0, len(items_bought_together), 4):
cols = st.columns(min(4, len(items_bought_together) - i))
for j, item in enumerate(items_bought_together[i:i + 4]):
cols[j].image(load_image(product_to_category[item]['image']), caption=item.capitalize())
else:
st.write("No items bought together recommendations found.")
# Display category-based recommendations
st.write(f"Products From {product_info['category'].capitalize()} Category:")
category_items = goal_format.get(product_info['category'], [])
if category_items:
for i in range(0, len(category_items), 4):
cols = st.columns(min(4, len(category_items) - i))
for j, item in enumerate(category_items[i:i + 4]):
cols[j].image(load_image(product_to_category[item]['image']), caption=item.capitalize())
else:
st.write(f"No other products found in {product_info['category']} category.")
else:
st.write("No product selected.")
if __name__ == "__main__":
main()