import streamlit as st from streamlit_chat import message from st_clickable_images import clickable_images from PIL import Image import time from os.path import * from os import listdir import base64 def init_chat_history(): if 'question' not in st.session_state: st.session_state['question'] = [] if 'answer' not in st.session_state: st.session_state['answer'] = [] def update_chat_messages(): if st.session_state['answer']: for i in range(len(st.session_state['answer'])-1, -1, -1): message(st.session_state['answer'][i], key=str( i), avatar_style='bottts', seed=123) message(st.session_state['question'][i], avatar_style='micah', seed=45, is_user=True, key=str(i) + '_user') def predict(image, input): if image is None or not input: return if 'predictor' not in st.session_state: with st.spinner('Preparing answer...'): while 'predictor' not in st.session_state: time.sleep(2) answer = st.session_state.predictor.predict_answer_from_text(image, input) st.session_state.question.append(input) st.session_state.answer.append(answer) while len(st.session_state.question) >= 5: st.session_state.answer.pop(0) st.session_state.question.pop(0) def update_gallery_images(): if 'gallery' not in st.session_state: st.session_state.gallery = [] st.session_state.gallery_images = [] image_path = join(dirname(abspath(__file__)), 'images') for f in listdir(image_path): if f.startswith('image'): with open(join(image_path, f), "rb") as image: encoded = base64.b64encode(image.read()).decode() st.session_state.gallery.append( f"data:image/jpeg;base64,{encoded}") st.session_state.gallery_images.append(join(image_path, f)) def upload_image_callback(): st.session_state.uploaded_image = st.session_state.uploader def show(): init_chat_history() st.title('Welcome to Visual Question Answering - Chatbot') st.markdown('''