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

时间:2014-11-06 08:57:48

标签: pdf pdf-generation ocr 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

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

  • 原始pdf文件的大小:60k
  • 最终pdf的大小:147K

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

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

我尝试的第二件事是使用ghostscript减少后尺寸的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 

这有点帮助,生成的文件只有101K,所以大约是原来的1.5倍。我可以忍受这一点,但它似乎也影响了OCR结果。例如,“RESTAURANT”和“PIZZERIA”(第二行)之间的空白区域现在已丢失。

使用电子书参数的ghostscript的另一个(更简单的)选项会导致一个43k的文件,其中PDF质量较差,并且缺少相同的白色空间问题:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
    -dNOPAUSE -dBATCH  -dQUIET -sOutputFile=sample-ebook.pdf \
     sample-tess.pdf

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

缺少总数(55.50),最终PDF大小为149k。

总而言之,以下是我的问题:

  • 有人可以解释为什么使用缩小PDF的大小 ghostscript影响OCR结果?我以为文字层和 图像层是独立的......
  • 是否有人可以提供的选项 tesseract在生成图像时降低图像的质量 PDF?
  • 我读过像ABBYY OCR这样的其他解决方案使用Mixed Rasterized 内容(MRC)减少文件大小。 tesseract是否这样做 已经?如果没有,是否有一些开源或专有的CLI工具 这样做,我可以用它来减少tesseract生成的PDF 文件?

再一次,我很好地妥协PDF图像的质量(尽管我想保留颜色,理想情况下),只要用户可以搜索文本并选择它来复制/粘贴PDF。

任何帮助都非常感谢!

3 个答案:

答案 0 :(得分:1)

问题1,我看不到任何文件附件'对此,所以我在黑暗中猜测。

没有'文字图层'或者'图像层'在PDF中,PDF可能有层次但是它是独立的。文本和图像嵌入在文件中,原样是'。当然,将PDF渲染为TIFF图像的结果确实产生了单个图像文件。

原始PDF将文本存储为文本,使用字体,TIFF文件将整批渲染为图像。我不确定tesseract究竟是如何工作的,如果没有它的输出示例我无法确定,但我希望它的作用是将渲染图像保留在输出PDF文件中,并使用渲染模式3添加文本(既不是中风也不是填充,即不可见)。这就是你所描述的' MCR'上方。

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

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

在渲染到TIFF和OCR之前弄乱原始PDF文件似乎不太可能使与最终PDF文件大小有任何差异(警告;压缩可能会更好,因为可能有更多区域的&# 39;平坦的颜色)

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

答案 1 :(得分:1)

由于您使用Tesseract 3.04,它支持您可能想要检查的各种压缩模式。

  --force-transcode=[true|false]
  --force-lossless=[true|false]
  --force-compression-algorithms=[dct|flate|g4|lzw|jpx|jbig2]

问题12851300

答案 2 :(得分:-1)

首先,Tesseract是一个OCR引擎。您不能指望优化OCR以外的任何功能。它很好地进行OCR,而不是其他的东西。它确实做了其他的事情,例如,如果没有已经阈值处理(使用Otsu方法),它会为您提供的任何图像设置阈值,但是通过先自己对图像进行阈值处理然后将其传递给Tesseract,您会得到更好的结果,假设您对此有所了解你在给它什么。

这些都不是Tesseract问题。空白变化的原因是由于PDF查看器在字/行空间处猜测,因为它们没有被编码。如果文本相同且间距受到干扰,则完全是PDF查看器问题。它在PDF之间切换的原因是因为您正在更改分辨率/画布大小并且会干扰PDF查看器的单词/行间距计算。要进行比较,您可以查看Adobe Acrobat中任何页面的内容对象,它位于Preflight |下选项|浏览内部PDF结构。

我要问的第一个问题是为什么PDF中的图像会被修改?当然它们不应该是,它们应该与你开始时完全相同的图像,只是文本层(是文本层,它是文本,它在图像=文本层上分层)无形地插入到顶部。您可以使用“浏览内部PDF结构”(或记事本)来查看任何图像对象的大小,并查看它们是否大小相同。如果不是,您想要阻止它们被更改,或者您想要保存它们,然后在最终的PDF中替换它们。

否则,文本可能不会被压缩。 PDF支持Deflate。毫无疑问,Ghostscript或PDFTK中有一个设置来压缩所有内容对象。

您当然不必降低PDF中图像的质量。如果我是您的用户/客户之一,我认为我很高兴你给我的回复与我给你的不一样 - 这会使你的服务无用。

相关问题