OCRmyPDF Docker 镜像
OCRmyPDF 也可以在 Docker 镜像中使用,这些镜像打包了所有依赖项的最新版本。
对于已经安装了 Docker 的用户来说,这可能是一个简单且方便的选择。
在非Linux平台上,Docker运行在虚拟机中,因此性能可能较低。您可能还需要调整Docker虚拟机的内存和CPU分配。在Linux上,Docker镜像本机运行,性能与系统安装相当。
安装Docker镜像
如果您的系统上安装了Docker,您可以安装最新版本的Docker镜像。
如果你能成功运行这个命令,你的系统已经准备好下载并执行镜像:
docker run hello-world
图像 |
架构 |
描述 |
---|---|---|
|
x86_64 和 arm64 |
推荐使用的镜像,基于 Alpine Linux。 |
|
x86_64 和 arm64 |
基于 Ubuntu 的替代镜像。当 Alpine 镜像被认为稳定并可用于 arm64 时,此镜像将被弃用。 |
|
x86_64 和 arm64 |
目前是 ocrmypdf-ubuntu 的别名。当 Alpine 镜像被认为稳定并且可用于 arm64 时,此名称将指向 Alpine 镜像。如果您不了解 Alpine 和 Ubuntu 之间的区别,请使用此镜像。 |
安装方法:
docker pull jbarlow83/ocrmypdf-alpine
ocrmypdf
镜像仍然可用,但已被弃用,并将在未来移除。
OCRmyPDF 将使用所有可用的 CPU 核心。如果您在 macOS 或 Windows 上使用 Docker,可能需要手动分配更多资源,请参阅 Docker 文档以了解在其他平台上调整内存和 CPU。在 Linux 上,所有资源将自动可用。
Docker 镜像中的底层操作系统和其他细节被视为实现细节,并且可能会在次要版本中发生变化。如果您正在修改镜像,您应该固定您打算使用的版本。
在命令行上使用Docker镜像
与典型的Docker容器不同,在本节中,OCRmyPDF Docker容器是临时的——它只为一个OCR任务运行并终止,就像命令行程序一样。我们使用Docker来交付一个应用程序(与更传统的情况相反,即Docker容器作为服务器运行)。因此,我们通常使用--rm
参数在容器退出时删除它。
启动一个Docker容器(镜像的实例):
docker tag jbarlow83/ocrmypdf-alpine ocrmypdf
docker run --rm -i ocrmypdf (... all other arguments here...) - -
为了方便起见,创建一个shell别名来隐藏Docker命令。将输入文件作为stdin发送并从stdout读取输出更容易——这完全避免了Docker的繁琐权限问题。
alias docker_ocrmypdf='docker run --rm -i ocrmypdf'
docker_ocrmypdf --version # runs docker version
docker_ocrmypdf - - <input.pdf >output.pdf
或者在美妙的 fish shell 中:
alias docker_ocrmypdf 'docker run --rm ocrmypdf'
funcsave docker_ocrmypdf
或者,您可以将本地当前工作目录挂载为 Docker 卷:
alias docker_ocrmypdf='docker run --rm -i --user "$(id -u):$(id -g)" --workdir /data -v "$PWD:/data" ocrmypdf'
docker_ocrmypdf /data/input.pdf /data/output.pdf
向Docker镜像添加语言
默认情况下,Docker 镜像包含英语、德语、简体中文、法语、葡萄牙语和西班牙语,这些是根据 OCRmyPDF 用户反馈最受欢迎的语言。您可以通过基于公共 Dockerfile 创建新的 Dockerfile 来添加其他语言。
FROM jbarlow83/ocrmypdf
# Example: add Italian
RUN apt install tesseract-ocr-ita
要安装语言包(训练数据),例如 tessdata_best 套件或 自定义数据,您首先需要确定 Tesseract 数据文件的版本,该版本 可能与 Tesseract 程序版本不同。使用以下命令确定数据 文件版本:
docker run -i --rm --entrypoint /bin/ls jbarlow83/ocrmypdf /usr/share/tesseract-ocr
截至2021年,数据文件版本可能是4.00
。
然后,您可以使用Dockerfile添加新数据:
FROM jbarlow83/ocrmypdf:{TAG}
# Example: add a tessdata_best file
COPY chi_tra_vert.traineddata /usr/share/tesseract-ocr/<data version>/tessdata/
在创建自己的镜像时,您应该始终固定OCRmyPDF Docker镜像的特定版本。这可以确保在OCRmyPDF发布新版本时,您的镜像不会出现问题。
或者,您可以按照以下方式将训练数据复制到Docker容器中:
docker cp mycustomtraining.traineddata name_of_container:/usr/share/tesseract-ocr/<tesseract version>/tessdata/
扩展Docker镜像
您可以扩展Docker镜像以添加自己的自定义内容,类似于扩展它以添加语言包的方式。
请注意,Docker镜像可能会随时更改。例如,基础镜像可能会更新到Ubuntu或Debian的较新版本。这些更改将在发布说明中注明,但可能会在次要版本发布时发生,除非Docker镜像的“普通”用户受到影响。
如果您扩展了Docker镜像,您应该固定OCRmyPDF Docker镜像的特定版本。
执行测试套件
OCRmyPDF 测试套件已与图像一起安装。要运行它:
docker run --rm --entrypoint python jbarlow83/ocrmypdf -m pytest
访问shell
要在Docker镜像中使用shell:
docker run -it --entrypoint sh jbarlow83/ocrmypdf
使用OCRmyPDF网络服务封装器
OCRmyPDF Docker 镜像包含一个示例的、基础的 HTTP 网络服务。该网络服务可以按如下方式启动:
docker run --entrypoint python -p 5000:5000 jbarlow83/ocrmypdf webservice.py
我们省略了--rm
参数,以便容器在退出时不会自动删除。
这将配置机器监听端口5000。在Linux机器上,这是本地主机的端口5000。在运行Docker的macOS或Windows机器上,这是运行Docker镜像的虚拟机的端口5000。您可以使用命令docker-machine ip
找到其IP地址。
与命令行使用不同,此程序将打开一个套接字并等待连接。
警告
OCRmyPDF 网络服务包装器旨在用于演示或开发。它不提供安全性、身份验证、防止拒绝服务攻击的保护或负载均衡。默认使用 Flask WSGI 服务器,该服务器仅用于开发。服务器是单线程的,因此一次只能响应一个客户端。在进行 OCR 时,它无法响应任何其他客户端。
客户端在等待OCR完成时必须保持其连接开放。这可能涉及设置较长的超时时间;此接口更适合内部HTTP API调用。
与OCRmyPDF的其他部分不同,此网络服务是根据Affero GPLv3(AGPLv3)许可的,因为Ghostscript也是以这种方式许可的。
除了上述内容外,请阅读我们的 关于将OCRmyPDF作为服务使用的一般说明。