我一直在尝试使用 Tesseract 对我的 PDF 进行 OCR,而且大部分都是成功的,尤其是对于德国 Fraktur 文本(旧式哥特式印刷品),因为 Adobe Acrobat 等工具无法正确识别。
问题是 Tesseract 的输出文件相当大,我想在 OCR 之后压缩它们。但是,当我使用 Ghostscript 压缩文件时,嵌入的 OCR 文本被搞乱了。同样,如果我使用 ImageMagick,嵌入的文本会被删除。有办法解决这个问题吗?理论上我可以在 OCR 之前压缩,但这会使 OCR 准确性变差。
一般来说,我的目标是在输出 PDF 文件中嵌入高质量的 OCR 文本,并高度压缩嵌入的图像,以便文件不会占用太多空间。我发现 Adobe Acrobat Pro 的“另存为其他 > 缩小尺寸 PDF”功能可以高度压缩图像,但会破坏任何 OCR 文本。无论文件是在 Acrobat 中进行 OCR,还是使用 Tesseract 等工具进行 OCR,都是如此。
这是我目前的工作流程,使用样本 pdf。
将 PDF 拆分为 TIFF 文件
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
在每个 TIFF 文件上运行 Tesseract(参见示例文件的输出)
language=deu_frak
parallel tesseract {} {} -l $language pdf ::: temp/*.tiff
- 当我将输出的 PDF 文件与 Ghostscript 合并时,我得到了类似的文件这个,这会破坏嵌入的文本
- 当我将它们与 PDFtk 结合使用时(例如 pdftk temp/*.pdf cat output outfile.pdf`),我得到了一个类似的文件这个,它保留了嵌入的文本,但不知何故使文件更大
- 然后,当我尝试使用 ImageMagic (例如
convert -density 130x130 -quality 5 -compress jpeg outfile-pdftk.pdf outfile-pdftk-imagemagick.pdf
)压缩该文件时,它会删除嵌入的 OCR 文本(输出)
看起来 Tesseract 不会压缩输出 PDF 中的图像,这是可以预料的 - 它的工作是对文件进行 OCR,而不是压缩输出。
例如,在初始 Tesseract OCR 文件上,pdfimages -list temp/page_001.pdf.tiff.pdf
生成:
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%
... 这表明 PDF 中的图像对象并未得到最佳存储。它仍然是 RGB 格式,而不是黑白格式。相比之下,使用 ImageMagick 压缩后,pdfimages -list
结果如下:
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%
我们可以看到,图像占用的空间较少,但是嵌入 OCR 的文本被删除了,文件不知何故变小了。相比之下,如果我获取原始文件(没有嵌入 OCR 的文本)并使用 Adobe Acrobat 的“另存为其他 > 缩小尺寸 PDF”对其进行压缩,我会得到:
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%
... 我们可以看到,Adobe Acrobat 似乎使用 JPEG2000(JPX)压缩图像,而由于专利问题,Ghostscript 和 ImageMagick 无法使用这种技术。
总的来说,关于如何压缩 Tesseract-OCR 的 PDF 文件有什么建议吗?