我的(网络)应用程序的设置如下:我得到用户上传的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大小: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


这会有所帮助,生成的文件只有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


较低质量的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)使用混合栅格化
内容(MRC)以减小文件大小。 tesseract会这样做吗
已经?如果没有,是否有一些开源或专有的CLI工具
这样做,我可以用来减少生成的tesseract PDF
文件?


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

任何帮助,不胜感激!

最佳答案

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

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

原始PDF将使用字体将文本存储为文本,TIFF文件将整个图像渲染为图像。我不确定tesseract的工作原理,如果没有输出示例,我不确定,但是我希望它能使输出的图像完整保留在输出PDF文件中,并使用渲染模式3添加文本(两者都不描边也不填充,即不可见)。这就是您上面所说的“ MCR”。

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

实际上,唯一可以改变该文件大小的是减小位图图像(即用于创建最终输出PDF的TIFF文件)的大小。

在渲染为TIFF和OCR之前先处理原始PDF文件似乎不太可能对最终PDF文件大小产生任何影响(凹腔;压缩可能会更好,因为可能会有更多的“平坦”颜色区域)

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

07-24 09:38
查看更多