Benötigt PDF OCR? Verwenden Sie PyMuPDF, um einen seitenweisen Preflight statt einer vollständigen Neuerkennung durchzuführen
Wenn Sie das PDF mit OCR versehen möchten, ist es nicht erforderlich, das gesamte PDF erneut zu erkennen. Ermitteln Sie mit PyMuPDF Seite für Seite, ob eine Textebene vorhanden ist und ob es sich um ein ganzseitiges Bild handelt, und versenden Sie nur die Seiten, die wirklich zur Erkennung benötigt werden. Im Anhang finden Sie ausführbare Beispiele, rotierende Seitentests und Anweisungen zur Verzweigungsgrenze.
Wenn viele Teams mit der PDF-Übersetzung oder -Archivierung zu tun haben, sind sie es gewohnt, das gesamte Dokument am Eingang als „gescannt"oder „kopierbar"zu kennzeichnen. Bei einer 300-seitigen PDF-Datei sind möglicherweise die ersten 280 Seiten mit Textebenen versehen und nur die letzten 20 Seiten sind gescannte Anhänge. Bei einer Klassifizierung nach ganzen Teilen erhöht die gesamte OCR die Wartezeit und kann auch zu einer falschen Identifizierung der ursprünglich korrekten Zahlen führen. Wenn Sie hingegen nur Text auf der Startseite kopieren und OCR auf allen Seiten überspringen können, ist dies ebenfalls riskant.
Ein zuverlässigerer Ansatz besteht darin, jede Seite mit den Ergebnissen des Preflights zum nächsten Schritt übergehen zu lassen. In diesem Artikel wird eine konservative Drei-Wege-Aufteilung implementiert: direkte Extraktion, Senden an die OCR-Kandidatenwarteschlange und manuelle Überprüfung. Es handelt sich um eine interpretierbare technische Heuristik und nicht um einen universellen Klassifikator zur Beurteilung der Textqualität. Nach der Lektüre erhalten Sie ein lauffähiges Seite-für-Seite-Preflight-Programm sowie Umleitungsgrenzen und allgemeine Ideen zur Fehlerbehandlung.
Fazit in einem Satz
Es besteht keine Notwendigkeit zu beurteilen, ob das PDF OCR erfordert. Verwenden Sie PyMuPDF, um Seite für Seite vorab zu prüfen und nur die Seiten an OCR zu senden, die wirklich erkannt werden müssen.
| Ihre Situation | Empfohlene Praktiken | Grund |
|---|---|---|
| Extrahieren Sie mindestens 40 Nicht-Leerzeichen aus einer einzelnen Seite | Direkte Extraktion (TEXT_CANDIDATE) | Sie haben bereits genügend Zeichen, müssen aber noch stichprobenartig nach versteckten fehlerhaften OCR-Ebenen suchen |
| Weniger als 40 Wörter und ein einzelnes Bild, das mindestens 70 % der Seite einnimmt | An OCR-Kandidatenwarteschlange senden | Zur Identifizierung eignen sich ganzseitige Scans, aber auch reine Fotos genügen. |
| Leere Seite, Vektortyp, spärlicher Titel oder komplexes Rätsel | Manuelle Inspektion (REVIEW) | Diese Situationen können nicht zuverlässig in die ersten beiden Kategorien eingeteilt werden und können nicht automatisch übersprungen oder verworfen werden. |
| Ein 300-seitiges Hybriddokument | Seite für Seite Preflight, keine vollständige Verarbeitung | Vermeiden Sie es, alle Seiten mit OCR zu versehen, weil nur wenige Anhänge gescannt wurden, oder die gesamte OCR zu überspringen, weil auf der Startseite Text vorhanden ist |
Hinweis: Der Inhalt im Bild stammt aus der synthetisierten PDF-Datei, die durch den folgenden Code generiert wurde, nicht aus der Kundendatei oder der OmniDoc-Schnittstelle. Der Text auf der Bildseite besteht aus Rasterpixeln; Der Text auf der Textseite hat eine echte Textebene.
Entscheiden Sie, was Sie zuerst überprüfen möchten
Hier werden zwei Signale verwendet: die Anzahl der Textzeichen nach dem Entfernen von Leerzeichen und der Anteil des Seitenbereichs, der vom größten Bild auf der Seite eingenommen wird. Die erstere antwortet: „Wurden genügend Zeichen extrahiert?"Letzteres hilft dabei, zwischen einem Ganzseitenscan und einer leeren Seite zu unterscheiden. Der Bildbereich schneidet sich zunächst mit dem Zuschneiderahmen, um eine Überschreitung des Bildvergrößerungsverhältnisses auf der Seite zu vermeiden.
| Beobachtung | Ablenkung dieses Artikels | Brauche immer noch Aufmerksamkeit |
|---|---|---|
| Mindestens 40 Nicht-Leerzeichen | TEXT_CANDIDATE | Die versteckte schlechte OCR-Schicht kann auch viele Wörter enthalten |
| Weniger als 40 Wörter und mindestens 70 % Abdeckung eines einzelnen Bildes | OCR_CANDIDATE | Reine Fotos erfüllen ebenfalls die Anforderungen; OCR ist möglicherweise nicht aussagekräftig |
| Der Rest der Situation | REVIEW | Leere Flächen, Vektortexte, spärliche Titel und komplexe Rätsel können hier alle vorhanden sein |
Schwellenwerte von 40 und 0,70 sollen diese Testreihe leichter auditierbar machen, nicht sprachübergreifende Standards. Chinesisch, Formeln, Umschläge und Kurzformen sollten separat gekennzeichnet werden. Hier wird das größte Bild nach Fläche aufgenommen, anstatt einfach die Flächen der überlappenden Bilder hinzuzufügen. Daher kann eine gescannte Seite, die aus mehreren Bildern besteht, im REVIEW landen. Dies ist eine bewusst bewahrte Grenze.
Vollständige lauffähige Probe
Das Sample verwendetPyMuPDF==1.28.0, ist nicht auf Tesseract angewiesen und ruft keine Online-OCR- oder Übersetzungsdienste auf. Speichere als example.py und führe es in einem leeren Verzeichnis aus. Der Dateiname, den sie erstellt, ist auf routing-fixture.pdf festgelegt. Für echte Projekte überschreiben Sie bitte nicht die Eingabedateien.
import json
import pymupdf
def inspect_page(page):
chars = len("".join(page.get_text().split()))
bounds = page.cropbox
# 图片坐标与文本坐标都是未旋转坐标;不要混用旋转后的 page.rect。
bounds = pymupdf.Rect(0, 0, bounds.width, bounds.height)
ratios = []
for image in page.get_image_info():
rect = pymupdf.Rect(image["bbox"]) & bounds
ratios.append(max(0, rect.get_area()) / bounds.get_area())
largest = max(ratios, default=0.0)
route = ("TEXT_CANDIDATE" if chars >= 40 else
"OCR_CANDIDATE" if largest >= 0.70 else "REVIEW")
return {"page": page.number + 1, "chars": chars,
"largest_image_ratio": round(largest, 3), "route": route}
with pymupdf.open() as source:
page = source.new_page(width=360, height=480)
page.insert_text((28, 60), "Sample invoice 2026-09-26", fontsize=16)
page.insert_text((28, 100), "Quantity 12 Unit price USD 15.00", fontsize=12)
page.insert_text((28, 132), "Amount USD 180.00 Checked manually", fontsize=12)
scan = page.get_pixmap(matrix=pymupdf.Matrix(2, 2)).tobytes("png")
page = source.new_page(width=360, height=480)
page.insert_image(page.rect, stream=scan)
source.new_page(width=360, height=480)
source.save("routing-fixture.pdf")
with pymupdf.open("routing-fixture.pdf") as pdf:
result = [inspect_page(page) for page in pdf]
assert [r["route"] for r in result] == [
"TEXT_CANDIDATE", "OCR_CANDIDATE", "REVIEW"]
assert result[1]["chars"] == 0
assert result[1]["largest_image_ratio"] == 1.0
pdf[1].set_rotation(90)
assert inspect_page(pdf[1])["route"] == "OCR_CANDIDATE"
print(json.dumps(result, indent=2))
Beim Zugriff auf OCR cachen Sie TextPage, kein Erfolgsmarker
Die OCR-Schnittstelle von PyMuPDF ist page.get_textpage_ocr(...). Tesseract und die zugehörigen Sprachdaten müssen separat vorbereitet werden. Nach dem Erhalt einer TextPage sollte die anschließende Extraktion sie als textpage-Parameter weitergeben, um eine doppelte Erkennung auf derselben Seite zu vermeiden. Für spezifische Installationsmethoden und Parameter siehe bitte PyMuPDF OCR-Dokument.
Dieser Artikel verwendet keine OCR-Engine, daher beweisen die Testergebnisse lediglich, dass die Verteilungslogik und die Koordinatenverwendung korrekt sind und keine chinesische Erkennungsrate, Tabellenwiederherstellungsrate oder Übersetzungsqualität darstellen. In der Produktion sollten die OCR-Engine-Version, das Sprachpaket, die Seitenzahl, die Eingabedatei-Zusammenfassung und die manuellen Sampling-Ergebnisse aufgezeichnet werden. Behalte nicht nur die letzte Zeichenkette, sonst ist es schwer zu erkennen, von welcher Seite eine Nummer stammt.
Drei Arten von Fehlern, die am leichtesten übersehen werden
Versteckte Textebenen können verzerrter Text sein. Das Erreichen der Zeichenanzahl bedeutet nur: "Sie können weiterhin den Extraktionsversuch versuchen." Sie müssen außerdem prüfen, ob ersetzte Zeichen, doppelte Zeilen und Schlüsselfelder mit dem Rendering übereinstimmen. Wichtige Punkte wie Vertragsnummer und Betrag müssen zufällig überprüft werden.
Der vom Vektorpfad gezeichnete Text ist weder Text noch Bilder. Sie geben REVIEW ein. Markieren Sie Seiten nicht automatisch als leer und lassen Sie Seiten nicht stillschweigend fallen.
Die Verwendung der Seite nach dem Schließen des Dokuments führt zu einem ungültigen Objekt. Bitte behalten Sie den Umfang von with pymupdf.open(...) und veröffentlichen Sie die Datei erst nach Vorprüfen, Rendern und Extrahieren. Für weitere Details zu Koordinaten, Bildinformationen und Seitenlebenszyklen siehe PyMuPDF Page API.
Nicht vertrauenswürdige PDFs sollten außerdem Dateigröße, Seitenanzahl, Renderpixel, Zeit und Speichergrenzen in einem eigenständigen Prozess festlegen. Das Beispiel testet nur kleine Dateien und bietet keine Sandbox für bösartige Dateien. Bevor Sie PyMuPDF erstellen und verwenden, sollten Sie außerdem die Lizenzbedingungen und Ihre Vertriebsmethode überprüfen.
Übergang von Streams zum Übersetzungsworkflow
Eine qualifizierte Ausgabe ist keine Textfolge, sondern ein Datensatz mit Seitenzahlen und Entscheidungsgründen. Bestätigen Sie vor der Übersetzung, welche Seiten zuverlässig extrahiert werden können; Nach der Übersetzung werden Inhalt, Zahlen und Layout anschließend überprüft. Sie können Dokumentenbearbeitungsdienste auf OmniDoc-Produkteintrag ansehen. Das lokale Programm in diesem Artikel läuft unabhängig und basiert nicht auf einem OmniDoc-Konto, noch bedeutet das, dass es sich um einen internen Produktalgorithmus handelt.
📊 Kernvergleich
| Verlauf | Auslöserbedingungen | Geeignete Seite | Hauptrisiken |
|---|---|---|---|
| Direkte Extraktion (TEXT_CANDIDATE) | Mindestens 40 nicht abstandsreiche Zeichen | Die Body-Seite der bestehenden Textebene | Versteckte, schlechte OCR-Schichten können verzerrten Text enthalten |
| OCR-Kandidaten (OCR_CANDIDATE) | Weniger als 40 Wörter, wobei ein einzelnes Bild mindestens 70 % abdeckt. | Ganzseitige gescannte Kopie | Reine Fotos erfüllen ebenfalls die Anforderungen, aber OCR-Ergebnisse sind möglicherweise nicht aussagekräftig |
| Manuelle Inspektion (REVIEW) | Sie erfüllt nicht die oben genannten beiden Kategorien | Leere Seiten, Vektortext, spärliche Titel, komplexe Rätsel | Manuelles Urteil ist erforderlich; Überspringen oder Abwerfen kann nicht automatisch erfolgen |
🎯 Welche Methode passt zu dir?
Wenn du ......
- Behandelte gemischte Dokumente mit großen Qualitätsunterschieden zwischen Vorder- und Rückseite: Seite für Seite Vorabprüfung, wobei jede eine andere Route eingab.
- Hauptsächlich mit Verträgen, Finanzdokumenten und anderen Dokumenten mit Schlüsselzahlen umgehend: Für Seite TEXT_CANDIDATE zufällig die Übereinstimmung zwischen Zahlen und Darstellungen überprüfen.
- Batch-Verarbeitung von Scans: Aufzeichnungs-Engine-Versionen, Sprachpakete und Seitenzahlen für OCR-Ergebnisse zur einfachen Rückverfolgbarkeit.
- Empfangen von PDFs aus unbekannten Quellen: Setzen Sie Ressourcenlimits in eigenständigen Prozessen; verarbeiten Sie sie nicht direkt im Hauptprozess.
❓ Häufig gestellte Fragen (FAQ)
1. Die Startseite kann Text kopieren; kann ich den OCR-Prozess für das gesamte PDF überspringen?
Nein, das kannst du nicht. Eine Textebene auf der ersten Seite bedeutet nicht, dass nachfolgende Seiten auch solche haben; Sie sollten Seite für Seite beurteilen.
2. Warum nicht einfach den Bildbereich direkt addieren?
Das Hinzufügen der sich überlappenden Bilder nach Gebiet überschätzt die Abdeckungsrate. Dieser Artikel enthält das größte Bild nach Fläche, sodass die gescannten Seiten, die aus mehreren Bildern zusammengesetzt sind, in den Abschnitt REVIEW fallen können, der eine bewusste Grenze darstellt.
3. Wenn die Zeichenanzahl 40 erreicht, bedeutet das, dass die Textqualität in Ordnung ist?
Es kann nicht so geschlossen werden. Versteckte, fehlerhafte OCR-Schichten können auch viele Zeichen haben, daher musst du trotzdem nach Ersatzzeichen, doppelten Zeilen und Spot-Key-Feldern suchen.
4. Wie sollte Text, der in Vektorpfaden gezeichnet wird, behandelt werden?
Sie sind weder Text noch Bilder, treten in BEWERTUNG ein und werden manuell bewertet; sie sollten nicht automatisch als leere oder stillschweigend verworfene Seiten markiert werden.
5. Ist das lokale Programm auf ein OmniDoc-Konto angewiesen?
Nicht abhängig. Das lokale Programm in diesem Artikel läuft unabhängig und ruft keine Online-OCR- oder Übersetzungsdienste an.
📝 Zusammenfassung
Erstens, lassen Sie Beweise Seite für Seite zurück, bevor Sie entscheiden, ob OCR durchgeführt werden soll. Unsichere Seiten in der Warteschlange zu lassen, ist effektiver, als unsichere Ergebnisse als Erfolg zu tarnen.


