项目文件夹

文件
wehub-resource-sync 917eedffcf
Main / Python 3.11 - Docs (push) Has been cancelled
Main / Python 3.11 - Build (push) Has been cancelled
Main / Python 3.11 - Lint (push) Has been cancelled
Main / Python 3.11 - Style (push) Has been cancelled
Main / Python 3.11 - Test (push) Has been cancelled
Main / GPU CI (push) Has been cancelled
Main / Release (push) Has been cancelled
Main / Build and Push Docker Images (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:27:09 +08:00

68 行
2.1 KiB
Python

import base64
import os
import tempfile
import torch
from transformers import AutoModel, AutoTokenizer
from olmocr.data.renderpdf import render_pdf_to_base64png
# Global cache for the model and tokenizer.
_device = "cuda" if torch.cuda.is_available() else "cpu"
_model = None
_tokenizer = None
def load_model():
"""
Load the GOT-OCR model and tokenizer if they haven't been loaded already.
Returns:
model: The GOT-OCR model loaded on the appropriate device.
tokenizer: The corresponding tokenizer.
"""
global _model, _tokenizer
if _model is None or _tokenizer is None:
_tokenizer = AutoTokenizer.from_pretrained("ucaslcl/GOT-OCR2_0", trust_remote_code=True)
_model = AutoModel.from_pretrained(
"ucaslcl/GOT-OCR2_0",
trust_remote_code=True,
use_safetensors=True,
revision="979938bf89ccdc949c0131ddd3841e24578a4742",
pad_token_id=_tokenizer.eos_token_id,
)
_model = _model.eval().to(_device)
return _model, _tokenizer
def run_gotocr(pdf_path: str, page_num: int = 1, ocr_type: str = "ocr") -> str:
"""
Convert page of a PDF file to markdown using GOT-OCR.
This function renders the first page of the PDF to an image, runs OCR on that image,
and returns the OCR result as a markdown-formatted string.
Args:
pdf_path (str): The local path to the PDF file.
Returns:
str: The OCR result in markdown format.
"""
# Ensure the model is loaded (cached across calls)
model, tokenizer = load_model()
# Convert the first page of the PDF to a base64-encoded PNG image.
base64image = render_pdf_to_base64png(pdf_path, page_num=page_num, target_longest_image_dim=1024)
# Write the image to a temporary file.
with tempfile.NamedTemporaryFile("wb", suffix=".png", delete=False) as tmp:
tmp.write(base64.b64decode(base64image))
tmp_filename = tmp.name
# Run GOT-OCR on the saved image.
result = model.chat(tokenizer, tmp_filename, ocr_type=ocr_type)
# Clean up the temporary file.
os.remove(tmp_filename)
return result