Wie komprimiere ich Tesseract-codierte PDFs, während ich eingebetteten Text aus OCR behalte?

3

Ich habe mit der Verwendung von Tesseract für die Texterkennung von PDFs experimentiert und es war meistens erfolgreich, insbesondere mit deutschen Fraktur-Texten (dem alten gotischen Druck), die Tools wie Adobe Acrobat nicht richtig erkennen können.

Das Problem ist, dass die Ausgabedateien von Tesseract ziemlich groß sind und ich sie nach dem OCR komprimieren möchte. Wenn ich jedoch Ghostscript verwende, um die Dateien zu komprimieren, ist der eingebettete OCR-Text durcheinander. Wenn ich ImageMagick verwende, wird der eingebettete Text ebenfalls entfernt. Gibt es einen Weg, dies zu umgehen? Theoretisch könnte ich vor dem OCR komprimieren, aber das würde die OCR-Genauigkeit verschlechtern.

Im Allgemeinen ist es mein Ziel, in meine PDF-Ausgabedateien OCR-Text in hoher Qualität einzubetten und die eingebetteten Bilder stark zu komprimieren, damit die Dateien nicht annähernd so viel Platz beanspruchen. Ich habe festgestellt, dass die Adobe Acrobat Pro-Funktion "Als anderes speichern> PDF in verkleinerter Größe" die Bilder stark komprimiert, aber jeglichen OCR-Text durcheinander bringt. Dies gilt unabhängig davon, ob die Dateien in Acrobat OCR-fähig waren oder mit einem Tool wie Tesseract erstellt wurden.

Hier ist mein aktueller Workflow anhand eines PDF-Beispiels .

PDF in TIFF-Dateien aufteilen

