Spaces:
Runtime error
Runtime error
File size: 2,114 Bytes
7951c72 3dc1b9e a1c289f 3dc1b9e 7951c72 3dc1b9e a1c289f 3dc1b9e a1c289f 7951c72 a1c289f 5093ea9 7951c72 a1c289f 3dc1b9e 7951c72 3dc1b9e 7951c72 3dc1b9e 7951c72 3dc1b9e 7951c72 3dc1b9e 7951c72 3dc1b9e a1c289f 3dc1b9e 7951c72 3dc1b9e 7951c72 3dc1b9e 11d8425 3dc1b9e a1c289f 3dc1b9e 5093ea9 |
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 |
# app.py
import gradio as gr
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image
import sympy
# Load the pre-trained model and processor outside the function for efficiency
processor = TrOCRProcessor.from_pretrained('microsoft/trocr-base-handwritten')
model = VisionEncoderDecoderModel.from_pretrained('microsoft/trocr-base-handwritten')
def solve_math_problem(image):
try:
# Ensure the image is in RGB format
image = image.convert("RGB")
# Resize and normalize the image as expected by the model
pixel_values = processor(images=image, return_tensors="pt").pixel_values
# Generate the text (this extracts the handwritten equation)
generated_ids = model.generate(pixel_values)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
# Clean and prepare the extracted text
problem_text = generated_text.strip().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="RGB"
),
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"
)
if __name__ == "__main__":
demo.launch()
|