ProblemSolver / app.py
JHigg's picture
Update app.py
3c0c4ff verified
import gradio as gr
import pytesseract
import cv2
import re
from sympy import sympify
# Function to extract math problems from an image
def extract_text_from_image(image):
# Convert image to grayscale for better OCR performance
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Perform OCR on the grayscale image
text = pytesseract.image_to_string(gray)
print("OCR Output:", text) # Print raw OCR output
# Filter out potential math expressions
math_problems = re.findall(r'[\d+\-*/().÷]+', text)
print("Recognized Problems:", math_problems) # Print recognized problems
return math_problems
# Function to solve the extracted math problems
def solve_math_problem(problem):
try:
# Replace any OCR misinterpretations if needed
problem = problem.replace("÷", "/")
print("Processing Problem:", problem) # Print each problem being processed
# Convert the string expression to a symbolic expression
expression = sympify(problem)
# Evaluate the expression
result = expression.evalf()
print("Result:", result) # Print result
return result
except Exception as e:
print(f"Error solving problem '{problem}':", e) # Print specific error
return f"Error: {e}"
# Main function to recognize and solve math problems from an image
def recognize_and_solve(image):
problems = extract_text_from_image(image)
solutions = [f"{p} = {solve_math_problem(p)}" for p in problems]
return "\n".join(solutions) if solutions else "No math problems detected."
# Gradio interface
interface = gr.Interface(
fn=recognize_and_solve,
inputs="image",
outputs="text",
title="Math Problem Recognizer and Solver",
description="Upload an image containing math problems, and this app will recognize and solve them."
)
# Launch the Gradio app
interface.launch()