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

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

【免费下载链接】

项目地址:

有一款超级强大的, 属开源类型的工具, 它可以把扫描而成的PDF文件, 转变为能够进行搜索, 还能够进行复制操作的文本PDF。对于那些有着许多PDF文件需要加以处理的用户来讲, 要是手动一个一个去处理, 效率是非常低的, 然而借助编写批处理脚本, 能够轻轻松松达成OCR任务的自动化效果。在本篇文章当中, 将会详细阐述怎样去使用那个批处理脚本, 用来帮助你迅速掌握自动化OCR处理的方法。

批处理脚本概述

项目给出了一个实用的批处理脚本示例, 其处于项目的misc/batch.py路径那儿。此脚本可以递归搜寻指定目录里的所有PDF文件, 并且对那些文件开展OCR处理。它还拥有日志记录的功能, 便于去追踪处理结果, 就算是已然含有文本的PDF文件, 脚本也能够智能检测而后跳过, 避免重复处理。

批处理脚本的核心功能 1. 递归搜索PDF文件

脚本会自指定的起始目录起始, 开展递归寻觅, 查找全部扩展名为.pdf的文件。这般的设计致使即便PDF文件嵌套于深层文件夹里, 也能够被精准找出并予以处理。

  1. 智能跳过已处理文件

借助检查PDF文件是不是已经含有文本或者是否属于PDF/A格式, 脚本能够凭借智能去判断是不是需要开展OCR处理。对于业已含有文本的文件而言, 脚本会径直跳过, 借以节省处理时间。

  1. 文件备份功能

支持脚本把原始的PDF文件备份到指定的用于归档的目录, 这一功能保证了在OCR处理期间, 原始文件不会遗失, 给数据安全作了保障。

  1. 详细日志记录

如开始处理时间、文件路径、以及处理结果等, 这些属于处理过程里的关键信息, 皆会被记录至日志文件中。日志文件默认就保存在脚本所处目录, 其文件名叫作ocr - tree.log。

批处理脚本的使用方法 基本使用步骤

把项目仓库进行克隆, 其一, 得把项目克隆至本地, 将终端打开, 执行如下这般的命令:

bash 复制代码
git clone https://gitcode.com/gh_mirrors/ocr/OCRmyPDF

进入项目目录 克隆完成后,进入项目目录:

bash 复制代码
cd OCRmyPDF

去运行批处理脚本, 去执行misc/batch.py这个脚本, 并将所要用来进行处理的那个目录给指定好, 好比说, 去处理处于当前目录之下放置着的所有PDF文件:

bash 复制代码
python3 misc/batch.py

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

bash 复制代码
python3 misc/batch.py /path/to/your/pdf/directory

自定义脚本参数

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

批处理脚本的代码解析 核心代码片段

将以下内容作为示例回答: 下面部分是misc文件夹里batch.py脚本之中的决定性代码片段,呈现出它主要功能达成情况:

python 复制代码
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文件, 接着检查文件里是否已然包含文本。要是需要处理, 若启用了该功能, 脚本会先开展文件备份, 之后调用.ocr函数来进行OCR处理。处理过程当中还针对各种异常情况实施了捕获以及处理, 像是加密PDF、已签名PDF之类的情况也包括在内。

OCR处理函数

其核心的用于光学字符识别处理的功能是由.ocr函数去实现的, 这个函数所处的位置是在src//api.py文件当中, 它的函数定义呈现如下:

python 复制代码
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处理的各个层面, 像是语言设定、图像分辨率、输出类别、优化等级等。在批处理脚本里,运用了=True参数, 开启了自动校正倾斜页面的功能, 提升了OCR识别的精确性。

实际应用场景示例 1. 数字化文档管理

对于存有大量需管理扫描文档的企业也好, 个人也罢, 运用批处理脚本能够很快地把全部扫描PDF转变为可用于搜索的文本PDF, 极大提升文档检索效率。举例来说, 对所有发票扫描件施行OCR处理之后, 便可借由关键词快捷找出特定发票。

  1. 学术资料处理

研究工作者时常得应对数量众多的学术论文扫描文档, 运用批处理脚本能够把这些扫描文档成批地转变为能够进行复制操作的文本格式的PDF。如此一来较便于去提取可供引用的内容, 以及制作相关笔记等等。

  1. 政府机构文档处理

供政府机构使用的大量纸质档案, 往往是需要进行数字化处理操作的。能自动化执行这一过程的或许是批处理脚本, 它能够把纸质档案扫描件转变成具备可搜索特性的电子文档, 同时还能转变成可实施索引操作的电子文档, 通过这种方式来提升档案管理的效率。

常见问题与解决方法 1. 脚本运行缓慢

若是在处理诸多PDF文件之际, 脚本运行着显得迟缓, 那么能够尝试下面这些优化方式:

  1. 部分PDF处理失败

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

  1. 日志文件过大

要是日志文件产生增长速度过快的情况, 能够定时清理日志文件或者去改动日志级别, 仅仅记录关键信息。在.函数里头, 把level参数设定为.或者.ERROR, 能够降低日志输出的数量。

总结

专为用户供给的批处理脚本, 是一种具备高效特性、自动化特质的OCR处理方案。经由本文的阐述, 你已然知悉了脚本的基本功能, 也知晓了其使用方法, 还了解了代码结构。不管是个人用户, 还是企业用户, 均可依照自身需求去定制此脚本, 并且予以扩展, 进而达成更多繁杂多样的OCR自动化任务。期望本文能够助力你更优地加以利用, 提升文档处理效率。

【免费下载链接】

项目地址:

相关推荐
进击的明明5 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
全栈弄潮儿6 小时前
Python实战第8期:函数
后端·python·编程语言
卷无止境7 小时前
暗流与破局:AI时代的代码安全审查工具全景指南
后端·python
卷无止境10 小时前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python
众壹新能源科技11 小时前
逆变器自带无功不够用,加装5MVar SVG后功率因数从0.85回到0.99
运维·人工智能·自动化
滴啦嘟啦哒12 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
全栈练习生12 小时前
AI安全与红队测试
python·ai
费曼学习法12 小时前
把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程
python·ai编程·自动化运维
鸽鸽程序猿12 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
NetX行者12 小时前
Python 工程化入门:从脚本到规范的 Python 项目结构
网络·python