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,请遵循此方法:
确定是否根本需要/有益于 OCR。可以使用许多标准来进行此决定,例如:
页面完全被图像覆盖
页面上不存在文本
成千上万的小矢量图形(表示模拟文本)
对页面进行 OCR 并使用指令(例如
tp = page.get_textpage_ocr(...)
)将结果存储在 TextPage 对象中。在所有后续的文本提取和搜索中,通过
textpage=tp
参数引用生成的 TextPage。