OCRmyPDF让你能搜索扫描版PDF文档

2023-12-09 18:01

本文主要是介绍OCRmyPDF让你能搜索扫描版PDF文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

什么是 OCRmyPDF ?

PDF 是存储和交换扫描文档的最佳格式。不幸的是,PDF 可能很难修改。OCRmyPDF 是一个 Python 应用程序和库,可以轻松地将图像处理和 OCR(可识别、可搜索的文本)应用于现有 PDF,通过向扫描的 PDF 文件添加 OCR 文本层,使你可以搜索或复制粘贴它们。

镜像下载

在群晖上以 Docker 方式安装。

在注册表中搜索 ocrmypdf ,选择第一个 jbarlow83/ocrmypdf,版本选择 latest

本文写作时, latest 版本对应为 v15.4.2

在这里插入图片描述

你也可以使用命令行,用 SSH 客户端登录到群晖后,依次执行下面的命令

# 拉取镜像
docker pull jbarlow83/ocrmypdf:latest

如果拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

# 如果拉不动的话加个代理
docker pull dockerproxy.com/jbarlow83/ocrmypdf:latest# 重命名镜像(如果是通过代理下载的)
docker tag dockerproxy.com/jbarlow83/ocrmypdf:latest jbarlow83/ocrmypdf:latest# 删除代理镜像(如果是通过代理下载的)
docker rmi dockerproxy.com/jbarlow83/ocrmypdf:latest

下载完成后,可以在 映像 中找到

在这里插入图片描述

准备工作

【说明】:

  1. 与典型的 Docker 容器不同,OCRmyPDF Docker 容器是短暂的,它为一个 OCR 作业运行并终止,就像命令行程序一样。因此,我们通常使用 --rm 参数在容器退出时将其删除。
  2. 默认情况下,Docker 镜像包括英语、德语、简体中文、法语、葡萄牙语和西班牙语,所以中文用户不需要添加语言包。

docker 文件夹中,创建一个新文件夹 ocrmypdf

# 新建文件夹 ocrmypdf 
mkdir -p /volume1/docker/ocrmypdf# 进入 ocrmypdf 目录
cd /volume1/docker/ocrmypdf

准备一个文档用于测试,这是网页上打印生成的 pdf 文件,直接搜索 sam 是没有 没有匹配项

在这里插入图片描述

将这个文档放入 ocrmypdf,命名为 input.pdf

在这里插入图片描述

测试验证

为了方便起见,创建一个 shell 别名来隐藏 Docker 命令。通过使用 alias 命令,为长或复杂的命令创建简短且易记的别名,以便更快地执行常用操作或减少输入的工作量

# 创建别名
alias docker_ocrmypdf='docker run --rm  -i --user "$(id -u):$(id -g)" --workdir /data -v "$PWD:/data" jbarlow83/ocrmypdf:latest'# 运行 OCR
docker_ocrmypdf /data/input.pdf /data/output.pdf

其中:

  • -- rm:表示在容器退出时,会将其删除;
  • --user "$(id -u):$(id -g)":用于指定在容器内运行的用户和组,确保容器内的进程以与宿主机相同的用户权限运行,以防止权限问题;
  • --workdir /data:指定容器内的工作目录;
  • -v "$PWD:/data":将 /volume1/docker/ocrmypdf 映射到了容器内的 /data

在这里插入图片描述

运行完成后,会在 ocrmypdf 中看到多出了一个文件 output.pdf

在这里插入图片描述

下载到本地后,用 pdf 阅读器打开后,继续搜索 sam 显示有 2 处匹配

在这里插入图片描述

第二处

在这里插入图片描述

OCRmyPDF 不仅提供了基本的 OCR 功能,还包括一些高级功能,如自动旋转、自动裁剪、去除文本阴影、增强图像质量等。它使用了一些优秀的开源工具和库,如 Tesseract OCR 引擎、GhostscriptImageMagick,以提供强大的 OCRPDF处理功能,当然,OCRmyPDF 无法打开使用数字证书加密的文档。

参考文档

ocrmypdf/OCRmyPDF: OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched
地址:https://github.com/ocrmypdf/OCRmyPDF

OCRmyPDF documentation
地址:https://ocrmypdf.readthedocs.io

jbarlow83/ocrmypdf - Docker Image | Docker Hub
地址:https://hub.docker.com/r/jbarlow83/ocrmypdf

这篇关于OCRmyPDF让你能搜索扫描版PDF文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/474605

相关文章

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

SpringBoot3集成swagger文档的使用方法

《SpringBoot3集成swagger文档的使用方法》本文介绍了Swagger的诞生背景、主要功能以及如何在SpringBoot3中集成Swagger文档,Swagger可以帮助自动生成API文档... 目录一、前言1. API 文档自动生成2. 交互式 API 测试3. API 设计和开发协作二、使用

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc