运行ImageMagick将低质量pdf转换为图像的最佳参数是什么(对于OCR)

Ska*_*rab 8 linux pdf imagemagick image-processing ghostscript

我有几个低质量的pdf.我想使用OCR - 更精确的Ocropus 从中获取文本.要使用,我首先使用ImageMagick - 一个命令行工具将pdf转换为图像 - 将这些pdf转换为jpg或png.

然而,ImageMagick会产生非常低质量的图像,而Ocropus几乎无法识别任何内容.我想了解处理低质量pdf的最佳参数是什么,以便为OCR提供尽可能高质量的图像.

我找到了这个页面,但我不知道从哪里开始.

Kur*_*fle 14

您可以通过键入来了解ImageMagick的"委托"(IM使用的外部程序,如Ghostscript)的详细设置

convert -list delegate
Run Code Online (Sandbox Code Playgroud)

(在我的系统上,这是一个包含32个不同命令的列表.)现在看看哪些命令用于转换为PNG,请使用:

convert -list delegate | findstr /i png
Run Code Online (Sandbox Code Playgroud)

好的,这是针对Windows的.您没有说明您使用的操作系统.[*]如果您使用的是Linux,请尝试以下操作:

convert -list delegate | grep -i png
Run Code Online (Sandbox Code Playgroud)

你会发现IM确实只从PS或EPS输入产生PNG.那么IM如何从你的PDF中获取(E)PS?简单:

convert -list delegate | findstr /i PDF
convert -list delegate | grep -i PDF
Run Code Online (Sandbox Code Playgroud)

啊! 它使用Ghostscript进行PDF => PS转换,然后再次使用Ghostscript进行PS => PNG转换.但是,如果您知道Ghostscript可以一次性执行PDF => PNG,则不是最有效的方法.更快.而且质量要好得多.

关于IM通过Ghostscript代表处理PDF到图像的转换,您首先要了解两件事:

  1. 默认情况下,如果您不提供额外参数,Ghostscript将输出分辨率为72dpi的图像.这就是为什么Karl的回答建议添加-density 600它,告诉Ghostscript使用600 dpi分辨率的图像输出.
  2. IM绕道两次调用Ghostscript PDF => PS然后转换然后PS => PNG是一个真正的错误.因为你从来没有赢过并且在第一步中保持质量,但经常会松一些.原因:
    • PDF可以处理透明胶片,而PostScript则无法处理.
    • PDF可以嵌入TrueType字体,Ghostscript不能.etc.pp. 转向方向PS => PDF并不重要....)

这就是为什么我建议您直接使用Ghostscript将PDF转换为PNG(或JPEG).并使用Ghostscript的最新版本8.71(即将发布:9.01)!以下是示例命令:

gswin32c.exe ^
  -sDEVICE=pngalpha ^
  -o output/page_%03d.png ^
  -r600 ^
  d:/path/to/your/input.pdf
Run Code Online (Sandbox Code Playgroud)

(这是Windows命令行.在Linux上,使用gs替代gswin32c.exe\取代^.)此命令期望找到一个output子目录,在那里将存储每个PDF页面创建一个单独的文件.要制作高质量的JPEG,请尝试

gs \
  -sDEVICE=jpeg \
  -o output/page_%03d.jpeg \
  -r600 \
  -dJPEGQ=95 \
  /path/to/your/input.pdf
Run Code Online (Sandbox Code Playgroud)

(Linux命令版本).这种直接转换避免了中间PostScript格式,这可能丢失了原始PDF文件中的TrueType字体和透明度对象的信息.


[*] D'哦!我最初错过了看到你的"linux"标签......


Kar*_*ldt 5

-density 600 或者应该给你你需要的东西.