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