Spaces:
Runtime error
Runtime error
# app.py | |
import gradio as gr | |
from PIL import Image | |
import pytesseract | |
import sympy | |
def solve_math_problem(image): | |
try: | |
# Convert image to grayscale for better OCR performance | |
image = image.convert("L") | |
# Preprocess the image (optional enhancements can be added here) | |
# For example, image = image.point(lambda x: 0 if x < 140 else 255, '1') | |
# Use pytesseract to extract text from the image | |
problem_text = pytesseract.image_to_string(image, config='--psm 7') | |
# Clean and prepare the extracted text | |
problem_text = problem_text.strip().replace('\n', '').replace(' ', '') | |
# Use sympy to parse and solve the equation | |
# Handle simple arithmetic and algebraic equations | |
expr = sympy.sympify(problem_text) | |
solution = sympy.solve(expr) | |
# Format the solution for display | |
if isinstance(solution, list): | |
solution = ', '.join([str(s) for s in solution]) | |
else: | |
solution = str(solution) | |
return f"**Problem:** {problem_text}\n\n**Solution:** {solution}" | |
except Exception as e: | |
return f"**Error processing image:** {str(e)}" | |
# Create the Gradio interface | |
demo = gr.Interface( | |
fn=solve_math_problem, | |
inputs=gr.Image( | |
type="pil", | |
label="Upload Handwritten Math Problem", | |
image_mode="L" # Grayscale mode improves OCR accuracy | |
), | |
outputs=gr.Markdown(), | |
title="Handwritten Math Problem Solver", | |
description="Upload an image of a handwritten math problem, and the app will attempt to solve it.", | |
examples=[ | |
["example_addition.png"], | |
["example_algebra.jpg"] | |
], | |
allow_flagging="never", | |
webpage_title="Handwritten Math Solver", | |
theme="soft" | |
) | |
if __name__ == "__main__": | |
demo.launch() | |