Nitin00043's picture
Update app.py
7951c72 verified
raw
history blame
1.88 kB
# 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()