File size: 2,649 Bytes
f2a4d74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import streamlit as st
from ocr_processing import OCRProcessor
from grading_logic import GradingSystem
import os

# Initialize components
ocr_handler = OCRProcessor()
grading_handler = GradingSystem(ocr_handler)


def main():
    st.set_page_config(page_title="Grading Assistant", page_icon=":pencil:", layout="wide")

    st.sidebar.title("Upload Student Files")
    st.sidebar.info("Upload student answer sheets and marking schemes.")

    student_files = st.sidebar.file_uploader("Upload Answer Sheets", type=["pdf", "jpeg", "jpg", "png"], accept_multiple_files=True)
    marking_scheme_file = st.sidebar.file_uploader("Upload Marking Scheme (DOCX)", type=["docx"])

    st.title("📖 Automated Grading Assistant")
    st.subheader("An AI-powered tool for grading student responses.")

    if st.button("Start Grading"):
        if not student_files or not marking_scheme_file:
            st.error("Both student answers and a marking scheme are required!")
            return

        student_image_paths = []
        for student_file in student_files:
            file_path = f"./uploads/{student_file.name}"
            with open(file_path, "wb") as f:
                f.write(student_file.getvalue())

            if student_file.name.lower().endswith(".pdf"):
                try:
                    extracted_images = ocr_handler.convert_pdf_to_images(file_path)
                    student_image_paths.extend(extracted_images)
                except Exception as err:
                    st.error(f"Error processing {student_file.name}: {err}")
            else:
                student_image_paths.append(file_path)

        # Save marking scheme
        marking_scheme_path = f"./uploads/{marking_scheme_file.name}"
        with open(marking_scheme_path, "wb") as f:
            f.write(marking_scheme_file.getvalue())

        st.info("Extracting student responses...")
        extracted_answers = grading_handler.extract_answers(student_image_paths)
        st.success("Responses extracted successfully.")
        st.text_area("Extracted Responses", extracted_answers, height=200)

        st.info("Extracting marking scheme...")
        marking_criteria = grading_handler.extract_marking_criteria(marking_scheme_path)
        st.success("Marking scheme extracted.")
        st.text_area("Marking Scheme", marking_criteria, height=200)

        st.info("Evaluating responses...")
        assessment_results = grading_handler.grade_answers(extracted_answers, marking_criteria)
        st.success("Assessment complete.")
        st.text_area("Assessment Results", assessment_results, height=200)


if __name__ == "__main__":
    main()