【问题标题】:Batch resize images in parallel using R使用 R 并行批量调整图像大小
【发布时间】:2016-10-14 19:38:45
【问题描述】:

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

}

【问题讨论】:

标签: r image parallel-processing


【解决方案1】:

秘密武器是GNU Parallel。使用 homebrew 安装它:

brew install parallel

现在,创建一个输出目录,这样您的输入图像就不会被破坏并并行运行一堆mogrify 命令:

mkdir results
parallel -X mogrify -resize 39% -path results ::: *.jpg

请做好备份,直到你掌握了这个窍门!!!

基准测试

我制作了 1,000 个 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

【讨论】:

  • 非常好 - 我很高兴它对你有用!打开Activity Monitor 并在运行它时按CMD-2CMD-3 以记住为什么要为Intel corei7 支付额外费用:-)
  • 会的!我还有另一个潜在挑战,旨在并行批处理模糊图像 (stackoverflow.com/questions/40044958/…)。如果可能的话,感谢任何帮助。再次感谢!
  • 嗨@Mark Setchell,我收到与另一个示例相同的错误消息(-bash:/usr/local/bin/parallel:参数列表太长)。我尝试以与其他示例相同的方式修改代码不起作用。
  • 如果可以的话,最简单的方法是"in-place" - 即通过修改原件,所以在副本上执行以下操作。 cd /path/to/images; find . -name \*.jpg -print0 | parallel -0 -X mogrify -resize 39% {}
猜你喜欢
  • 2018-12-22
  • 2011-03-11
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2016-10-29
  • 1970-01-01
  • 2012-12-27
相关资源
最近更新 更多