用于相机陷印图像管理的 Exif 数据。根据日期时间和文件夹名称为图像创建新名称
Exif data for camera trapping image management. Creating new names for images based on date-time and folder names
我很抱歉提出愚蠢的问题,但我正在努力编写我想要的代码。我正在使用在博文中找到的代码:Dewey Dunnington 的 Fish and Whistle (http://apps.fishandwhistle.net/archives/956)。
我正在尝试编写一个循环,在该循环中我可以使用文件夹名称和 EXIF 数据中的 "CreateDate" 日期时间重命名所有文件夹中的所有图像(递归)。图像存储在相机站(例如 Station "A")文件夹中,然后存储在相机文件夹中(一个站有 2 个相机,例如相机“1”)。
所以一个单独的图像目录是:
H:/GitHub/CT_Mara/images/raw_images/A/1/....jpg....jpg....jpg....等
因此,理想情况下,我希望我的图像重命名为 "A1_2017-05-03 15-45-13.jpg",如果有两张或更多照片具有相同的名称,则应将它们命名为:"A1_2017-05-03 15-45-13(1).jpg" 和 "A1_2017-05-03 15-45-13(2).jpg"
我想要完成的事情:
- 根据日期和时间重命名所有图像
exifdata$CreateDate
- 将 (1)、(2) 等附加到同名图像
- 将电台和相机文件夹的名称附加到图像的
名字
- 然后最后,作为一个单独的函数,很高兴知道我是如何
可以在 exifdata 框架中创建一个新的库仑,例如 a
"species"可以识别动物的库仑
这是我使用的代码:
library(lubridate)
定义 exif 函数
exifRip <- function(filename) {
command <- paste("exiftool -n -csv",
paste(shQuote(filename), collapse=" "))
read.csv(textConnection(system(command, intern=TRUE)),
header = TRUE,
sep = ",",
quote = "",
stringsAsFactors = FALSE)
}
从我的目录加载 exif 数据
exifdata <- exifRip(list.files(path="H:/GitHub/CT_Mara/images/raw_images"))
View(exifdata)
设置输出目录
outdir <- dir.create("H:/GitHub/CT_Mara/images/raw_images/EXIFdata")
除此循环外,一切运行完美:
for(i in 1:nrow(exifdata)) {
row <- exifdata[i, ]
d <- ymd_hms(row$CreateDate)
ext <- tools::file_ext(row$SourceFile) #maintain file extension
newname <- file.path(outdir,
sprintf("%04d-%02d-%02d %02d.%02d.%02d.%s",
year(d), month(d), day(d), hour(d), minute(d),
second(d), ext))
file.copy(row$SourceFile, newname)
}
我收到以下错误消息:
Error in sprintf("%04d-%02d-%02d %02d.%02d.%02d.%s", year(d), month(d), :
invalid format '%04d'; use format %f, %e, %g or %a for numeric objects
In addition: Warning message:
All formats failed to parse. No formats found.
任何关于如何清理它的建议将不胜感激。提前致谢。
亲切的问候,
菲利普
下面的 exiftool 命令几乎可以完全满足您的需求,而无需编写脚本。唯一的区别是重复的文件将被命名为 "NAME_1"、"NAME_2" 而不是 "NAME(1)"、"NAME(2)":
exiftool '-filename<%-1:1D%-1:D_${createdate}%+c.%e' -d "%Y-%m-%d %H-%M-%S" -r DIR
其中 DIR 是包含图像的目录的名称。如果您在 Windows 中,则应在第一个参数周围使用双引号而不是单引号。
在此命令中将 "filename" 替换为 "testname" 以进行干式 运行 测试,以在实际进行重命名之前查看文件名。
我很抱歉提出愚蠢的问题,但我正在努力编写我想要的代码。我正在使用在博文中找到的代码:Dewey Dunnington 的 Fish and Whistle (http://apps.fishandwhistle.net/archives/956)。
我正在尝试编写一个循环,在该循环中我可以使用文件夹名称和 EXIF 数据中的 "CreateDate" 日期时间重命名所有文件夹中的所有图像(递归)。图像存储在相机站(例如 Station "A")文件夹中,然后存储在相机文件夹中(一个站有 2 个相机,例如相机“1”)。
所以一个单独的图像目录是: H:/GitHub/CT_Mara/images/raw_images/A/1/....jpg....jpg....jpg....等
因此,理想情况下,我希望我的图像重命名为 "A1_2017-05-03 15-45-13.jpg",如果有两张或更多照片具有相同的名称,则应将它们命名为:"A1_2017-05-03 15-45-13(1).jpg" 和 "A1_2017-05-03 15-45-13(2).jpg"
我想要完成的事情:
- 根据日期和时间重命名所有图像 exifdata$CreateDate
- 将 (1)、(2) 等附加到同名图像
- 将电台和相机文件夹的名称附加到图像的 名字
- 然后最后,作为一个单独的函数,很高兴知道我是如何 可以在 exifdata 框架中创建一个新的库仑,例如 a "species"可以识别动物的库仑
这是我使用的代码:
library(lubridate)
定义 exif 函数
exifRip <- function(filename) {
command <- paste("exiftool -n -csv",
paste(shQuote(filename), collapse=" "))
read.csv(textConnection(system(command, intern=TRUE)),
header = TRUE,
sep = ",",
quote = "",
stringsAsFactors = FALSE)
}
从我的目录加载 exif 数据
exifdata <- exifRip(list.files(path="H:/GitHub/CT_Mara/images/raw_images"))
View(exifdata)
设置输出目录
outdir <- dir.create("H:/GitHub/CT_Mara/images/raw_images/EXIFdata")
除此循环外,一切运行完美:
for(i in 1:nrow(exifdata)) {
row <- exifdata[i, ]
d <- ymd_hms(row$CreateDate)
ext <- tools::file_ext(row$SourceFile) #maintain file extension
newname <- file.path(outdir,
sprintf("%04d-%02d-%02d %02d.%02d.%02d.%s",
year(d), month(d), day(d), hour(d), minute(d),
second(d), ext))
file.copy(row$SourceFile, newname)
}
我收到以下错误消息:
Error in sprintf("%04d-%02d-%02d %02d.%02d.%02d.%s", year(d), month(d), :
invalid format '%04d'; use format %f, %e, %g or %a for numeric objects
In addition: Warning message:
All formats failed to parse. No formats found.
任何关于如何清理它的建议将不胜感激。提前致谢。
亲切的问候, 菲利普
下面的 exiftool 命令几乎可以完全满足您的需求,而无需编写脚本。唯一的区别是重复的文件将被命名为 "NAME_1"、"NAME_2" 而不是 "NAME(1)"、"NAME(2)":
exiftool '-filename<%-1:1D%-1:D_${createdate}%+c.%e' -d "%Y-%m-%d %H-%M-%S" -r DIR
其中 DIR 是包含图像的目录的名称。如果您在 Windows 中,则应在第一个参数周围使用双引号而不是单引号。
在此命令中将 "filename" 替换为 "testname" 以进行干式 运行 测试,以在实际进行重命名之前查看文件名。