ocr / app.py
ken4's picture
Update app.py
0a67fea verified
from fastapi import FastAPI, UploadFile, File, Request
from fastapi.responses import JSONResponse
import requests
import easyocr
from PIL import Image
import numpy as np
from io import BytesIO
app = FastAPI(title="OCR API", description="OCR through URL or Buffer")
reader = easyocr.Reader(['en'], gpu=False)
def run_ocr(image_bytes):
img = Image.open(BytesIO(image_bytes)).convert("RGB")
img_np = np.array(img)
results = reader.readtext(img_np)
parsed = []
output = []
for box, text, conf in results:
parsed.append(str(text))
output.append({
"text": str(text),
"confidence": float(conf),
"bounding_box": [[float(x), float(y)] for x, y in box]
})
final_text = " ".join(parsed)
return {
"results": output,
"parsedText": parsed,
"finalText": final_text
}
@app.get("/ocr")
async def ocr_url(url: str):
try:
img_data = requests.get(url, timeout=10).content
data = run_ocr(img_data)
return JSONResponse({"success": True, **data})
except Exception as e:
return JSONResponse({"success": False, "error": str(e)}, status_code=400)
@app.post("/ocr")
async def ocr_buffer(file: UploadFile = File(...)):
try:
image_bytes = await file.read()
data = run_ocr(image_bytes)
return JSONResponse({"success": True, **data})
except Exception as e:
return JSONResponse({"success": False, "error": str(e)}, status_code=400)