我有一个 OCR PDF 文件的小 bash 脚本(稍微修改了这个脚本)。每个文件的基本流程是:
对于 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 个内核,但我不知道如何使用它。在我看到的例子中:
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
不幸的是,我无法弄清楚如何应用它。如何并行化我的脚本?