doc-translator / babeldoc /docvision /base_doclayout.py
Taha Mahmood
Initial upload
754d92a
import abc
import logging
from collections.abc import Generator
import pymupdf
from babeldoc.format.pdf.document_il.il_version_1 import Page
logger = logging.getLogger(__name__)
class YoloResult:
"""Helper class to store detection results from ONNX model."""
def __init__(self, names, boxes=None, boxes_data=None):
if boxes is not None:
self.boxes = boxes
else:
assert boxes_data is not None
self.boxes = [YoloBox(data=d) for d in boxes_data]
self.boxes.sort(key=lambda x: x.conf, reverse=True)
self.names = names
class YoloBox:
"""Helper class to store detection results from ONNX model."""
def __init__(self, data=None, xyxy=None, conf=None, cls=None):
if data is not None:
self.xyxy = data[:4]
self.conf = data[-2]
self.cls = data[-1]
return
assert xyxy is not None and conf is not None and cls is not None
self.xyxy = xyxy
self.conf = conf
self.cls = cls
class DocLayoutModel(abc.ABC):
@staticmethod
def load_onnx():
logger.info("Loading ONNX model...")
from babeldoc.docvision.doclayout import OnnxModel
model = OnnxModel.from_pretrained()
return model
@staticmethod
def load_available():
return DocLayoutModel.load_onnx()
@property
@abc.abstractmethod
def stride(self) -> int:
"""Stride of the model input."""
@abc.abstractmethod
def handle_document(
self,
pages: list[Page],
mupdf_doc: pymupdf.Document,
translate_config,
save_debug_image,
) -> Generator[tuple[Page, YoloResult], None, None]:
"""
Handle a document.
"""