我的(网络)应用程序的设置如下:我获取用户上传的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倍
所以我问你,如何在保持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图像的质量(尽管我想保留颜色,理想情况下),只要用户可以搜索文本并选择它来复制/粘贴PDF。
任何帮助都非常感谢!
答案 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]
答案 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中图像的质量。如果我是您的用户/客户之一,我认为我很高兴你给我的回复与我给你的不一样 - 这会使你的服务无用。