ImageMagick转换低质量PDF以进行OCR的最佳参数是什么?

9
我有几个质量很差的pdf文件,想使用OCR技术——更确切地说是 Ocropus,从中获取文本。为此,我首先使用命令行工具ImageMagick将这些pdf转换成jpg或png格式的图像。

然而,ImageMagick生成的图像质量非常低,而Ocropus几乎无法识别任何内容。我想了解处理低质量pdf以提供尽可能好的图像给OCR所需的最佳参数。

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

3个回答

15

您可以通过输入命令来了解ImageMagick的“代理”(IM使用的外部程序,如Ghostscript)的详细设置。

convert -list delegate

(在我的系统上,这是32个不同命令的列表。)现在要查看用于转换为PNG的命令,请使用以下命令:

convert -list delegate | findstr /i png

好的,这是针对Windows的。你没有说你使用哪个操作系统。[*] 如果你使用Linux,请尝试以下方法:

convert -list delegate | grep -i png

你会发现IM只能从PS或EPS输入产生PNG。那么IM如何从你的PDF获取(E)PS呢?很简单:

convert -list delegate | findstr /i PDF
convert -list delegate | grep -i PDF

啊!它使用Ghostscript进行PDF => PS转换,然后再次使用Ghostscript进行PS => PNG转换。虽然可行,但不是最有效的方法,如果您知道Ghostscript可以一次完成PDF => PNG转换,并且更快,质量更好。 关于IM通过Ghostscript委托处理PDF转换为图像,您首先应该了解两件事:
  1. 默认情况下,如果您不提供额外参数,则Ghostscript将以72dpi的分辨率输出图像。这就是为什么Karl的答案建议添加-density 600,这告诉Ghostscript在其图像输出中使用600dpi的分辨率。
  2. IM调用Ghostscript两次进行转换首先是PDF => PS,然后是PS => PNG,这是一个真正的错误。因为在第一步中你几乎从来没有赢过并且很难保持质量,而经常会失去一些。原因:
    • PDF可以处理透明度,PostScript无法处理。
    • PDF可以嵌入TrueType字体,Ghostscript无法处理等等。 方向PS => PDF的转换并不那么重要....)

因此,我建议您使用Ghostscript直接将PDF一次性转换为PNG(或JPEG)。并且使用最新版本8.71(即将发布:9.01)的Ghostscript!以下是示例命令:

gswin32c.exe ^
  -sDEVICE=pngalpha ^
  -o output/page_%03d.png ^
  -r600 ^
  d:/path/to/your/input.pdf

(这是Windows的命令行。在Linux上,请使用gs而不是gswin32c.exe,并使用\而不是^。)此命令期望找到一个名为output的子目录,在其中它将存储每个PDF页面的单独文件。要生成质量良好的JPEG,请尝试

gs \
  -sDEVICE=jpeg \
  -o output/page_%03d.jpeg \
  -r600 \
  -dJPEGQ=95 \
  /path/to/your/input.pdf

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


[*] 哎呀!我一开始没看到你的“linux”标签...


6

-density 600左右可以满足您的需要。


0

至少还有两个工具值得考虑:

  • pdfimages,它随着poppler-utils软件包一起提供,可以轻松地从PDF中提取图像而不会降低其质量。
  • pdfsandwich,只需运行pdfsandwich inputfile.pdf即可为您提供OCR文件。您可能需要调整选项以获得良好的结果。请参阅官方页面获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接