【问题标题】:R: Read EXIF data from multiple image directoriesR:从多个图像目录读取 EXIF 数据
【发布时间】:2018-12-19 18:52:13
【问题描述】:

我想知道是否有人知道如何从多个图像目录中读取 EXIF 数据。我收集了图像数据,但对于单个样本,这通常存储在多个子目录中。到目前为止,我已经尝试过:

multidirdata <- list.dirs("D:/F04", full.names = TRUE, recursive = TRUE)

for (i in 1 : length(multidirdata)){
  setwd("C:/exiftool/")
  multisubdirdata <- list.dirs(multidirdata[i])
  for (j in 1 : length(multisubdirdata)){
    filelist <- list.files(path = multisubdirdata, pattern = ".tif", full.names = TRUE)
    fulldata <- data.frame(system('exiftool -FileName -GPSLatitude -GPSLongitude -DateTimeOriginal -,
                              "D:\\F04\\0005SET\\000"', intern = TRUE))
    img.df <- read.delim2(textConnection(fulldata), stringsAsFactors = FALSE, header = FALSE,
                      col.names = c("File", "Lat", "Lon", "Time"))
    setwd(multisubdirdata[j])
    write.csv(fulldata, file = paste("multipts", "csv", sep = "."), row.names = TRUE, append = FALSE)
  }
 }

如您所见,这仅询问“D:\F04\0005SET\000”中的 EXIF 数据,而不是“D:\F04\0005SET\001”等其他目录中的 EXIF 数据。

最好是通过向量multidirdatamultisubdirdata设置所有需要的图片目录的向量,并在EXIF命令中使用。

【问题讨论】:

  • 您似乎已将“D:\\F04\\0005SET\\000”硬编码到您的系统调用中,并且您没有在任何地方使用文件列表,所以这就是它所做的一切是有道理的.您应该能够使用paste0() 为相应文件创建对system() 的调用
  • 您尝试过exifexifr 包吗?如果你能让它工作,你可以使用lapply '循环' thuogh 使用list.files().. 创建的文件列表。谷歌说:r-bloggers.com/extracting-exif-data-from-photos-using-r
  • 感谢paste0() 的建议,它现在似乎适用于一个目录,但我无法将它循环回来。我认为这可能与参数中缺少 ' 有关。
  • 我不懂 R 语言,但要避免的一件事是在每个文件上单独运行 exiftool 的循环(请参阅 exiftool Common Mistake #3 ),因为启动时间是 exiftool 最大的性能损失。如果您可以一次在所有目录上运行 exiftool 然后解析输出,您将获得最佳性能。

标签: r image exif exiftool


【解决方案1】:

注意 StarGeek 提到的常见错误使它现在对我有用:

setwd("C:/exiftool/")
fulldata <- system('exiftool -FileName -GPSLatitude -GPSLongitude -DateTimeOriginal -ext tif -r. "D:\\GIS\\Congo\\F04"', intern = TRUE)

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多