PDF-Texterkennung mit PaddleOCR und fitz (PyMuPDF)

Hier noch ein funktionierendes Beispiel, wie man PDF Dateien OCR-technisch auswerten kann. Im Gegensatz zu pdf2image besteht hier keine Abhängigkeit zu poppler.

import fitz
import numpy as np
from paddleocr import PaddleOCR
 
ocr = PaddleOCR(lang="de", enable_mkldnn=False)
 
doc = fitz.open("Widerspruch.pdf")
 
for page_number, page in enumerate(doc, start=1):
 
    # Render PDF page
    pix = page.get_pixmap(dpi=300)
 
    # Convert directly to NumPy
    image = np.frombuffer(
        pix.samples,
        dtype=np.uint8
    ).reshape(pix.height, pix.width, pix.n)
 
    # PaddleOCR expects RGB, not RGBA
    if pix.n == 4:
        image = image[:, :, :3]
 
    result = ocr.predict(image)
 
    print(f"\n--- Page {page_number} ---")
 
    for page_result in result:
        for text, score in zip(
            page_result["rec_texts"],
            page_result["rec_scores"],
        ):
            print(f"{score:.3f}: {text}")