EduSpace / app.py
shrivarshan's picture
Upload 2 files
249b997 verified
raw
history blame
4.93 kB
import streamlit as st
from transformers import pipeline
from gtts import gTTS
from fpdf import FPDF
import os
# Load pipelines with correct models
text_generator = pipeline("text-generation", model="gpt2")
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
qa_generator = pipeline("text2text-generation", model="valhalla/t5-small-qg-hl")
# Sample Q/A for demonstration
sample_qa = {
"Question": "What is the process of photosynthesis?",
"Answer": "Photosynthesis is the process by which green plants and some other organisms use sunlight to synthesize foods with the help of chlorophyll."
}
st.title("GenAI-Powered Student Exam Preparation Assistant")
# Sidebar for topic selection
st.sidebar.title("Options")
selected_task = st.sidebar.selectbox("Select Task", ["Explain Topic", "View Question Bank", "Sample Q/A", "Take Test"])
def generate_explanation(topic):
prompt = f"Provide a detailed explanation of the following topic: {topic} in simple terms."
explanation = text_generator(prompt, max_length=500, num_return_sequences=1, temperature=0.7)
return explanation[0]['generated_text']
def generate_quiz(explanation):
prompt = f"Generate a quiz question based on the following content: {explanation}"
quiz_question = qa_generator(prompt, max_length=150, num_return_sequences=1)
return quiz_question[0]['generated_text']
def text_to_speech(text):
tts = gTTS(text=text, lang='en')
audio_file = "explanation.mp3"
tts.save(audio_file)
return audio_file
if selected_task == "Explain Topic":
st.header("Topic Explanation")
topic = st.text_input("Enter the topic you want explained:", "")
if st.button("Generate Explanation"):
if topic:
explanation = generate_explanation(topic)
st.subheader("Explanation:")
st.write(explanation)
# Generate and display audio
audio_file = text_to_speech(explanation)
st.audio(audio_file, format='audio/mp3')
# Add the Quiz button only after the explanation is shown
if st.button("Generate Quiz Questions"):
quiz_question = generate_quiz(explanation)
st.subheader("Quiz Question:")
st.write(quiz_question)
else:
st.warning("Please enter a topic to explain.")
elif selected_task == "View Question Bank":
st.header("Question Bank")
st.write("Feature to view and manage the question bank will be added here.")
elif selected_task == "Sample Q/A":
st.header("Sample Question and Answer")
st.write("**Question:**")
st.write(sample_qa["Question"])
st.write("**Answer:**")
st.write(sample_qa["Answer"])
elif selected_task == "Take Test":
st.header("AI-Proctored Test")
st.write("This is a simulated AI-proctored test environment.")
# Example questions for the test
questions = [
"What is the capital of France?",
"Explain the law of demand.",
"Describe the water cycle."
]
user_answers = []
for i, question in enumerate(questions):
st.subheader(f"Question {i + 1}: {question}")
answer = st.text_input(f"Your Answer for Question {i + 1}", key=f"answer_{i}")
user_answers.append(answer)
# Start the camera feed using HTML and JavaScript
st.write("### Please allow camera access for proctoring.")
st.markdown("""
<video id="video" width="400" height="300" autoplay></video>
<script>
const video = document.getElementById('video');
navigator.mediaDevices.getUserMedia({ video: true })
.then(stream => {
video.srcObject = stream;
})
.catch(err => {
console.error("Error accessing webcam: ", err);
});
</script>
""", unsafe_allow_html=True)
if st.button("Submit Answers"):
# Generate a PDF from the user's answers
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
for i, answer in enumerate(user_answers):
pdf.cell(200, 10, txt=f"Question {i + 1}: {questions[i]}", ln=True)
pdf.cell(200, 10, txt=f"Your Answer: {answer}", ln=True)
pdf.cell(200, 10, txt="", ln=True) # Add a blank line for spacing
pdf_file_path = "user_answers.pdf"
pdf.output(pdf_file_path)
st.success("Your answers have been submitted and saved to PDF!")
# Provide the PDF for download
with open(pdf_file_path, "rb") as f:
st.download_button("Download Your Answers PDF", f, file_name=pdf_file_path)
# Ensure to clean up any generated audio files
if os.path.exists("explanation.mp3"):
os.remove("explanation.mp3")