OCCR / app.py
mostafasmart's picture
Add application filesfSs
d9ed74d
import gradio as gr
import easyocr
import cv2
import numpy as np
from PIL import Image
import requests
from io import BytesIO
import json
# Initialize EasyOCR once
reader = easyocr.Reader(['en'])
def detect_digits(image_url):
try:
# Download the image
response = requests.get(image_url)
response.raise_for_status()
# Convert to OpenCV format
image = Image.open(BytesIO(response.content)).convert('RGB')
img_np = np.array(image)
img_cv = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
# Perform text detection
results = reader.readtext(img_cv)
# Process results
output = []
for bbox, text, conf in results:
if any(c.isdigit() for c in text):
# Extract coordinates
tl = tuple(map(int, bbox[0]))
br = tuple(map(int, bbox[2]))
output.append({
"text": text,
"confidence": float(conf),
"coordinates": {
"x_min": tl[0],
"y_min": tl[1],
"x_max": br[0],
"y_max": br[1]
}
})
return json.dumps(output, indent=2, ensure_ascii=False)
except Exception as e:
return json.dumps({"error": str(e)})
# Create Gradio interface
interface = gr.Interface(
fn=detect_digits,
inputs=gr.Textbox(
label="Image URL",
placeholder="Enter image URL here..."
),
outputs=gr.JSON(label="Detection Results"),
title="Digit Region Detection",
description="Upload an image URL to detect regions containing numbers",
allow_flagging="never"
)
interface.launch()