OCRmyPDF批处理脚本:使用Python自动化复杂OCR任务

【免费下载链接】OCRmyPDF 【免费下载链接】OCRmyPDF 项目地址: https://gitcode.com/gh_mirrors/ocr/OCRmyPDF

OCRmyPDF是一款强大的开源工具,能将扫描的PDF文件转换为可搜索、可复制的文本PDF。对于需要处理大量PDF文件的用户来说,手动逐个处理效率低下,而利用Python编写批处理脚本可以轻松实现OCR任务的自动化。本文将详细介绍如何使用OCRmyPDF的批处理脚本,帮助你快速掌握自动化OCR处理的方法。

OCRmyPDF批处理脚本概述

OCRmyPDF项目提供了一个实用的批处理脚本示例,位于项目的misc/batch.py路径下。这个脚本能够递归搜索指定目录中的所有PDF文件,并对它们进行OCR处理。它还具备日志记录功能,方便追踪处理结果,即使是已经包含文本的PDF文件,脚本也能智能检测并跳过,避免重复处理。

OCRmyPDF批处理脚本工作流程示意图

批处理脚本的核心功能

1. 递归搜索PDF文件

脚本会从指定的起始目录开始,递归查找所有扩展名为.pdf的文件。这种设计使得即使PDF文件嵌套在深层文件夹中,也能被准确找到并处理。

2. 智能跳过已处理文件

通过检查PDF文件是否已包含文本或是否为PDF/A格式,脚本能够智能判断是否需要进行OCR处理。对于已经包含文本的文件,脚本会直接跳过,节省处理时间。

3. 文件备份功能

脚本支持将原始PDF文件备份到指定的归档目录。这一功能确保了在OCR处理过程中,原始文件不会丢失,为数据安全提供了保障。

4. 详细日志记录

处理过程中的关键信息,如开始处理时间、文件路径、处理结果等,都会被记录到日志文件中。日志文件默认保存在脚本所在目录,文件名为ocr-tree.log

批处理脚本的使用方法

基本使用步骤

  1. 克隆项目仓库 首先,需要将OCRmyPDF项目克隆到本地。打开终端,执行以下命令:

    git clone https://gitcode.com/gh_mirrors/ocr/OCRmyPDF
    
  2. 进入项目目录 克隆完成后,进入项目目录:

    cd OCRmyPDF
    
  3. 运行批处理脚本 执行misc/batch.py脚本,并指定要处理的目录。例如,处理当前目录下的所有PDF文件:

    python3 misc/batch.py
    

    如果要处理其他目录,可以将目录路径作为参数传递:

    python3 misc/batch.py /path/to/your/pdf/directory
    

自定义脚本参数

批处理脚本提供了一些可自定义的参数,以满足不同的需求:

  • 归档目录设置:在脚本中,archive_dir变量用于指定原始文件的备份目录。默认值为/pdfbak,你可以根据需要修改为其他路径。如果不需要备份功能,将其设置为空字符串即可。

  • 日志文件路径:日志文件的默认路径为脚本所在目录下的ocr-tree.log。如果需要更改日志文件路径,可以在运行脚本时将路径作为第二个参数传递:

    python3 misc/batch.py /path/to/pdf/directory /path/to/logfile.log
    

批处理脚本的代码解析

核心代码片段

以下是misc/batch.py脚本中的核心代码片段,展示了其主要功能实现:

for filename in start_dir.glob("**/*.pdf"):
    logging.info(f"Processing {filename}")
    if ocrmypdf.pdfa.file_claims_pdfa(filename)["pass"]:
        logging.info("Skipped document because it already contained text")
    else:
        # 归档原始文件
        # ...
        try:
            result = ocrmypdf.ocr(filename, filename, deskew=True)
            logging.info(result)
        except ocrmypdf.exceptions.EncryptedPdfError:
            logging.info("Skipped document because it is encrypted")
        # 其他异常处理...

这段代码首先使用glob方法递归查找所有PDF文件,然后检查文件是否已包含文本。如果需要处理,脚本会先进行文件备份(如果启用了该功能),然后调用ocrmypdf.ocr函数进行OCR处理。处理过程中还对各种异常情况进行了捕获和处理,如加密PDF、已签名PDF等。

OCR处理函数

OCRmyPDF的核心OCR处理功能由ocrmypdf.ocr函数实现,该函数位于src/ocrmypdf/api.py文件中。其函数定义如下:

