File size: 1,707 Bytes
081eb3f f91680f 081eb3f 42a2dcc 081eb3f 42a2dcc 081eb3f f133e3a 081eb3f f133e3a 081eb3f f133e3a 081eb3f f133e3a 42a2dcc f133e3a |
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 |
from fastapi import FastAPI
from pydantic import BaseModel
import easyocr
import numpy as np
from PIL import Image
import cv2
import base64
import io
import os
app = FastAPI(title="OCR Base64 API")
model_storage_dir = '/code/.EasyOCR'
os.makedirs(model_storage_dir, exist_ok=True)
reader = easyocr.Reader(['en'], gpu=False, model_storage_directory=model_storage_dir)
class ImageRequest(BaseModel):
image_base64: str
def preprocess_image(image):
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
scale_percent = 200
width = int(gray.shape[1] * scale_percent / 100)
height = int(gray.shape[0] * scale_percent / 100)
resized = cv2.resize(gray, (width, height), interpolation=cv2.INTER_LINEAR)
_, thresh = cv2.threshold(resized, 150, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
return thresh
@app.post("/extract-text/")
def extract_text(request: ImageRequest):
try:
b64_data = request.image_base64
if "base64," in b64_data:
b64_data = b64_data.split("base64,")[1]
image_bytes = base64.b64decode(b64_data)
image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
img_np = np.array(image)
processed_img = preprocess_image(img_np)
results = reader.readtext(processed_img)
extracted_text = [text.replace(" ", "") for _, text, _ in results]
text_result = " ".join(extracted_text) if extracted_text else ""
return {
"success": True,
"text": text_result
}
except Exception as e:
return {
"success": False,
"error": str(e)
}
@app.get("/")
def read_root():
return {"message": "API is running!"} |