使用 GNU Parallel 组合两个命令用于 OCR 项目

2023-12-06

我想编写一个运行命令的脚本OCRpdfs,在写入文本文件后删除生成的图像。

我想要组合的两个命令如下。

该命令创建文件夹,解压pgm从每个PDF并将它们添加到每个文件夹中:

time find . -name \*.pdf | parallel -j 4 --progress 'mkdir -p {.} && gs -dQUIET -dINTERPOLATE -dSAFER -dBATCH -dNOPAUSE -dPDFSETTINGS=/screen -dNumRenderingThreads=4 -sDEVICE=pgmraw -r300 -dTextAlphaBits=4 -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -o {.}/{.}-%03d.pgm {}'

此命令执行 OCR 并删除生成的图像 (pgm):

time find . -name \*.pgm | parallel -j 4 --progress 'tesseract {} {.} -l deu_frak && rm {.}.pgm'

我想组合这两个命令,以便脚本删除pgm每次 OCR 后的图像。如果我运行上述命令,第一个命令将提取图像并耗尽我的磁盘空间,然后第二个命令将执行 OCR,只有在这之后才删除图像作为最后一步。

So,

  1. 创建文件夹
  2. 从 PDF 中提取 PGM
  3. OCR 从 PGM 到 txt
  4. 删除刚刚使用过的PGM图像(丢失)

基本上,我希望每个步骤都按此顺序完成PDF分开并不适合所有人PDF立刻。我怎样才能做到这一点?

Edit:

我解决问题的第一次尝试是创建以下命令:

time find . -name \*.pdf | parallel -j 4 -m --progress --eta 'mkdir -p {.} && gs -dQUIET -dINTERPOLATE -dSAFER -dBATCH -dNOPAUSE -dPDFSETTINGS=/screen -dNumRenderingThreads=4 -sDEVICE=pgmraw -r300 -dTextAlphaBits=4 -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -o {.}/{.}-%03d.pgm {}' && time find . -name \*.pgm | parallel -j 4 --progress --eta 'tesseract {} {.} -l deu_frak && rm {.}.pgm'

但是,tesseract 找不到语言包。


更新答案

我还没有测试过这个,请在copy文件的一小部分。您可以使用以下命令关闭消息DEBUG:一开始,如果你很高兴,它看起来不错:

#!/bin/bash

# Declare a function for "parallel" to call
doit() {
    # Get name of PDF with and without extension
    withext="$1"
    noext="$2"
    echo "DEBUG: Processing $withext into $noext"

    # Make output directory
    mkdir -p "$noext"

    # Extract as PGM into subdirectory
    gs ... -o "$noext"/"${noext}-%03d.pgm $withext"

    # Go to target directory or die with error message
    cd "$noext" || { echo ERROR: Failed to cd to $noext ; exit 1; }

    # OCR and remove each PGM 
    n=0
    for f in *pgm; do
       echo "DEBUG: OCR $f into $n"
       tesseract "$f" "$n" -l deu_frak
       echo "DEBUG: Remove $f"
       rm "$f"
       ((n=n+1))
    done 
}

# Ensure the function is exported to subshells
export -f doit

find . -name \*.pdf -print0 | parallel -0 doit {} {.}

您应该能够测试doit()功能无parallel通过运行:

doit someFile.pdf someFile

原答案

如果你想为每个参数做很多事情GNU 并行,最简单的方法是声明一个bash函数,然后调用它。

它看起来像这样:

# Declare a function for "parallel" to call
doit() {
    echo "$1" "$2"
    # mkdir something
    # extract PGM
    # do OCR
    # delete PGM
}

# Ensure the function is exported to subshells
export -f doit