def ocr(  # noqa: D417
    input_file: str | Path,
    output_file: str | Path,
    language: str | Sequence[str] = "eng",
    image_dpi: int | None = None,
    output_type: str | None = None,
    sidecar: str | Path | None = None,
    jobs: int | None = None,
    use_threads: bool = True,
    title: str | None = None,
    author: str | None = None,
    subject: str | None = None,
    keywords: str | None = None,
    rotate_pages: bool = False,
    remove_background: bool = False,
    deskew: bool = False,
    clean: bool = False,
    clean_final: bool = False,
    unpaper_args: str | None = None,
    oversample: int | None = None,
    threshold: bool = False,
    force_ocr: bool = False,
    skip_text: bool = False,
    redo_ocr: bool = False,
    skip_big: int | None = None,
    optimize: int | None = 3,
    jpg_quality: int = 95,
    png_quality: int | None = None,
    jbig2_lossy: bool = False,
    jbig2_page_group_size: int = 0,
    tesseract_config: Sequence[str] = (),
    tesseract_pagesegmode: int | None = None,
    tesseract_oem: int | None = None,
    pdf_renderer: str = "hocr",
    tesseract_env: dict[str, str] | None = None,
    user_words: str | Path | None = None,
    user_patterns: str | Path | None = None,
    fast_web_view: bool = False,
    keep_temporary_files: bool = False,
    progress_bar: bool = True,
    plugin: Sequence[str] = (),
    max_image_mpixels: float = 24.0,
    pdfa_image_compression: str | None = None,
    pdfa_compression: str | None = None,
    fallback_language: str = "eng",
    check_input: bool = True,
    write_metadata: bool = True,
    continue_on_soft_render_error: bool = False,
    jbig2_options: str | None = None,
    qpdf_args: Sequence[str] = (),
) -> str:

该函数提供了丰富的参数,可用于控制OCR处理的各个方面,如语言设置、图像分辨率、输出类型、优化级别等。在批处理脚本中,使用了deskew=True参数,启用了自动校正倾斜页面的功能,提高OCR识别的准确性。

实际应用场景示例

1. 数字化文档管理

对于需要管理大量扫描文档的企业或个人,使用OCRmyPDF批处理脚本可以快速将所有扫描PDF转换为可搜索的文本PDF,大大提高文档检索效率。例如,将所有发票扫描件进行OCR处理后,就可以通过关键词快速查找特定发票。

OCR处理前的扫描文档示例

2. 学术资料处理

研究人员常常需要处理大量的学术论文扫描件。使用批处理脚本可以批量将这些扫描件转换为可复制的文本PDF,方便提取引用内容、制作笔记等。

3. 政府机构文档处理

政府机构通常有大量的纸质档案需要数字化。OCRmyPDF批处理脚本可以自动化这一过程,将纸质档案扫描件转换为可搜索、可索引的电子文档,提高档案管理效率。

常见问题与解决方法

1. 脚本运行缓慢

如果处理大量PDF文件时脚本运行缓慢,可以尝试以下优化方法:

  • 减少并发任务数量:通过调整jobs参数,控制同时处理的文件数量。
  • 降低图像分辨率:使用image_dpi参数降低处理时的图像分辨率。
  • 关闭不必要的功能:如不需要去背景或自动旋转,可以将remove_backgroundrotate_pages参数设置为False

2. 部分PDF处理失败

如果某些PDF文件处理失败,可能的原因及解决方法:

  • 加密PDF:脚本会自动跳过加密PDF文件。如果需要处理加密PDF,需先解密。
  • 损坏PDF:尝试使用PDF修复工具修复损坏的PDF文件后再进行处理。
  • 内存不足:对于超大PDF文件,可能会因内存不足导致处理失败。可以尝试增加系统内存或分批处理文件。

3. 日志文件过大

如果日志文件增长过快,可以定期清理日志文件或修改日志级别,只记录关键信息。在logging.basicConfig函数中,将level参数设置为logging.WARNINGlogging.ERROR,可以减少日志输出量。

总结

OCRmyPDF批处理脚本为用户提供了一种高效、自动化的OCR处理方案。通过本文的介绍,你已经了解了脚本的基本功能、使用方法和代码结构。无论是个人用户还是企业用户,都可以根据自己的需求定制和扩展这个脚本,实现更多复杂的OCR自动化任务。希望本文能够帮助你更好地利用OCRmyPDF,提高文档处理效率。

【免费下载链接】OCRmyPDF 【免费下载链接】OCRmyPDF 项目地址: https://gitcode.com/gh_mirrors/ocr/OCRmyPDF

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