使用R并行批量调整图像大小

时间:2016-10-14 04:43:44

标签: r image parallel-processing

我正在尝试使用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])))

}

1 个答案:

答案 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