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() |