如何缩小tesseract生成的PDF的大小?

seb*_*seb 5 pdf ocr pdf-generation tesseract ghostscript

我的(网络)应用程序的设置如下:我得到用户上传的PDF文件,在它们上运行OCR并向他们显示OCRed PDF。由于所有内容都在线,因此最小化生成的PDF文件的大小是减少用户加载和等待时间的关键。

我从用户那里收到的文件是sample.pdf(我创建了一个包含原始文件以及在此处生成的文件的存档:https : //dl.dropboxusercontent.com/u/1390155/tess-files/sample .zip)。我使用tesseract 3.04并执行以下操作:

gs -r300 -sDEVICE=tiff24nc -dBATCH -dNOPAUSE -sOutputFile=sample.tiff sample.pdf
tesseract sample.tiff sample-tess -l fra -psm 1 pdf
Run Code Online (Sandbox Code Playgroud)

OCR的结果很好,但是现在生成的PDF的大小约为2.5倍

  • 原始pdf文件大小:60k
  • 最终PDF大小:14.7万

所以我问你,如何在保持OCR结果的同时减小生成的PDF的大小?

一种明显的解决方案是在生成tiff时降低分辨率,但是我不想这样做,因为它可能会影响OCR结果。

我尝试的第二件事是使用ghostscript减少了tesseract后的PDF大小:

gs -o sample-down-300.pdf   -sDEVICE=pdfwrite   -dDownsampleColorImages=true \
   -dDownsampleGrayImages=true   -dDownsampleMonoImages=true  \
   -dColorImageResolution=300   -dGrayImageResolution=300  \
   -dMonoImageResolution=300   -dColorImageDownsampleThreshold=1.0  \
   -dGrayImageDownsampleThreshold=1.5   -dMonoImageDownsampleThreshold=1.0 \
    sample-tess.pdf 
Run Code Online (Sandbox Code Playgroud)

这会有所帮助,生成的文件只有101K,因此约为原始文件的1.5倍。我可以接受,但它似乎也会影响OCR结果。例如,现在缺少“餐厅”和“比萨店”(第二行)之间的空白。

带有ghostscript的另一个(更简单)选项(使用ebook参数)导致PDF文件中的质量较差的43k文件,并且存在缺少空白的相同问题:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
    -dNOPAUSE -dBATCH  -dQUIET -sOutputFile=sample-ebook.pdf \
     sample-tess.pdf
Run Code Online (Sandbox Code Playgroud)

较低质量的PDF很好,但是我还是不想在OCR上妥协。

我已经使用PNG和JPEG完成了其他测试,但是OCR结果总是下降(甚至略有下降),并且结果PDF不会更小。例如,使用PNG:

convert -density 300 sample.pdf -transparent white sample.png
tesseract sample.png sample-tess-png -l fra -psm 1 pdf
Run Code Online (Sandbox Code Playgroud)

总数(55.50)丢失,最终PDF大小为149k。

总结一下,这是我的问题:

  • 有人可以解释为什么使用ghostscript减小PDF的大小会影响OCR结果吗?我以为文本层和图像层是独立的...
  • 当tesseract生成PDF时,是否可以提供一些选择来降低图像质量?
  • 我读到其他解决方案(例如ABBYY OCR)使用混合栅格化内容(MRC)来减小文件大小。tesseract已经做到了吗?如果没有,是否有一些开源或专有的CLI工具可以执行此操作,我可以使用这些工具来减少tesseract生成的PDF文件?

同样,只要用户可以搜索文本并选择要从PDF复制/粘贴的文本,我就可以妥协牺牲PDF图像的质量(尽管理想情况下我希望保留颜色)。

任何帮助,不胜感激!

Ken*_*enS 1

问题1,我看不到任何“附加”到此的文件,所以我在黑暗中猜测。

PDF 中没有“文本层”或“图像层”,PDF 可能有层,但它们是独立的。文本和图像“按原样”嵌入到文件中。当然,将 PDF 渲染为 TIFF 图像的结果确实会生成单个图像文件。

原始 PDF 将使用字体将文本存储为文本,而 TIFF 文件会将整个文本呈现为图像。我不确定 tesseract 到底是如何工作的,并且没有它的输出示例,我无法确定,但我希望它所做的是将渲染图像完整地保留在输出 PDF 文件中,并使用渲染模式 3 添加文本(两者都不是)描边或填充,即不可见)。这就是您上面所描述的“MCR”。

这对您来说意味着原始 PDF 很小,因为大部分(也许全部)内容都被描述为矢量数据。生成的 TIFF 文件很大,因为它是整页位图,使用矢量表示所节省的成本已经丢失。然后将其转换为 PDF(仍然很大),然后将更多文本和字体添加到文档中,这当然只会增加其大小。

实际上,唯一对该文件的大小产生重大影响的是减小位图图像(即用于创建最终输出 PDF 的 TIFF 文件)的大小。

在渲染为 TIFF 和 OCR 之前对原始 PDF 文件进行修改似乎不太可能对最终 PDF 文件大小产生任何影响(警告;压缩可能效果更好,因为可能有更多“平面”颜色区域)

如果没有看到原始文件和最终文件,我真的不能说更多,而且我无法自己测试它(我没有安装 Tesseract),但在我看来,唯一真正的解决方案是在创建最终输出 PDF 文件之前让 Tesseract 对图像进行下采样。