我想在Mac上使用开源命令行工具对OCR进行批处理,大约5800 PDF (每个PDF包含上一个问题这里的2到6页之间)。这次冒险的主要建议是,我想从所有这些PDF的文本中检索尽可能可靠的名字(最重要的是姓氏)。这里就是一个如何看待问题的例子。
在这一点上,我不知道具体如何进行。你怎么做?
我想首先将所有多页PDF转换为单个页面映像,作为png、jpg或tif,并使用以下命令将与一个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年间,它们是用德语弗雷克图尔写的。对于tesseract来说,这种字体似乎特别具有挑战性。我的文本输出通常是加扰的,例如,在上面链接的文章中,我只能得到第一页检测到的791到801的对话。根据所选选项的不同,不确定有风险的名称。
最后,我将使用银搜索器查找所有5800 txt文件中的名称,我希望获得。
time rg -i search_term_here最后,如何确保我得到尽可能好的OCR输出,从而获得文本中的大多数名称?
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脚本文本清洁器 (为了提高可用性,我已经移到/usr/local/bin/上了)来稍微增强tesseract的输出:
time find . -name \*.jpg | parallel textcleaner -g -e stretch -f 25 -o 10 -u -s 1 -T -p 10 {} {}拟化分析:
time find . -name \*.jpg | parallel -j 8 “tesseract {} {.}.txt —tessdata-dir /usr/local/share/tessdata/ -l deu_frak”用银器搜索姓氏
time rg -t txt -i term发布于 2017-06-29 09:29:53
首先,如果您还没有安装自制,我建议您安装它--它是Mac的一个优秀的包管理器。
然后,我建议您安装Poppler包以获得pdfimages工具:
brew install poppler然后,您可以从这样的PDF中提取图像:
pdfimages SomeFile.pdf root您将得到名为root-000.ppm和root-001.ppm的文件,这两个文件可以很好地处理tesseract。或者,如果您需要PNG图像,可以添加-png。我会避免JPEG,因为有损压缩。
如果您能做到这一点,那么我建议您安装GNU并行,其中包括:
brew install parallel我们可以沿着直线平行地做OCR。
请只在一个小目录中尝试以下操作,其中包含5-6份原件。
我们还可以使用GNU并行并行提取图像,如下所示:
parallel 'mkdir {.} && pdfimages {} {.}/{.}' ::: *pdf至于使用弗雷德的textcleaner与GNU并行,以及想要覆盖JPEG,我想您会想要这样的东西:
find . -name \*.jpg | parallel textcleaner -g -e stretch -f 25 -o 10 -u -s 1 -T -p 10 {} {}https://stackoverflow.com/questions/44820673
复制相似问题