【问题标题】:Batch OCR of 5800+ PDF written in German Fraktur用德语 Fraktur 编写的 5800+ PDF 的批量 OCR
【发布时间】:2017-06-29 09:02:28
【问题描述】:

我想在 Mac 上使用开源命令行工具批量处理 OCR 大约 5800 个 PDF(每个问题由我上一个问题 here 的 2 到 6 页组成)。这次冒险的主要建议是,我想从所有这些PDF 的文本中检索尽可能可靠的名字(最重要的是姓氏)。 Here 是一个问题的示例。

在这一点上,我不知道该怎么做。你会怎么做?

我想首先将所有多页PDF 转换为pngjpgtif 的单页图像,然后将与一个PDF 相关的所有图像移动到带有以下命令:

time for i in *.pdf; do mkdir "${i%.pdf}"; convert -colorspace GRAY -resize 3000x -units PixelsPerInch  "$i" "${i%.pdf}.jpg”; mv *.jpg "${i%.pdf}"; done 

作为第二步,我的 OCR 脚本需要进入每个文件夹,发挥其魔力,然后离开它以便继续下一步。我不知道该怎么写。脚本的核心是:

tesseract --tessdata-dir /usr/local/share/tessdata/ --oem 3 --psm 11 -l deu_frak *.jpg test.txt 

PDF 代表旧报纸文章,从 1810 年到 1832 年几乎每天都在发表,它们是用德语写的 Fraktur。对于tesseract,这种字体似乎特别具有挑战性。我的文本输出通常是加扰的,例如。 G。在上面链接的文章中,我只会在第一页检测到 791 到 801 个变音符号。根据所选择的选项,名称可能不会被识别出来。

最后,我将使用silver searcher 在所有 5800 个 txt 文件中查找名称,我希望得到。

time rg -i search_term_here

最后,如何确保获得最佳的 OCR 输出,以便获得文本中的大部分 (sur) 名称?

P.S.:顺便问一下,tesseract 4 什么时候会出现在 Mac 和德国 Fraktur 训练数据上?

编辑:

这些是我用来实现我想要的命令的命令。 虽然 tesseract 的输出还有很大的提升空间。

将每个PDF 转换为jpg 并将它们移动到各自的文件夹以保持顺序:

time parallel -j 8 'mkdir {.} && convert {} -colorspace GRAY -resize 3000x -units PixelsPerInch {.}/{.}.jpg' ::: *.pdf

使用 Fred 的 ImageMagick 脚本 textcleaner(我已将其移至 /usr/local/bin/ 以提高可用性),以稍微增强 tesseract 输出:

time find . -name \*.jpg | parallel textcleaner -g -e stretch -f 25 -o 10 -u -s 1 -T -p 10 {} {}

并行化 tesseract 分析:

time find . -name \*.jpg | parallel -j 8 “tesseract {} {.}.txt —tessdata-dir /usr/local/share/tessdata/ -l deu_frak”

搜索带有the silver searcher的姓氏:

time rg -t txt -i term

【问题讨论】:

    标签: macos pdf imagemagick ocr tesseract


    【解决方案1】:

    首先,如果您还没有安装 homebrew,我建议您安装 - 它是 Mac 的出色软件包管理器。

    那么我建议你安装 Poppler 包来获取pdfimages 工具:

    brew install poppler
    

    然后您可以像这样从 PDF 中提取图像:

    pdfimages SomeFile.pdf root
    

    您将获得名为root-000.ppmroot-001.ppm 的文件,它们可以与tesseract 一起正常工作。或者,如果您想要 PNG 图像,可以添加 -png。由于有损压缩,我会避免使用 JPEG。

    如果你能做到这一点,那么我建议你安装 GNU Parallel

    brew install parallel
    

    我们可以并行处理 OCR。


    请仅在包含 5-6 份原件的小目录中尝试以下操作

    我们也可以像这样使用 GNU Parallel 并行提取图像:

    parallel 'mkdir {.} && pdfimages {} {.}/{.}' ::: *pdf
    

    关于将 Fred 的 textcleanerGNU Parallel 一起使用,并且想要覆盖 JPEG,我想你会想要这样的东西:

    find . -name \*.jpg | parallel textcleaner -g -e stretch -f 25 -o 10 -u -s 1 -T -p 10 {} {}
    

    【讨论】:

    • 嗨,马克,感谢您的回复。我刚刚安装了poppler和parallel。但是,我得到的 ppm 质量比我之前生成的 jpg、png、tif 的质量要长。仅检测到 360 个变音符号。
    • 我不明白“更长的质量” - soll daß eine schlechtere Qualität bedeuten, oder eine beßere?您是否调整了 PPM 的大小和灰度,使其在分辨率上与您使用 ImageMagick 生成的图像相当?
    • 对不起,马克,我的意思是低质量。我没有。 pdfimages 的选项是否相同,例如。 G。 -colorspace GRAY -resize 3000x -units PixelsPerInch?使用man pdf images这些选项不会被指明。
    • 嗨,马克,在执行您上面发布的parallel 命令后,我尝试更进一步并执行find . -name \*.jpg | parallel 'textcleaner {.} -g -e stretch -f 25 -o 10 -u -s 1 -T -p 10 {.}' ::: *.jpg。但是,parallel 在文件夹中找不到jpg。你知道如何调整我的parallel 命令,以便parallel 进入每个文件夹并用textcleaner 创建的那个覆盖现有的jpg?
    • 我尝试改进您的 parallel 命令 - 我认为您只需要来自 find 命令的 stdin 上的文件名,而不是在三个冒号之后。另外,我认为您需要 textcleaner before 输入文件和输出文件的所有选项作为 final 两个参数。
    猜你喜欢
    • 2011-08-26
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多