OCR - 光学字符识别#

PyMuPDF 集成了对 OCR(光学字符识别)的支持。可以使用 OCR 处理图像(通过 Pixmap 类)和文档页面。

该功能目前基于 Tesseract-OCR,必须作为单独应用程序安装 – 请参阅启用集成 OCR 支持

如何对图像进行 OCR#

支持的图像必须首先转换为 Pixmap。然后可以将 Pixmap 保存为 1 页的 PDF。此页面将看起来像原始图像,具有相同的宽度和高度。它将包含由 Tesseract 识别的文本层。

可以通过方法 Pixmap.pdfocr_save()Pixmap.pdfocr_tobytes() 生成 PDF,作为磁盘上的文件或内存中的 PDF。

可以使用标准的文本提取和搜索方法(Page.get_text()Page.search_for() 等)提取和搜索文本。另请注意以下重要事实和先决条件:

  • 将图像转换为 Pixmap 时,请确认颜色空间为 RGB,并且 alpha 为 False(无透明度)。如有必要,转换原始 Pixmap。

  • 所有文本都使用 Tesseract 自己的 GlyphLessFont(一种与 Courier 具有可比度量值的单间距字体)写入为“隐藏”。

  • 所有文本都具有常规和黑色属性(即,无粗体、无斜体、无关于原始字体的信息)。

  • Tesseract 不识别矢量图形(即,无绘图/线条艺术)。

此方法也建议用于 OCR 完整的扫描 PDF:

  • 将每页以所需分辨率渲染为 Pixmap

  • 将生成的 1 页 PDF 附加到输出 PDF

如何对文档页面进行 OCR#

可以对任何支持的文档页面进行 OCR – 无论是整个页面还是仅其上的图像区域。

因为光学字符识别比标准文本提取慢大约一千倍,所以我们确保每页只进行一次 OCR,并将结果存储在 TextPage 中。然后,使用此 TextPage 进行所有后续的提取和文本搜索将以 PyMuPDF 通常的最高速度发生。

要对文档页面进行 OCR,请遵循此方法:

  1. 确定是否根本需要/有益于 OCR。可以使用许多标准来进行此决定,例如:

  • 页面完全被图像覆盖

  • 页面上不存在文本

  • 成千上万的小矢量图形(表示模拟文本)

  1. 对页面进行 OCR 并使用指令(例如 tp = page.get_textpage_ocr(...))将结果存储在 TextPage 对象中。

  2. 在所有后续的文本提取和搜索中,通过 textpage=tp 参数引用生成的 TextPage


本软件按“原样”提供,不附带任何明示或暗示的担保。本软件根据许可协议分发,除非该许可协议的条款明确授权,否则不得复制、修改或分发。有关许可信息,请参阅 artifex.com 或联系 Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States 获取更多信息。