import streamlit as st import tempfile import os def main(): st.title("학교생활기록부 OCR 처리") uploaded_file = st.file_uploader("PDF 파일을 업로드하세요", type="pdf") if uploaded_file is not None: # 버튼을 st.empty()로 생성하여 나중에 업데이트할 수 있게 합니다. button_placeholder = st.empty() execute_button = button_placeholder.button("실행하기") if execute_button: # 버튼을 비활성화하고 로딩 메시지를 표시합니다. button_placeholder.empty() with st.spinner('OCR 처리 중...'): # 임시 파일로 저장 with tempfile.NamedTemporaryFile(delete=False, suffix='.pdf') as tmp_file: tmp_file.write(uploaded_file.getvalue()) tmp_file_path = tmp_file.name # OCR 처리 from watch import ocr_process result = ocr_process(tmp_file_path) # 임시 파일 삭제 os.unlink(tmp_file_path) # 결과 표시 st.header("창의적 체험활동상황") for grade in set(item.grade for item in result.creativeExperientialActivities): st.subheader(f"{grade}학년") activities = [item for item in result.creativeExperientialActivities if item.grade == grade] for activity in activities: activity_type = {"AUTONOMOUS": "자율활동", "CLUB": "동아리활동", "CAREER": "진로활동"}[activity.activityType] st.write(f"**{activity_type}**") st.write(f"시간: {activity.hours}") st.write(f"특기사항: {activity.specialNotes}") if activity.areaOfInterest: st.write(f"희망분야: {activity.areaOfInterest}") st.write("---") st.header("교과학습발달상황-세부능력및특기사항") for grade in set(item.grade for item in result.academicAchievement): st.subheader(f"{grade}학년") for semester in set(item.semester for item in result.academicAchievement if item.grade == grade): st.write(f"**{semester}학기**") subjects = [item for item in result.academicAchievement if item.grade == grade and item.semester == semester] for subject in subjects: st.write(f"과목: {subject.subject} ({subject.course})") st.write(f"세부능력 및 특기사항: {subject.detailedAbilities}") st.write("---") # 처리가 완료되면 버튼을 다시 활성화합니다. button_placeholder.button("실행하기", key="rerun_button") if __name__ == "__main__": main()