import gradio as gr import pytesseract from PIL import Image # OCR 및 평가 함수 정의 def evaluate_solution(image): """ 손글씨 이미지를 받아 OCR로 텍스트를 추출하고, 성취기준에 따라 평가 및 피드백을 제공하는 함수. """ # OCR로 이미지에서 텍스트 추출 extracted_text = pytesseract.image_to_string(image, lang="kor") # 초기 점수 및 피드백 설정 score = 0 feedback = [] # 평가 기준 예시 (6학년 수학 성취기준 기반) if "혼합 계산" in extracted_text: feedback.append("혼합 계산 풀이가 포함되었습니다.") score += 30 else: feedback.append("혼합 계산 풀이가 누락되었습니다.") if "약수와 배수" in extracted_text: feedback.append("약수와 배수 관련 풀이가 포함되었습니다.") score += 30 else: feedback.append("약수와 배수 관련 풀이가 누락되었습니다.") if "분수의 덧셈과 뺄셈" in extracted_text or "소수의 곱셈과 나눗셈" in extracted_text: feedback.append("분수 또는 소수 연산이 포함되었습니다.") score += 40 else: feedback.append("분수 또는 소수 연산이 누락되었습니다.") # 결과 반환 return { "추출된 텍스트": extracted_text, "점수": score, "피드백": "\n".join(feedback) } # Gradio 인터페이스 구성 with gr.Blocks() as demo: gr.Markdown("# 초등학교 6학년 수학 문제 풀이 평가 시스템") with gr.Row(): image_input = gr.Image(label="손글씨 이미지 업로드", type="pil") output_text = gr.Textbox(label="추출된 텍스트") output_score = gr.Number(label="점수") output_feedback = gr.Textbox(label="피드백") submit_button = gr.Button("평가하기") submit_button.click( evaluate_solution, inputs=image_input, outputs=[output_text, output_score, output_feedback] ) # 실행 demo.launch()