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!"}