File size: 2,086 Bytes
29b5e9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()