如何通过同时执行自动化文件转换?
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
我现在正在拆分我的数据集,以便 运行 此命令与我的(非常大的)图像池的不同子组同时执行。
干杯
我正在努力将大量图像文件 (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
我现在正在拆分我的数据集,以便 运行 此命令与我的(非常大的)图像池的不同子组同时执行。
干杯