我有几个低质量的pdf。我想使用 OCR——更准确地说是Ocropus 从他们那里获取文本。为了使用,我首先使用ImageMagick—— 一个将 pdf 转换为图像的命令行工具——将这些 pdf 转换为 jpg 或 png。
然而 ImageMagick 产生的图像质量非常低,而 Ocropus 几乎无法识别任何东西。我想了解处理低质量 pdf 以向 OCR 提供尽可能高质量的图像的最佳参数是什么。
我找到了这个页面,但我不知道从哪里开始。
我有几个低质量的pdf。我想使用 OCR——更准确地说是Ocropus 从他们那里获取文本。为了使用,我首先使用ImageMagick—— 一个将 pdf 转换为图像的命令行工具——将这些 pdf 转换为 jpg 或 png。
然而 ImageMagick 产生的图像质量非常低,而 Ocropus 几乎无法识别任何东西。我想了解处理低质量 pdf 以向 OCR 提供尽可能高质量的图像的最佳参数是什么。
我找到了这个页面,但我不知道从哪里开始。
您可以通过键入了解 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 到图像的转换,您首先应该知道两件事:
-density 600
告诉 Ghostscript 使用 600 dpi 分辨率进行图像输出的原因。PDF => PS
再转换,PS => PNG
实在是大错特错。因为你永远不会在第一步中获胜并且很难保持质量,但经常会失去一些。原因:
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
(这是 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”标签......
-density 600
左右应该给你你需要的东西。
您可能需要考虑至少两个其他工具:
pdfimages
,随包一起提供poppler-utils
,可以很容易地从 PDF 中提取图像而不会降级它们。pdfsandwich
,它可以通过简单地运行为您提供 OCR 文件pdfsandwich inputfile.pdf
。您可能需要调整选项以获得不错的结果。有关更多信息,请参见官方页面。