import streamlit as st import pandas as pd import project_config import base64 @st.cache_data(show_spinner = 'Loading knowledge graph nodes...') def load_kg(): # with st.spinner('Loading knowledge graph...'): kg_nodes = pd.read_csv(project_config.DATA_DIR / 'kg_nodes.csv', dtype = {'node_index': int}, low_memory = False) return kg_nodes @st.cache_data(show_spinner = 'Loading knowledge graph edges...') def load_kg_edges(): # with st.spinner('Loading knowledge graph...'): kg_edges = pd.read_csv(project_config.DATA_DIR / 'kg_edges.csv', dtype = {'edge_index': int, 'x_index': int, 'y_index': int}, low_memory = False) return kg_edges def capitalize_after_slash(s): # Split the string by slashes first parts = s.split('/') # Capitalize each part separately capitalized_parts = [part.title() for part in parts] # Rejoin the parts with slashes capitalized_string = '/'.join(capitalized_parts).replace('_', ' ') return capitalized_string # From https://stackoverflow.com/questions/73251012/put-logo-and-title-above-on-top-of-page-navigation-in-sidebar-of-streamlit-multi # See also https://arnaudmiribel.github.io/streamlit-extras/extras/app_logo/ @st.cache_data() def get_base64_of_bin_file(png_file): with open(png_file, "rb") as f: data = f.read() return base64.b64encode(data).decode() def build_markup_for_logo( png_file, background_position="50% 10%", margin_top="10%", padding="20px", image_width="80%", image_height="", ): binary_string = get_base64_of_bin_file(png_file) return """ """ % ( binary_string, background_position, margin_top, padding, image_width, image_height, ) def add_logo(png_file): logo_markup = build_markup_for_logo(png_file) st.markdown( logo_markup, unsafe_allow_html=True, ) # @st.cache_resource() # def generate_profile_pic(): # st.markdown(""" # # """, unsafe_allow_html=True) # # Show the user's profile picture # st.sidebar.html(f'
') # # Show the user's name # st.sidebar.html(f'
{st.session_state.name}
') # return None # # Load image using PIL # from PIL import Image, ImageDraw, ImageOps # from io import BytesIO # import requests # def PIL_profile_pic(): # # Load user profile picture # profile_pic = st.session_state.profile_pic # response = requests.get(profile_pic) # img = Image.open(BytesIO(response.content)) # # Create a circular mask # min_dimension = min(img.size) # mask = Image.new('L', (min_dimension, min_dimension), 0) # draw = ImageDraw.Draw(mask) # draw.ellipse((0, 0, min_dimension, min_dimension), fill=255) # # Crop the image to a square of the smallest dimension # left = (img.width - min_dimension) // 2 # top = (img.height - min_dimension) // 2 # right = (img.width + min_dimension) // 2 # bottom = (img.height + min_dimension) // 2 # img_cropped = img.crop((left, top, right, bottom)) # # Apply the circular mask to the cropped image # img_circular = ImageOps.fit(img_cropped, (min_dimension, min_dimension)) # img_circular.putalpha(mask) # st.markdown( # """ # # """, unsafe_allow_html=True # ) # # Display the image # st.sidebar.image(img_circular, width=200) # st.sidebar.subheader(f"{st.session_state.name}") # Generate the user's profile picture # generate_profile_pic()