pageparse.ai / src /pageparse /ingest.py
Varun2007's picture
initial clean deployment commit with compilers
8c3e275
Raw
History Blame Contribute Delete
1.36 kB
from __future__ import annotations
from pathlib import Path
import cv2
import numpy as np
from PIL import Image
IMAGE_EXTENSIONS = {
".jpg",
".jpeg",
".png",
".bmp",
".tiff",
".tif",
".webp",
".ppm",
".pgm",
".pbm",
}
def load_image(path: str | Path) -> np.ndarray:
path = Path(path)
if not path.exists():
raise FileNotFoundError(f"Image not found: {path}")
ext = path.suffix.lower()
if ext == ".pdf":
return _load_pdf(path)
img = cv2.imread(str(path))
if img is not None:
return img
pil_img = Image.open(path)
arr = np.array(pil_img)
if arr.ndim == 2:
return cv2.cvtColor(arr, cv2.COLOR_GRAY2BGR)
if arr.shape[-1] == 4:
return cv2.cvtColor(arr, cv2.COLOR_RGBA2BGR)
return cv2.cvtColor(arr, cv2.COLOR_RGB2BGR)
def load_pdf_pages(path: Path, scale: float = 2.0) -> list[np.ndarray]:
import pypdfium2 as pdfium
pdf = pdfium.PdfDocument(str(path))
pages = []
for page in pdf:
bitmap = page.render(scale=scale)
pil = bitmap.to_pil()
arr = np.array(pil)
pages.append(cv2.cvtColor(arr, cv2.COLOR_RGB2BGR))
return pages
def _load_pdf(path: Path) -> np.ndarray:
pages = load_pdf_pages(path)
if pages:
return pages[0]
raise ValueError(f"PDF has no pages: {path}")