import pandas as pd import streamlit as st from my_model.tabs.run_inference import InferenceRunner from my_model.tabs.finetuning_evaluation import KBVQAEvaluator from my_model.state_manager import StateManager class UIManager(): """Manages the user interface for the Streamlit application.""" def __init__(self): """Initializes the UIManager with predefined tabs.""" self.tabs = { "Home": self.display_home, "Dataset Analysis": self.display_dataset_analysis, "Finetuning and Evaluation Results": self.display_finetuning_evaluation, "Run Inference": self.display_run_inference, "Dissertation Report": self.display_dissertation_report, "Code": self.display_code, "More Pages will follow .. ": self.display_placeholder } state_manager = StateManager() state_manager.initialize_state() def add_tab(self, tab_name, display_function): """Adds a new tab to the UI.""" self.tabs[tab_name] = display_function def display_sidebar(self): """Displays the sidebar for navigation.""" st.sidebar.title("Navigation") selection = st.sidebar.radio("Go to", list(self.tabs.keys()), disabled=st.session_state['loading_in_progress']) return selection def display_selected_page(self, selection): """Displays the selected page based on user's choice.""" if selection in self.tabs: self.tabs[selection]() def display_home(self): """Displays the Home page of the application.""" st.title('MultiModal Learning for Visual Question Answering using World Knowledge') st.text('') st.header('(Knowledge-Based Visual Question Answering)') col1, col2 = st.columns([3, 1]) with col1: st.text('') st.text('') st.text('') st.write("""\n\n\n\nThis is an interactive application developed to demonstrate my project as part of the dissertation for Masters degree in Artificial Intelligence at the [University of Bath](https://www.bath.ac.uk/). \n\n\nDeveloped by: [Mohammed H AlHaj](https://www.linkedin.com/in/m7mdal7aj) | Dissertation Supervisor: [Andreas Theophilou](https://researchportal.bath.ac.uk/en/persons/andreas-theophilou) \n\nFurther details will be updated later . .""") with col2: st.write("""I am profoundly grateful for the support and guidance I have received throughout the course of my dissertation. I would like to extend my deepest appreciation to the following individuals: To my supervisor, Dr. Andreas Theophilou, whose expertise, and insightful guidance have been instrumental in the completion of this research. Your mentorship has not only profoundly shaped my work but also my future endeavours in the field of computer science. Special mention must be made of my mentors at the University of Bath—Dr. Ben Ralph, Dr. Hongping Cai, and Dr. Nadejda Roubtsova. The wealth of knowledge and insights I have gained from you has been indispensable. Your unwavering dedication to academic excellence and steadfast support have been crucial in navigating my academic journey. My colleagues deserve equal gratitude, for their camaraderie and collaborative spirit have not only made this journey feasible but also deeply enjoyable. The shared experiences and the challenges we have overcome together have been integral to my personal and professional growth. Lastly, my heartfelt thanks are extended to my family, whose unyielding love and encouragement have been my steadfast anchor. Your belief in my abilities has consistently inspired me and bolstered my strength throughout this process. This dissertation is not merely a reflection of my individual efforts but stands as a testament to the collective support and wisdom of each individual mentioned above. I am honoured and privileged to be part of such a supportive and enriching academic community. """) def display_dataset_analysis(self): """Displays the Dataset Analysis page.""" st.title("OK-VQA Dataset Analysis") st.write("This is a Place Holder until the contents are uploaded.") def display_finetuning_evaluation(self): """Displays the Finetuning and Evaluation Results page.""" st.title("Finetuning and Evaluation Results") st.write("This page demonstrates the fine-tuning and model evaluation results") st.write("\n") evaluator = KBVQAEvaluator() evaluator.run_evaluator() def display_run_inference(self): """Displays the Run Inference page.""" st.title("Run Inference") st.write("Please note that this is not a general purpose model, it is specifically trained on [OK-VQA Dataset](https://okvqa.allenai.org/) and desgined to give short and direct answers to the given questions about the given image.") st.write("\n") inference_runner = InferenceRunner() inference_runner.run_inference() def display_dissertation_report(self): """Displays the Dissertation Report page.""" st.title("Dissertation Report") st.write("Click the link below to view the PDF.") # Error handling for file access should be considered here st.download_button( label="Download PDF", data=open("Files/Dissertation Report.pdf", "rb"), file_name="example.pdf", mime="application/octet-stream" ) def display_code(self): """Displays the Code page with a link to the project's code repository.""" st.title("Code") st.markdown("You can view the code for this project on HuggingFace Space files page.") st.markdown("[View Code](https://huggingface.co/spaces/m7mdal7aj/Mohammed_Alhaj_KB-VQA/tree/main)", unsafe_allow_html=True) def display_placeholder(self): """Displays a placeholder for future content.""" st.title("Stay Tuned") st.write("This is a Place Holder until the contents are uploaded.")