""" Kiri OCR - FastAPI OCR API """ import io import os import cv2 import tempfile import uvicorn import numpy as np from PIL import Image from fastapi import ( FastAPI, UploadFile, File, Form ) from fastapi.responses import ( JSONResponse, HTMLResponse ) from fastapi.middleware.cors import CORSMiddleware # ========================================================= # GLOBAL OCR INSTANCES # ========================================================= ocr_instances = {} # ========================================================= # LOAD OCR MODEL # ========================================================= def load_ocr(decode_method="accurate"): from kiri_ocr import OCR print( f"Loading OCR model with " f"decode_method={decode_method}" ) return OCR( model_path="mrrtmob/kiri-ocr", det_method="db", decode_method=decode_method, device="cpu", verbose=False ) # ========================================================= # GET OCR INSTANCE # ========================================================= def get_ocr(decode_method="accurate"): global ocr_instances if decode_method not in ocr_instances: ocr_instances[decode_method] = ( load_ocr(decode_method) ) return ocr_instances[decode_method] # ========================================================= # FASTAPI APP # ========================================================= app = FastAPI( title="Kiri OCR API", description="Image OCR API using Kiri OCR", version="1.0" ) # ========================================================= # CORS # ========================================================= app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # ========================================================= # HOME PAGE # ========================================================= @app.get("/") async def home(): return HTMLResponse("""
Upload image and extract text