ocr-2512 / handler.py
clfegg's picture
Update handler.py
c595fbe verified
raw
history blame
1.73 kB
from typing import Dict, Any, List
import os
import base64
current_dir = os.getcwd()
os.environ['HF_HOME'] = os.path.join(current_dir)
os.environ['PAGINATE_OUTPUT']='True'
from marker.convert import convert_single_pdf
from marker.logger import configure_logging
from marker.models import load_all_models
from marker.output import save_markdown
from io import BytesIO
class EndpointHandler:
def __init__(self, path=""):
# Initialize the OCR model
self.models = load_all_models()
self.file_location = "input/temp.pdf"
os.makedirs("input", exist_ok=True)
def __call__(self, data: Dict[str, Any]) -> List[Dict[str, Any]]:
"""
data args:
inputs (:obj: dict): A dictionary containing the inputs.
max_pages (:obj: int): The maximum number of pages to process.
file (:obj: str): The base64-encoded PDF file content.
Return:
A list of dictionaries containing the extracted text.
"""
inputs = data.get("inputs", {})
file_content = inputs.get("file")
max_pages = inputs.get("max_pages", None)
# Decode the base64-encoded file content
file_bytes = base64.b64decode(file_content)
self.upload_file(BytesIO(file_bytes))
pdf_path = self.file_location
# Perform OCR on the input PDF
extracted_text, _, _ = convert_single_pdf(pdf_path, self.models, max_pages=max_pages, langs=["vi"])
# Return the extracted text
return [{"extracted_text": extracted_text}]
def upload_file(self, file: BytesIO, max_pages: int = None):
with open(self.file_location, "wb") as f:
f.write(file.read())
return True