find some files -print0 | parallel -0 doit {} {.}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GNU Parallel 组合两个命令用于 OCR 项目 的相关文章

  • 如何从图像生成 tiff/box 文件以在 Windows 中训练 Tesseract

    我正在尝试在 Windows 中训练 Tesseract 为此我需要一对 tiff box 文件 并且我正在尝试使用 jTessBoxEditor 创建它 但它不接受图像作为输入 我也尝试过 boxFactory 但它无法正常运行 有谁知道
  • 在Tomcat中设置环境变量TESSDATA_PREFIX

    我们正在使用名为 Tess4J 的 Tesseract OCR Java 库 如果作为独立应用程序运行 它可以正常工作 它需要一个名为 TESSDATA PREFIX 的变量 其中包含 tessdata 配置和其他字符集相关文件 它也可以与
  • 并行 Haskell - GHC GC 火花

    我有一个正在尝试并行化的程序 带有可运行代码的完整粘贴here http lpaste net 101528 我进行了分析 发现大部分时间都花在findNearest这本质上是一个简单的foldr超过一个大Data Map findNear
  • 报告实验室性能低下

    我在用着报告实验室将一些大型图书馆 俄语纯文本 转换为 pdf 格式 当原始文件足够小 例如 大约 10 50 kB 时 它可以正常工作 但是 如果我尝试转换大文本 超过 500kB 则需要花费大量时间来进行报告实验室 有谁知道可能是什么问
  • tbb:并行查找第一个元素

    我遇到了这个问题 查找列表中满足给定条件的第一个元素 不幸的是 该列表相当长 100 000 个元素 并且使用单个线程评估每个元素的条件总共需要大约 30 秒 有没有办法干净地并行化这个问题 我浏览了所有tbb模式 但找不到任何合适的 UP
  • 如何将二维数组作为 multiprocessing.Array 传递给 multiprocessing.Pool?

    我的目标是将父数组传递给mp Pool并填充它2s 同时将其分发到不同的进程 这适用于一维数组 import numpy as np import multiprocessing as mp import itertools def wor
  • 在 iOS 中,如何以编程方式填写 pdf 表单字段?

    我需要获取一个现有的 pdf 文件 并以编程方式填写带有文本的表单字段列表 然后保存 pdf 而不将其显示给用户 例如 如果 pdf 文件包含名为 LastName 和 FirstName 的字段 我想将 FirstName 的值设置为 L
  • Swift Siesta 访问响应原始数据

    我的 API 中有一个返回 PDF 文件内容的方法 如何在成功回调中获取响应的原始数据 所有午睡响应均以原始数据开始 以基础类型的形式Data 然后运行变压器管道 http bustoutsolutions github io siesta
  • 如何为 Android 创建我们自己的 PDF 查看器?

    我想构建一个可在我的 Android 应用程序中使用的 PDF 阅读器 查看器 但我无法使用 Google 文档来阅读我的内容 我无法使用我的设备中已安装的任何 PDF 阅读器 它应该位于我的应用程序内 并且不会通过互联网公开我的安全内容
  • 如何从纯文本文件中解析文本并使用结果突出显示 PDF 文件

    早在 2010 年 就有人声称能够做到这一点 http www mobileread com forums showthread php t 103847 http www mobileread com forums showthread
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • 裁剪 .pdf 文件的页面

    我想知道是否有人有以编程方式处理 pdf 文件的经验 我有一个 pdf 文件 我需要将每一页裁剪到一定大小 经过快速谷歌搜索后 我找到了 python 的 pyPdf 库 但我的实验失败了 当我更改页面对象上的cropBox 和trimBo
  • Eclipse PTP:在本地计算机上运行并行(MPI)应用程序?

    必须如何配置 eclipse PTP 才能在本地计算机上使用 OpenMPI 运行 MPI 应用程序 使用 添加资源管理器 我可以选择 OpenMPI 并在 连接名称 中切换到本地主机 但仍然要求我提供一些用户名和密码 这是正确的方法吗 D
  • 在 Rails 中强制内联渲染 PDF 文档

    我正在编写一个从一组 XML 文件生成 PDF 文件的服务 正在正确生成 PDF 但是 每次我单击 查看 PDF 链接时 浏览器都会要求用户下载 PDF 文件 我需要 PDF 内联显示 就像任何常规 HTML 页面一样 我虽然我写的代码是正
  • 数字签名(PKCS#7 - 延迟签名)/自应用签名以来文档已被更改或损坏

    我已经浏览了所有类似的问题 但找不到应用 itextsharp 延迟签名的情况 基本上 我的应用程序使用以下方式签署 pdf 文档PKCS 7由远程 Web 服务创建的签名 我的应用程序向此 Web 服务发送原始文档的哈希值 添加空签名字段
  • 从 puppeteer PDF 中删除分页符?

    我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
  • 一起使用 R6 类和 foreach() %dopar% 的问题

    当与 foreach 一起使用时 我在 R6 类上遇到问题 可能与环境有关 我使用的是 Windows 假设有两个 R6 类 class1 和 class2 class1 中的 method1 依赖于 class2 例如 请参见下面的示例代
  • 如何使用python从文件夹中的pdf中提取文本并将其保存在数据框中?

    我有很多文件夹 每个文件夹都有几个 pdf 文件 也有其他文件类型 如 xlsx 或 doc 我的目标是提取每个文件夹的pdf文本并创建一个数据框 其中每条记录都是 文件夹名称 每列以字符串形式表示该文件夹中每个pdf文件的文本内容 我设法
  • 在 iOS 上将 SwiftUI 视图转换为 PDF

    我用 SwiftUI 画了一些漂亮的图表 因为它非常简单且容易做 然后我想将整个 SwiftUI 视图导出为 PDF 以便其他人可以以良好的方式查看图表 SwiftUI 没有直接为此提供解决方案 Cheers Alex 经过一番思考 我想到

随机推荐