【发布时间】:2013-09-20 12:11:37
【问题描述】:
我有一个用于 OCR PDF 文件的小 bash 脚本(稍微修改了this 脚本)。每个文件的基本流程是:
对于 pdf 文件中的每一页:
- 将页面转换为 TIFF 图像 (imegamagick)
- OCR 图像(正方体)
- 猫结果到文本文件
脚本:
FILES=/home/tgr/OCR/input/*.pdf
for f in $FILES
do
FILENAME=$(basename "$f")
ENDPAGE=$(pdfinfo $f | grep "^Pages: *[0-9]\+$" | sed 's/.* //')
OUTPUT="/home/tgr/OCR/output/${FILENAME%.*}.txt"
RESOLUTION=1400
touch $OUTPUT
for i in `seq 1 $ENDPAGE`; do
convert -monochrome -density $RESOLUTION $f\[$(($i - 1 ))\] page.tif
echo processing file $f, page $i
tesseract page.tif tempoutput -l ces
cat tempoutput.txt >> $OUTPUT
done
rm tempoutput.txt
rm page.tif
done
由于分辨率高且 tesseract 只能使用一个核心,这个过程非常缓慢(转换一个 PDF 文件大约需要 3 分钟)。
因为我有数千个 PDF 文件,我想我可以使用 parallel 来使用所有 4 个内核,但我不知道如何使用它。在examples 我看到了:
Nested for-loops like this:
(for x in `cat xlist` ; do
for y in `cat ylist` ; do
do_something $x $y
done
done) | process_output
can be written like this:
parallel do_something {1} {2} :::: xlist ylist | process_output
不幸的是,我无法弄清楚如何应用它。如何并行化我的脚本?
【问题讨论】:
标签: bash parallel-processing tesseract gnu-parallel