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