我正在尝试使用R批量调整大小(即缩小文件大小)数千个图像。我已设法使用下面的代码实现此目的,但需要很长时间(特别是在调整大小> 50,000时)图像。有没有办法在多个核心上运行此任务?我是并行计算的完整新手,所以非常感谢任何帮助。提前谢谢!
library(imager)
pages <- list.files(path = '...insert directory path...',
full.names = TRUE)
for(x in 1:length(pages)) {
file <- load.image(pages[x])
resized <- imresize(file,
scale = 0.390625)
save.image(resized,
file = gsub("JPG", "jpg", paste(pages[x])))
}
答案 0 :(得分:2)
秘密武器是 GNU Parallel 。使用自制程序:
进行安装brew install parallel
现在,创建一个输出目录,这样您的输入图像就不会受到破坏,并且并行运行一堆mogrify
命令:
mkdir results
parallel -X mogrify -resize 39% -path results ::: *.jpg
请备份,直到你掌握这一点!!!
<强>基准强>
我制作了1000张400x400的JPEG随机噪音并用
顺序转换它们time for i in *.jpg; do convert $i -resize 39% results/$i; done
real 0m19.086s
user 0m18.615s
sys 0m3.445s
然后并行:
time parallel -X mogrify -resize 39% -path results ::: *.jpg
real 0m3.351s
user 0m23.021s
sys 0m0.706s