OCRmyPDF批处理脚本:使用Python自动化复杂OCR任务
OCRmyPDF批处理脚本:使用Python自动化复杂OCR任务
【免费下载链接】OCRmyPDF 项目地址: https://gitcode.com/gh_mirrors/ocr/OCRmyPDF
OCRmyPDF是一款强大的开源工具,能将扫描的PDF文件转换为可搜索、可复制的文本PDF。对于需要处理大量PDF文件的用户来说,手动逐个处理效率低下,而利用Python编写批处理脚本可以轻松实现OCR任务的自动化。本文将详细介绍如何使用OCRmyPDF的批处理脚本,帮助你快速掌握自动化OCR处理的方法。
OCRmyPDF批处理脚本概述
OCRmyPDF项目提供了一个实用的批处理脚本示例,位于项目的misc/batch.py路径下。这个脚本能够递归搜索指定目录中的所有PDF文件,并对它们进行OCR处理。它还具备日志记录功能,方便追踪处理结果,即使是已经包含文本的PDF文件,脚本也能智能检测并跳过,避免重复处理。
批处理脚本的核心功能
1. 递归搜索PDF文件
脚本会从指定的起始目录开始,递归查找所有扩展名为.pdf的文件。这种设计使得即使PDF文件嵌套在深层文件夹中,也能被准确找到并处理。
2. 智能跳过已处理文件
通过检查PDF文件是否已包含文本或是否为PDF/A格式,脚本能够智能判断是否需要进行OCR处理。对于已经包含文本的文件,脚本会直接跳过,节省处理时间。
3. 文件备份功能
脚本支持将原始PDF文件备份到指定的归档目录。这一功能确保了在OCR处理过程中,原始文件不会丢失,为数据安全提供了保障。
4. 详细日志记录
处理过程中的关键信息,如开始处理时间、文件路径、处理结果等,都会被记录到日志文件中。日志文件默认保存在脚本所在目录,文件名为ocr-tree.log。
批处理脚本的使用方法
基本使用步骤
-
克隆项目仓库 首先,需要将OCRmyPDF项目克隆到本地。打开终端,执行以下命令:
git clone https://gitcode.com/gh_mirrors/ocr/OCRmyPDF -
进入项目目录 克隆完成后,进入项目目录:
cd OCRmyPDF -
运行批处理脚本 执行
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处理后,就可以通过关键词快速查找特定发票。
2. 学术资料处理
研究人员常常需要处理大量的学术论文扫描件。使用批处理脚本可以批量将这些扫描件转换为可复制的文本PDF,方便提取引用内容、制作笔记等。
3. 政府机构文档处理
政府机构通常有大量的纸质档案需要数字化。OCRmyPDF批处理脚本可以自动化这一过程,将纸质档案扫描件转换为可搜索、可索引的电子文档,提高档案管理效率。
常见问题与解决方法
1. 脚本运行缓慢
如果处理大量PDF文件时脚本运行缓慢,可以尝试以下优化方法:
- 减少并发任务数量:通过调整
jobs参数,控制同时处理的文件数量。 - 降低图像分辨率:使用
image_dpi参数降低处理时的图像分辨率。 - 关闭不必要的功能:如不需要去背景或自动旋转,可以将
remove_background和rotate_pages参数设置为False。
2. 部分PDF处理失败
如果某些PDF文件处理失败,可能的原因及解决方法:
- 加密PDF:脚本会自动跳过加密PDF文件。如果需要处理加密PDF,需先解密。
- 损坏PDF:尝试使用PDF修复工具修复损坏的PDF文件后再进行处理。
- 内存不足:对于超大PDF文件,可能会因内存不足导致处理失败。可以尝试增加系统内存或分批处理文件。
3. 日志文件过大
如果日志文件增长过快,可以定期清理日志文件或修改日志级别,只记录关键信息。在logging.basicConfig函数中,将level参数设置为logging.WARNING或logging.ERROR,可以减少日志输出量。
总结
OCRmyPDF批处理脚本为用户提供了一种高效、自动化的OCR处理方案。通过本文的介绍,你已经了解了脚本的基本功能、使用方法和代码结构。无论是个人用户还是企业用户,都可以根据自己的需求定制和扩展这个脚本,实现更多复杂的OCR自动化任务。希望本文能够帮助你更好地利用OCRmyPDF,提高文档处理效率。
【免费下载链接】OCRmyPDF 项目地址: https://gitcode.com/gh_mirrors/ocr/OCRmyPDF
更多推荐




所有评论(0)