Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import project_config | |
| import base64 | |
| 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 | |
| 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/ | |
| 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 """ | |
| <style> | |
| [data-testid="stSidebarNav"] { | |
| background-image: url("data:image/png;base64,%s"); | |
| background-repeat: no-repeat; | |
| background-position: %s; | |
| margin-top: %s; | |
| padding: %s; | |
| background-size: %s %s; | |
| } | |
| </style> | |
| """ % ( | |
| 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(""" | |
| # <style> | |
| # .circle-image { | |
| # width: 100px; | |
| # height: 100px; | |
| # border-radius: 50%; | |
| # overflow: hidden; | |
| # display: flex; | |
| # justify-content: center; | |
| # align-items: center; | |
| # border: 2px solid black; | |
| # margin: 0 auto 10px auto; | |
| # } | |
| # .circle-image img { | |
| # width: 100%; | |
| # max-width: 100px; | |
| # height: 100%; | |
| # object-fit: cover; | |
| # } | |
| # .username { | |
| # font-size: 20px; | |
| # font-weight: bold; | |
| # text-align: center; | |
| # margin-top: 0px; | |
| # } | |
| # </style> | |
| # """, unsafe_allow_html=True) | |
| # # Show the user's profile picture | |
| # st.sidebar.html(f'<div class="circle-image"><img src="{st.session_state.profile_pic}" /></div>') | |
| # # Show the user's name | |
| # st.sidebar.html(f'<div class="username">{st.session_state.name}</div>') | |
| # 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( | |
| # """ | |
| # <style> | |
| # [data-testid=stSidebar] [data-testid=stImage]{ | |
| # text-align: center; | |
| # display: block; | |
| # margin-left: auto; | |
| # margin-right: auto; | |
| # width: 100%; | |
| # } | |
| # </style> | |
| # """, 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() |