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自动化任务。期望本文能够助力你更优地加以利用, 提升文档处理效率。

【免费下载链接】

项目地址:

相关推荐
特立独行的猫A9 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
cpolar技术支持10 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证
python·内网穿透·tcp·cpolar·网络诊断
云和数据.ChenGuang10 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
天诰11 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
benchmark_cc12 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
羲云网络15 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
橙橙笔记19 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事19 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
天天被压力21 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力21 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python