CoolFace
Apppublic

solenedh3/SuitsMe

sourceHugging Faceupdated 4y agoView on Hugging Face
0likes
app.py546 linesDownload Raw Back to root
1import streamlit as st2from PIL import Image3import pandas as pd4import base645import uuid6from PIL import Image7import os8import matplotlib.pyplot as plt9 10 11def set_style():12    st.markdown(13        f"""14        <style>15            .reportview-container {{16                background: #333333;17                color: #FFFFFF;18            }}19            a {{20                color: #FFA500;21            }}22        </style>23        """,24        unsafe_allow_html=True25    )26 27 28set_style()29 30def get_base64(bin_file):31    with open(bin_file, 'rb') as f:32        data = f.read()33    return base64.b64encode(data).decode()34 35def set_background(png_file):36    if png_file is None:37        return38    bin_str = get_base64(png_file)39    page_bg_img = '''40    <style>41    .stApp {42    background-image: url("data:image/png;base64,%s");43    background-size: cover;44    }45    </style>46    ''' % bin_str47    st.markdown(page_bg_img, unsafe_allow_html=True)48 49# Define the background image for the homepage50homepage_bg = '/Users/solene/Desktop/home_page_logo1.jpg'51 52# Set the background image for the homepage53set_background(homepage_bg)54 55 56 57# Define the black background for subcategory pages58black_bg = Image.new('RGB', (1, 1), color='black')59black_bg_path = f'{uuid.uuid4()}.png'60black_bg.save(black_bg_path)61 62logo = Image.open("/Users/solene/Desktop/logo-removebg-preview.png")63 64logo_resized = logo.resize((250, 200))65 66# Load the dataframe67df_sorted = pd.read_csv("/Users/solene/Desktop/df_sorted.csv")68 69# Define the categories and subcategories70categories = ['Home', 'Explore products', 'Topwear', 'Bottom wear', 'Shoes', 'Accessories', 'About', 'Contact', 'Newsletter']71subcategories = {72    'Topwear': ['Shirts', 'Jackets','Dresses'],73    'Bottom wear': ['Trousers'],74    'Shoes': ['Sneakers', 'Ankle boots', 'Heels', 'Sandals'],75    'Accessories': ['Mini bags', 'Large bags']76}77 78subcategory = None79 80# Create the sidebar menu81category = st.sidebar.selectbox('Select a category', categories)82 83# Display the homepage84if category == 'Home':85    set_background(homepage_bg)86elif category == 'Contact':87    set_background(black_bg_path)88    st.write('## Contact Us')89    name = st.text_input("Full Name")90    st.write(name)91    email = st.text_input("Email")92    st.write(email)93    message = st.text_area("Message")94    st.write(message)95    if st.button('Contact Us'):96        st.write('Thank you for contacting us! We read every message and typically respond within 48 hours if a reply is required.')     97elif category == 'Explore products':98    set_background(black_bg_path)99    st.write("## Explore products")100    st.write("")101    num_images_per_row = 4102    for cluster_num in range(10):103        group = df_sorted[df_sorted["cluster"] == cluster_num]104        first_row = group.iloc[0]105        pixels = first_row.iloc[2:-1].values.astype('int')106        image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')107        if cluster_num % num_images_per_row == 0:108            row = st.columns(num_images_per_row)109        with row[cluster_num % num_images_per_row]:110            st.image(image, use_column_width=True)111            link = f"http://www.example.com/product/{cluster_num}/1"112            st.write(link)113elif category == 'Newsletter':114    set_background(black_bg_path)115    st.write('## Subscribe to our Newsletter')116    st.write('Sign up to receive email updates on new product announcements, gift ideas, special promotions, sales and more. ')117    name = st.text_input("Full Name")118    st.write(name)119    email = st.text_input("Email")120    st.write(email)121    if st.button('SIGN UP'):122        st.write('Thank you for signing up to our newsletter. You now have exclusive access to the latest product launches at SuitsMe and have access to special promotions in the future!')123elif category == 'About':124    set_background(black_bg_path)125    st.write('# About Us')126    st.write("## Our Team")127    128    # Set the path to the directory containing the photos129    photos_dir = '/Users/solene/Desktop/my_photos'130    131    # Define a dictionary that maps photo filenames to names and positions132    names = {133        'aradhya_rathi_face.jpeg': 'Aradhya Rathi - CEO',134        'solene_dh_face.jpeg': 'Solene Dhanani - CTO',135        'radi_face.jpeg': 'Radi - CFO',136        'zelong_face.jpeg': 'Zelong Qin - Wellbeing Officer',137        'lat_face.jpeg': 'Laeticia El Khoury - Marketing Director',138        'owen_chen_face.jpeg': 'Owen Chen - Head of Outreach',139        'nadine_face.jpeg': 'Nadine - HR Head'140    }141    142    # Get a list of all the files in the directory143    files = os.listdir(photos_dir)144    145    # Filter the list to include only JPEG files146    files = [f for f in files if f.endswith('.jpeg')]147    148    # Sort the list of files so that the specified photos are on top149    specified_files = ['aradhya_rathi_face.jpeg', 'solene_dh_face.jpeg', 'radi_face.jpeg']150    files.sort(key=lambda f: specified_files.index(f) if f in specified_files else len(specified_files))151    152    # Display the photos and names in a grid layout with 3 photos per row153    col1, col2, col3 = st.columns(3)154    for i, file in enumerate(files):155        if i % 3 == 0:156            col = col1157        elif i % 3 == 1:158            col = col2159        else:160            col = col3161        162        # Open the photo file using PIL and display it163        with open(os.path.join(photos_dir, file), 'rb') as f:164            img = Image.open(f)165            col.image(img, use_column_width=True)166            167        # Display the name and position of the person below the photo168        name = names.get(file, '')169        col.write(name)170else:171    set_background(black_bg_path)172    subcategory = st.sidebar.selectbox('Select a sub-category', subcategories[category])173 174 175# Handle the subcategory selections and display the images176 177if subcategory == 'Shirts':178    st.image(logo_resized)179    st.write('## Shirts')180    cluster_num = 9181    group = df_sorted[df_sorted["cluster"] == cluster_num]182    page_number = st.session_state.get('page_number', 1)183    num_cols = 5184    items_per_page = 100185    start_index = (page_number - 1) * items_per_page186    end_index = page_number * items_per_page187    group = group.iloc[start_index:end_index]188    num_rows = (len(group) - 1) // num_cols + 1189    st.write(f"Page {page_number}")190    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")191    for row in range(num_rows):192        cols = st.columns(num_cols)193        for col in range(num_cols):194            i = row * num_cols + col195            if i < len(group):196                pixels = group.iloc[i, 2:-1].values.astype('int')197                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')198                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")199 200    # Show "Previous Page" button if not on the first page201    if start_index > 0:202        if st.button('Previous Page'):203            page_number -= 1204            st.experimental_set_query_params(page=page_number)205            st.session_state['page_number'] = page_number206    207    # Show "Next Page" button if there are more items to show208    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):209        if st.button('Next Page'):210            page_number += 1211            st.experimental_set_query_params(page=page_number)212            st.session_state['page_number'] = page_number213 214elif subcategory == 'Sandals':215    st.image(logo_resized)216    st.write('## Sandals')217    cluster_num = 7218    group = df_sorted[df_sorted["cluster"] == cluster_num]219    page_number = st.session_state.get('page_number', 1)220    num_cols = 5221    items_per_page = 100222    start_index = (page_number - 1) * items_per_page223    end_index = page_number * items_per_page224    group = group.iloc[start_index:end_index]225    num_rows = (len(group) - 1) // num_cols + 1226    st.write(f"Page {page_number}")227    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")228    for row in range(num_rows):229        cols = st.columns(num_cols)230        for col in range(num_cols):231            i = row * num_cols + col232            if i < len(group):233                pixels = group.iloc[i, 2:-1].values.astype('int')234                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')235                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")236    237    # Show "Previous Page" button if not on the first page238    if start_index > 0:239        if st.button('Previous Page'):240            page_number -= 1241            st.experimental_set_query_params(page=page_number)242            st.session_state['page_number'] = page_number243    244    # Show "Next Page" button if there are more items to show245    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):246        if st.button('Next Page'):247            page_number += 1248            st.experimental_set_query_params(page=page_number)249            st.session_state['page_number'] = page_number250 251elif subcategory == 'Jackets':252    st.image(logo_resized)253    st.write('## Jackets')254    cluster_num = 2255    group = df_sorted[df_sorted["cluster"] == cluster_num]256    page_number = st.session_state.get('page_number', 1)257    num_cols = 5258    items_per_page = 100259    start_index = (page_number - 1) * items_per_page260    end_index = page_number * items_per_page261    group = group.iloc[start_index:end_index]262    num_rows = (len(group) - 1) // num_cols + 1263    st.write(f"Page {page_number}")264    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")265    for row in range(num_rows):266        cols = st.columns(num_cols)267        for col in range(num_cols):268            i = row * num_cols + col269            if i < len(group):270                pixels = group.iloc[i, 2:-1].values.astype('int')271                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')272                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")273    274    # Show "Previous Page" button if not on the first page275    if start_index > 0:276        if st.button('Previous Page'):277            page_number -= 1278            st.experimental_set_query_params(page=page_number)279            st.session_state['page_number'] = page_number280    281    # Show "Next Page" button if there are more items to show282    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):283        if st.button('Next Page'):284            page_number += 1285            st.experimental_set_query_params(page=page_number)286            st.session_state['page_number'] = page_number287 288elif subcategory == 'Dresses':289    st.image(logo_resized)290    st.write('## Dresses')291    cluster_num = 3292    group = df_sorted[df_sorted["cluster"] == cluster_num]293    page_number = st.session_state.get('page_number', 1)294    num_cols = 5295    items_per_page = 100296    start_index = (page_number - 1) * items_per_page297    end_index = page_number * items_per_page298    group = group.iloc[start_index:end_index]299    num_rows = (len(group) - 1) // num_cols + 1300    st.write(f"Page {page_number}")301    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")302    for row in range(num_rows):303        cols = st.columns(num_cols)304        for col in range(num_cols):305            i = row * num_cols + col306            if i < len(group):307                pixels = group.iloc[i, 2:-1].values.astype('int')308                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')309                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")310    311    # Show "Previous Page" button if not on the first page312    if start_index > 0:313        if st.button('Previous Page'):314            page_number -= 1315            st.experimental_set_query_params(page=page_number)316            st.session_state['page_number'] = page_number317    318    # Show "Next Page" button if there are more items to show319    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):320        if st.button('Next Page'):321            page_number += 1322            st.experimental_set_query_params(page=page_number)323            st.session_state['page_number'] = page_number324 325elif subcategory == 'Large bags':326    st.image(logo_resized)327    st.write('## Large bags')328    cluster_num = 4329    group = df_sorted[df_sorted["cluster"] == cluster_num]330    page_number = st.session_state.get('page_number', 1)331    num_cols = 5332    items_per_page = 100333    start_index = (page_number - 1) * items_per_page334    end_index = page_number * items_per_page335    group = group.iloc[start_index:end_index]336    num_rows = (len(group) - 1) // num_cols + 1337    st.write(f"Page {page_number}")338    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")339    for row in range(num_rows):340        cols = st.columns(num_cols)341        for col in range(num_cols):342            i = row * num_cols + col343            if i < len(group):344                pixels = group.iloc[i, 2:-1].values.astype('int')345                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')346                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")347    348    # Show "Previous Page" button if not on the first page349    if start_index > 0:350        if st.button('Previous Page'):351            page_number -= 1352            st.experimental_set_query_params(page=page_number)353            st.session_state['page_number'] = page_number354    355    # Show "Next Page" button if there are more items to show356    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):357        if st.button('Next Page'):358            page_number += 1359            st.experimental_set_query_params(page=page_number)360            st.session_state['page_number'] = page_number361 362elif subcategory == 'Trousers':363    st.image(logo_resized)364    st.write('## Trousers')365    cluster_num = 6366    group = df_sorted[df_sorted["cluster"] == cluster_num]367    page_number = st.session_state.get('page_number', 1)368    num_cols = 5369    items_per_page = 100370    start_index = (page_number - 1) * items_per_page371    end_index = page_number * items_per_page372    group = group.iloc[start_index:end_index]373    num_rows = (len(group) - 1) // num_cols + 1374    st.write(f"Page {page_number}")375    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")376    for row in range(num_rows):377        cols = st.columns(num_cols)378        for col in range(num_cols):379            i = row * num_cols + col380            if i < len(group):381                pixels = group.iloc[i, 2:-1].values.astype('int')382                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')383                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")384    385    # Show "Previous Page" button if not on the first page386    if start_index > 0:387        if st.button('Previous Page'):388            page_number -= 1389            st.experimental_set_query_params(page=page_number)390            st.session_state['page_number'] = page_number391    392    # Show "Next Page" button if there are more items to show393    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):394        if st.button('Next Page'):395            page_number += 1396            st.experimental_set_query_params(page=page_number)397            st.session_state['page_number'] = page_number398 399elif subcategory == 'Sneakers':400    st.image(logo_resized)401    st.write('## Sneakers')402    cluster_num = 0403    group = df_sorted[df_sorted["cluster"] == cluster_num]404    page_number = st.session_state.get('page_number', 1)405    num_cols = 5406    items_per_page = 100407    start_index = (page_number - 1) * items_per_page408    end_index = page_number * items_per_page409    group = group.iloc[start_index:end_index]410    num_rows = (len(group) - 1) // num_cols + 1411    st.write(f"Page {page_number}")412    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")413    for row in range(num_rows):414        cols = st.columns(num_cols)415        for col in range(num_cols):416            i = row * num_cols + col417            if i < len(group):418                pixels = group.iloc[i, 2:-1].values.astype('int')419                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')420                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")421    422    # Show "Previous Page" button if not on the first page423    if start_index > 0:424        if st.button('Previous Page'):425            page_number -= 1426            st.experimental_set_query_params(page=page_number)427            st.session_state['page_number'] = page_number428    429    # Show "Next Page" button if there are more items to show430    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):431        if st.button('Next Page'):432            page_number += 1433            st.experimental_set_query_params(page=page_number)434            st.session_state['page_number'] = page_number435 436elif subcategory == 'Ankle boots':437    st.image(logo_resized)438    st.write('## Ankle boots')439    cluster_num = 8440    group = df_sorted[df_sorted["cluster"] == cluster_num]441    page_number = st.session_state.get('page_number', 1)442    num_cols = 5443    items_per_page = 100444    start_index = (page_number - 1) * items_per_page445    end_index = page_number * items_per_page446    group = group.iloc[start_index:end_index]447    num_rows = (len(group) - 1) // num_cols + 1448    st.write(f"Page {page_number}")449    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")450    for row in range(num_rows):451        cols = st.columns(num_cols)452        for col in range(num_cols):453            i = row * num_cols + col454            if i < len(group):455                pixels = group.iloc[i, 2:-1].values.astype('int')456                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')457                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")458    459    # Show "Previous Page" button if not on the first page460    if start_index > 0:461        if st.button('Previous Page'):462            page_number -= 1463            st.experimental_set_query_params(page=page_number)464            st.session_state['page_number'] = page_number465    466    # Show "Next Page" button if there are more items to show467    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):468        if st.button('Next Page'):469            page_number += 1470            st.experimental_set_query_params(page=page_number)471            st.session_state['page_number'] = page_number472 473 474elif subcategory == 'Heels':475    st.image(logo_resized)476    st.write('## Heels')477    cluster_num = 5478    group = df_sorted[df_sorted["cluster"] == cluster_num]479    page_number = st.session_state.get('page_number', 1)480    num_cols = 5481    items_per_page = 100482    start_index = (page_number - 1) * items_per_page483    end_index = page_number * items_per_page484    group = group.iloc[start_index:end_index]485    num_rows = (len(group) - 1) // num_cols + 1486    st.write(f"Page {page_number}")487    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")488    for row in range(num_rows):489        cols = st.columns(num_cols)490        for col in range(num_cols):491            i = row * num_cols + col492            if i < len(group):493                pixels = group.iloc[i, 2:-1].values.astype('int')494                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')495                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")496    497    # Show "Previous Page" button if not on the first page498    if start_index > 0:499        if st.button('Previous Page'):500            page_number -= 1501            st.experimental_set_query_params(page=page_number)502            st.session_state['page_number'] = page_number503    504    # Show "Next Page" button if there are more items to show505    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):506        if st.button('Next Page'):507            page_number += 1508            st.experimental_set_query_params(page=page_number)509            st.session_state['page_number'] = page_number510 511elif subcategory == 'Mini bags':512    st.image(logo_resized)513    st.write('## Mini bags')514    cluster_num = 1515    group = df_sorted[df_sorted["cluster"] == cluster_num]516    page_number = st.session_state.get('page_number', 1)517    num_cols = 5518    items_per_page = 100519    start_index = (page_number - 1) * items_per_page520    end_index = page_number * items_per_page521    group = group.iloc[start_index:end_index]522    num_rows = (len(group) - 1) // num_cols + 1523    st.write(f"Page {page_number}")524    st.write(f"Showing {start_index+1} to {end_index} of {len(df_sorted[df_sorted['cluster'] == cluster_num])} products")525    for row in range(num_rows):526        cols = st.columns(num_cols)527        for col in range(num_cols):528            i = row * num_cols + col529            if i < len(group):530                pixels = group.iloc[i, 2:-1].values.astype('int')531                image = Image.fromarray(pixels.reshape((28, 28)).astype('uint8'), mode='L')532                cols[col].image(image, caption=f"Cluster {cluster_num} - Product Image {start_index + i + 1}")533    534    # Show "Previous Page" button if not on the first page535    if start_index > 0:536        if st.button('Previous Page'):537            page_number -= 1538            st.experimental_set_query_params(page=page_number)539            st.session_state['page_number'] = page_number540    541    # Show "Next Page" button if there are more items to show542    if end_index < len(df_sorted[df_sorted["cluster"] == cluster_num]):543        if st.button('Next Page'):544            page_number += 1545            st.experimental_set_query_params(page=page_number)546            st.session_state['page_number'] = page_number