pdftk infile.pdf burst output "temp/page_%03d.pdf"
dpi=130 #this is the dpi of the particular file
parallel convert -verbose -density $dpi "{}" -depth 8 -background white -compress zip "{}.tiff" ::: temp/*.pdf

Führen Sie Tesseract für jede der TIFF-Dateien aus (siehe Ausgabe der Beispieldatei ).

language=deu_frak
parallel tesseract {} {} -l $language pdf ::: temp/*.tiff
  • Wenn ich die ausgegebenen PDF-Dateien mit Ghostscript kombiniere, erhalte ich eine Datei wie diese , die den eingebetteten Text durcheinander bringt
  • Wenn ich sie mit PDFtk kombiniere (zB pdftk temp / * .pdf cat output outfile.pdf`), erhalte ich eine Datei wie diese , die den eingebetteten Text beibehält, die Datei jedoch irgendwie vergrößert
  • Und wenn ich dann versuche, diese Datei mit ImageMagic zu komprimieren (zB convert -density 130x130 -quality 5 -compress jpeg outfile-pdftk.pdf outfile-pdftk-imagemagick.pdf), wird der eingebettete OCR-Text ( Ausgabe ) entfernt.

Es scheint, dass Tesseract die Bilder in der Ausgabe-PDF nicht komprimiert, was zu erwarten ist - seine Aufgabe ist es, die Dateien mit OCR zu versehen und nicht die Ausgabe zu komprimieren.

Bei den ersten Tesseract OCR-Dateien wird beispielsweise Folgendes pdfimages -list temp/page_001.pdf.tiff.pdferzeugt:

page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    1067  1508  rgb     3   8  jpeg   no        11  0   129   130  318K 6.7%

... was darauf hinweist, dass das Bildobjekt im PDF nicht genau optimal gespeichert ist. Es ist immer noch in RGB, nicht in Schwarzweiß. Beim Komprimieren mit ImageMagick pdfimages -listerhält man dagegen:

  pdfimages -list outfile-pdftk-imagemagick.pdf
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    1075  1520  gray    1   8  jpeg   no         8  0   130   131 54.0K 3.4%
   1     1 smask    1075  1520  gray    1   8  image  no         8  0   130   131 25.1K 1.6%
   2     2 image    1075  1520  gray    1   8  jpeg   no        22  0   130   131 59.9K 3.8%
   2     3 smask    1075  1520  gray    1   8  image  no        22  0   130   131 25.1K 1.6%
   3     4 image    1075  1520  gray    1   8  jpeg   no        36  0   130   131 45.2K 2.8%
   3     5 smask    1075  1520  gray    1   8  image  no        36  0   130   131 25.1K 1.6%
   4     6 image    1075  1520  gray    1   8  jpeg   no        50  0   130   131 62.8K 3.9%
   4     7 smask    1075  1520  gray    1   8  image  no        50  0   130   131 25.1K 1.6%
   5     8 image    1075  1520  gray    1   8  jpeg   no        64  0   130   131 61.1K 3.8%
   5     9 smask    1075  1520  gray    1   8  image  no        64  0   130   131 25.1K 1.6%
   6    10 image    1075  1520  gray    1   8  jpeg   no        78  0   130   131 63.4K 4.0%
   6    11 smask    1075  1520  gray    1   8  image  no        78  0   130   131 25.1K 1.6%
   7    12 image    1075  1520  gray    1   8  jpeg   no        92  0   130   131 65.1K 4.1%
   7    13 smask    1075  1520  gray    1   8  image  no        92  0   130   131 25.1K 1.6%
   8    14 image    1075  1520  gray    1   8  jpeg   no       106  0   130   131 61.0K 3.8%
   8    15 smask    1075  1520  gray    1   8  image  no       106  0   130   131 25.1K 1.6%
   9    16 image    1075  1520  gray    1   8  jpeg   no       120  0   130   131 66.8K 4.2%
   9    17 smask    1075  1520  gray    1   8  image  no       120  0   130   131 25.1K 1.6%
  10    18 image    1075  1520  gray    1   8  jpeg   no       134  0   130   131 65.6K 4.1%
  10    19 smask    1075  1520  gray    1   8  image  no       134  0   130   131 25.1K 1.6%

Wie wir sehen können, nehmen die Bilder weniger Platz ein, jedoch wurde der in OCR eingebettete Text entfernt und irgendwie ist die Datei kleiner. Im Vergleich dazu erhalte ich, wenn ich die Originaldatei (ohne OCR-eingebetteten Text) mit Adobe Acrobats "Save As Other> Reduced Size PDF" komprimiere:

  pdfimages -list infile-adobe.pdf 
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    1000  1499  gray    1   8  jpx    no        38  0   129   129 78.1K 5.3%
   2     1 image    1000  1499  gray    1   8  jpx    no         3  0   129   129 89.1K 6.1%
   3     2 image    1000  1499  gray    1   8  jpx    no         6  0   129   129 65.6K 4.5%
   4     3 image    1000  1499  gray    1   8  jpx    no         9  0   129   129 97.7K 6.7%
   5     4 image    1000  1499  gray    1   8  jpx    no        12  0   129   129 95.4K 6.5%
   6     5 image    1000  1499  gray    1   8  jpx    no        15  0   129   129 98.7K 6.7%
   7     6 image    1000  1499  gray    1   8  jpx    no        18  0   129   129  102K 6.9%
   8     7 image    1000  1499  gray    1   8  jpx    no        21  0   129   129 94.6K 6.5%
   9     8 image    1000  1499  gray    1   8  jpx    no        24  0   129   129  105K 7.2%
  10     9 image    1000  1499  gray    1   8  jpx    no        27  0   129   129  103K 7.1%

... Wie wir sehen können, scheint Adobe Acrobat Bilder mit JPEG2000 (JPX) zu komprimieren, das Ghostscript oder ImageMagick aus Patentgründen nicht zur Verfügung steht.

Gibt es Vorschläge zur Komprimierung von Tesseract-OCR-PDF-Dateien?

Jason
quelle
Eines der "merkwürdigen" Tools, die ich verwende, ist PDFFill, das eine Funktion zur Optimierung von PDFs bietet. Ich bin mir nicht sicher, ob es mit JPEG2000 umgehen kann, aber es ist einen Versuch wert.
le_top
Warum brauchst du die Bilder? Sie scheinen nur den Hintergrund des Textes zu enthalten. Ohne sie wird die Datei ungefähr 70 K benötigen (getestet, obwohl ich keinen guten PDF-Editor habe und der Text danach in einer schlechten Reihenfolge war).
Harrymc
@harrymc Ich benötige die Bilder, weil ich sie mit Notizen markieren möchte und weil die OCR nicht 100% genau ist. Auf diese Weise kann ich das Original sehen und in meinem PDF-Reader damit arbeiten.
Jason
Wenn ich das richtig verstehe, kombinieren Sie den angezeigten Text und das ursprüngliche Seitenbild in einem PDF. Da die Textgröße vernachlässigbar ist, können Sie die Bilder nur minimieren, indem Sie sie in ein verlustbehaftetes Format konvertieren Am besten mit niedriger Qualität und hoher Komprimierung (damit der Text lesbar ist, benötigen Sie keine hohe Qualität).
Harrymc
@harrymc Richtig, sobald der Text da ist, möchte ich die Bilder komprimieren, aber das Komprimieren mit Ghostscript oder sogar Adobe scheint den OCR-Text zu vermasseln, der dann den ganzen Zweck zunichte macht. Sehen Sie sich zum Beispiel diese Ausgabedatei an, die ich mit Tesseract OCR erstellt und dann mit Ghostscript komprimiert habe, um den OCR-Text zu entstellen und zu stören. Versuchen Sie, einen Teil des Textes zu kopieren / einzufügen.
Jason