光学字符识别 - Optical Character Recognition#

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

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

如何对图像进行OCR#

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

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

文本可以使用常规的文本提取和搜索方法提取和搜索(Page.get_text()Page.search_for(),等)。请注意以下重要事实和前提条件:

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

  • 所有文本都以“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,通过 textpage=tp 参数。


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