如何通过同时执行自动化文件转换?

How to automate file transformation with simultanous execution?

我正在努力将大量图像文件 (png) 转换为文本文件。我有基本的代码可以一一完成,这真的很耗时。我的过程涉及将图像文件转换为黑白格式,然后使用 tesseract 将其转换为文本文件。这个过程效果很好,但如果一个文件一个文件地完成,我需要几天时间才能完成我的任务。 这是我的代码:

for f in 
do
 echo "Processing $f file..."
 convert $f -resample 200 -colorspace Gray ${f%.*}BW.png
 echo "OCR'ing $f"
 tesseract ${f.*}BW.png ${f%.*} -l tla -psm 6
 echo "Removing black and white for $f"
 rn ${f%.*}BW.png
done
echo "Done!"

有没有办法同时对每个文件执行这个过程,也就是说,我怎样才能同时运行这个过程而不是一个一个地执行这个过程?我的目标是显着减少将这些图像转换为文本文件所需的时间。

提前致谢。

您可以将 for 循环的内容设为一个函数,然后多次调用该函数,但将每个都发送到后台,以便您可以执行另一个。

function my_process{
    echo "Processing  file..."
    convert  -resample 200 -colorspace Gray ${1%.*}BW.png
    echo "OCR'ing "
    tesseract ${1.*}BW.png ${1%.*} -l tla -psm 6
    echo "Removing black and white for "
    rn ${1%.*}BW.png
}

for file in ${files[@]}
do
    # & at the end send it to the background.
    my_process "$file" &
done

我要感谢贡献者@Songy 和@shellter。 为了回答我的问题...我最终使用 GNU Parallel 以使这些过程 运行 以 5 的间隔进行。这是我使用的代码:

parallel -j 5 convert {} "-resample 200 -colorspace Gray" {.}BW.png ::: *.png ; parallel -j 5 tesseract {} {} -l tla -psm 6 ::: *BW.png ; rm *BW.png

我现在正在拆分我的数据集,以便 运行 此命令与我的(非常大的)图像池的不同子组同时执行。

干杯