import gradio as gr import pytesseract from PIL import Image # Tesseract 경로 설정 # Hugging Face Spaces에서는 기본적으로 "/usr/bin/tesseract" 경로에 설치되어 있습니다. # 로컬 환경에서 실행 시, 아래 경로를 자신의 Tesseract 설치 경로로 변경하세요. pytesseract.pytesseract.tesseract_cmd = "/usr/bin/tesseract" # 평가 함수 정의 def evaluate_solution(image): """ 업로드된 손글씨 이미지를 OCR로 텍스트로 변환하고, 성취기준에 따라 평가 및 피드백을 제공하는 함수. """ try: # 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) except Exception as e: # 오류 발생 시 기본값 반환 return "", 0, f"오류 발생: {str(e)}" # 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()