library(camtrapR)
data(camtraps)
Having organised your camera trap images into station (and camera) directories as explained in the vignette “Organising raw camera trap images in camtrapR”, you can begin with species (and individual) identification.
Generally, species identification come before individual identification. camtrapR supports two different methods for identifying species and individuals:
It is recommended to to work with the renamed images (function imageRename
), not the original generic file names. Species names are case-sensitive and must be spelled exactly the same in each station, including interpunction and white spaces. “Leopard” is not identical to “leopard” and “Pig-tailed Macaque” is different from “Pig-tailed Macaque”.
For species identification, images can be moved into species directories created within station directories. The species ID is then read from the directory name. Likewise, individuals can be identified by moving them into indivdual directories. Be aware that one first needs to collect all images of the species of interest (using getSpeciesImages
described below) before individual identification.
Metadata tags can be assigned to images in image management software. They are saved in the image metadata automatically, from where they can later be read out by two camtrapR functions (recordTable
and recordTableIndividual
). Metadata tagging can be used to assign custom tags to images, e.g. species ID, individual ID for capture-recapture analyses, number of individuals on images, sex or age class of individuals, behaviour etc..
Here is a list of suitable software for metadata tagging:
Among these, we recommend digiKam because it is free and open-source software. All of these programs offer customisable metadata structures and are easy to use. We only tested these three programs and it is unlikely that other software will work smoothly, if at all. Picasa is not suitable, because it does not allow for hierarchical tags, the total number of tags is limited, and it may overwrite and permanently destroy your original metadata.
Before assigning metadata tags, users need to set up a hierarchical tag structure in image management software. This structure is customisable and can be expanded as needed. In digiKam, this is done in the Tag Manager. Here’s some examples:
Be careful to use one level of hierarchy in your tags only. The following example will not work:
The crucial point is to set up tag groups (e.g. “Species” for species identification) which then contain the desired tags (e.g. species tags such as “Leopard Cat”, “Malay Civet” etc.). This is what is meant by hierarchical tag structure. For clarification, here is a screenshot of the digiKam tag tree in which an image was identified as showing a Leopard Cat.
The desired tag structure shown in a digiKam screenshot
An important word of warning: image management software must be configured to write custom image metadata tags into the images themselves, not into .xmp sidecar files. The relevant functions cannot read tags from .xmp sidecar files. Make sure you set the preferences in your image management software accordingly. In digiKam, go to Settings/Configure digiKam/Metadata. There, make sure “Write to sidecar files” is unchecked.
This if for those who are interested in the technical details of how custom metadata are saved in images. The image management software will save metadata in a metadata tag field called “HierarchicalSubject” which camtrapR can then read out. Let’s assume that in the above example we had three images, showing:
Here’s what the content of the HierarchicalSubject field would look like:
Species|SpeciesA Species|SpeciesB, Individual|Female1 Species|SpeciesA, Species|SpeciesB
Note that multiple tags are separated by commas and hierarchy levels are by default separated by a vertical bar (“|”). Adobe software also lets you use colon (“:”); you can tell camtrapR which to use using argument in a number of functions). camtrapR reads these lines and can automatically tabulate the contents.
Double observer species identification is only available with metadata tagging, not with the drag & drop method. Both observers need to tag images independently using separate metadata tag groups (e.g. “SpeciesID_Peter” and “SpeciesID_Paul”). The function checkSpeciesIdentification
returns conflicting species identification by several observers that can then be harmonised (see below).
Functionality | metadata tagging | drag & drop |
---|---|---|
double observer identification | yes | no |
multiple species per image | yes | no1 |
batch ID | yes | yes |
filtering by tags | yes | no |
crowd-source ID2 | yes | yes |
portability and robustness | high3 | medium4 |
1 images need to be copied and moved to different species directories to allow for this functionality
2 identification performed by independent observers on sub-datasets
3 species identification tags are written into metadata permanently
4 Species ID depends on directory structure
Generally, you are free to use any species names you wish to - scientific names, common names, local names, abbreviations, codes, etc. But it may often be desirable to be consistent with species names, e.g. to ensure long-term usability of data or to facilitate data exchange between researchers. Therefore, users can check the species names they wish to use in species identification (common or scientific names) against the ITIS taxonomic database using the function checkSpeciesNames
. The function returns matching common and scientific names to the names provided by the user, taxon ranks and authors, the ITIS taxonomic serial number (TSN) and an ITIS taxon url. Internally, the function checkSpeciesNames
makes use of the R package taxize
.
If multiple matches are found, a menu allows users to choose their species of interest (if argument ask = TRUE
). By default, only accepted species names are returned (controlled by argument accepted
). Invalid names will return no matches but NA.
# find data for 2 species with correctly spelled names
checkNames1 <- checkSpeciesNames (speciesNames = c("Moonrat", "Malayan Civet"),
searchtype = "common")
checkNames1
## user_name tsn scientific_name taxon_author common_name
## 1 Moonrat 633549 Echinosorex gymnura (Raffles, 1822) Moonrat
## 2 Malayan Civet 622004 Viverra tangalunga Gray, 1832 Malayan Civet
## rankname taxon_status
## 1 Species accepted
## 2 Species accepted
## itis_url
## 1 http://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=633549
## 2 http://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=622004
# and with scientific names (note that in Echinosorex we provide a genus name only)
checkNames2 <- checkSpeciesNames (speciesNames = c("Echinosorex", "Viverra tangalunga"),
searchtype = "scientific")
checkNames2
## user_name tsn scientific_name taxon_author
## 1 Echinosorex 633449 Echinosorex Blainville, 1838
## 2 Viverra tangalunga 622004 Viverra tangalunga Gray, 1832
## common_name rankname taxon_status
## 1 <NA> Genus accepted
## 2 Malayan Civet Species accepted
## itis_url
## 1 http://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=633449
## 2 http://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=622004
# an invalid name: the accepted name of the leopard cat is Prionailurus bengalensis
checkNames3 <- checkSpeciesNames (speciesNames = "Felis bengalensis",
searchtype = "scientific",
accepted = FALSE)
checkNames3
## user_name tsn scientific_name taxon_author common_name
## 1 Felis bengalensis 183793 Felis bengalensis Kerr, 1792 leopard cat
## rankname taxon_status
## 1 Species invalid
## itis_url
## 1 http://www.itis.gov/servlet/SingleRpt/SingleRpt?search_topic=TSN&search_value=183793
## an ambiguous name name: Chevrotain (Tragulus)
## this does not work in vignettes, but should run on your machine
# checkNames4 <- checkSpeciesNames (speciesNames = "Chevrotain",
# searchtype = "common")
# 1 # making a choice from the menu
# checkNames4
Species identification by moving images into species directories is simple. It can be done in a generic file manager (provided it shows preview images) or in the file manager that comes with image management software (e.g. FastStone Image Viewer, IrfanView or digiKam). Images must be moved into species directories. Don’t copy images into species directories! All images must be placed in species directories and no image may be left outside species directories after identification.
The function createSpeciesFolders
assists with species identification by drag & drop by creating species directories automatically in all station directories. Alternatively, directories can be created manually. createSpeciesFolders
can also remove empty species directories after identification (by setting removeFolders = FALSE
). In doing so, it will not touch directories that contain any files.
It makes sense to create directories for all species one expects to find in the study area, and possibly also for images one wants to exclude later on, e.g. unidentifiable images, blank images or team photos.
Here is an example in which we first create station directories and the then species directories within these. Note that creating station directories in the example is for demonstration purposes only. Normally, at this point you would already have a directory structure with station directories (possibly with camera subdirectories), each containing renamed, unsorted images. Running createStationFolders
here therefore is for demonstration only.
# this dummy directory will be used as inDir (containing station directories with species subdirectories)
wd_createSpeciesFoldersTest <- file.path(tempdir(), "createSpeciesFoldersTest")
# now first create the station directories
# (normally, you'd create species directories in the station directories that
# already contain renamed, unsorted images). Again, this is for demonstation only.
StationFolderCreate1 <- createStationFolders (inDir = wd_createSpeciesFoldersTest,
stations = as.character(camtraps$Station),
createinDir = TRUE)
## created 3 directories
StationFolderCreate1
## station
## 1 StationA
## 2 StationB
## 3 StationC
## directory
## 1 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationA
## 2 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationB
## 3 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationC
## created exists
## 1 TRUE TRUE
## 2 TRUE TRUE
## 3 TRUE TRUE
# species names for which we want to create subdirectories
species <- c("Sambar Deer", "Bay Cat")
# create species subdirectories
SpeciesFolderCreate1 <- createSpeciesFolders (inDir = wd_createSpeciesFoldersTest,
species = species,
hasCameraFolders = FALSE,
removeFolders = FALSE)
## created 6 directories
SpeciesFolderCreate1
## directory
## 1 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationA/Sambar Deer
## 2 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationA/Bay Cat
## 3 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationB/Sambar Deer
## 4 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationB/Bay Cat
## 5 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationC/Sambar Deer
## 6 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationC/Bay Cat
## created exists
## 1 TRUE TRUE
## 2 TRUE TRUE
## 3 TRUE TRUE
## 4 TRUE TRUE
## 5 TRUE TRUE
## 6 TRUE TRUE
# delete empty species directories
SpecFolderCreate2 <- createSpeciesFolders (inDir = wd_createSpeciesFoldersTest,
species = species,
hasCameraFolders = FALSE,
removeFolders = TRUE)
## deleted 6 empty directories
SpecFolderCreate2
## directory
## 1 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationA/Sambar Deer
## 2 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationA/Bay Cat
## 3 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationB/Sambar Deer
## 4 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationB/Bay Cat
## 5 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationC/Sambar Deer
## 6 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/createSpeciesFoldersTest/StationC/Bay Cat
## still.exists
## 1 FALSE
## 2 FALSE
## 3 FALSE
## 4 FALSE
## 5 FALSE
## 6 FALSE
Now is the time to move (not copy) images of species into the prepared species directories. If images were misplaced (thereby misidentified) they can be moved to another species directory at any time. Rerun the following function and species identification will be updated in your tables (see function recordTable
in the Data extraction vignette).
If you wish to use metadata tagging for species identification, first set up the hierarchical metadata tag structure as explained above. Also, make sure your images are in station directories like this:
inDir/Station/…
or
inDir/Station/Camera/…
(… being the renamed JPG images). Note that the directory structure is the one produced by function imageRename
.
Now you can begin tagging your images. Contrary to species identification by drag an drop, it is not necessary to create species directories and to move images when using metadata tags for identification. Several species tags can be assigned to the same image if images recorded several species. They will be separated into separate records when you tabulate records. Once identification is complete, function recordTable
will extract and tabulate the metadata for you (see vignette “Extracting Data from Images”).
Misidentified images can act as false positives and can thus have grave effects when analysing detection/non-detection data, e.g. with occupancy models. Therefore it is very important to make sure species identification is correct. Species may be misidentifed by moving images into wrong directories or assigning wrong species tags. This can be (partly) checked using function checkSpeciesIdentification
. Within each station and for each image, it assesses whether there are images of another species taken within a given time interval. Often, it is unlikely that different species are encountered within very short time intervals at the same location. This can help to find images that were misidentified, particularly if they were part of a sequence of images. The function will not be able to find “isolated” images, i.e. images that were misidentified, but were not part of a sequence of images. Likewise, if all images of a sequence were misidentified, they cannot be found either.
checkSpeciesIdentification
can check on species identification for both methods of species identification: drag & drop into species directories or metadata tagging. The former requires one of the following directory structures:
inDir/Station/Species
inDir/Station/Camera/Species
The latter requires one of the following directory structures:
inDir/Station inDir/Station/Camera
Here is an example using images identified with the drag & drop method.
wd_images_ID <- system.file("pictures/sample_images", package = "camtrapR")
# run check with 120 seconds (2 minutes) maximum time differnce
check.folders <- checkSpeciesIdentification(inDir = wd_images_ID,
IDfrom = "directory",
hasCameraFolders = FALSE,
maxDeltaTime = 120)
## StationA : checking 8 images in 2 directories
## StationB : checking 23 images in 4 directories
## StationC : checking 37 images in 4 directories
check.folders
## $temporalIndependenceCheck
## station
## 7 StationC
## 29 StationC
## Directory
## 7 C:/Users/niedballa/AppData/Local/Temp/RtmpUfPKSO/Rinst16e845af38ae/camtrapR/pictures/sample_images/StationC/EGY
## 29 C:/Users/niedballa/AppData/Local/Temp/RtmpUfPKSO/Rinst16e845af38ae/camtrapR/pictures/sample_images/StationC/TRA
## FileName species DateTimeOriginal
## 7 StationC__2009-04-27__00-17-00(1).JPG EGY 2009-04-27 00:17:00
## 29 StationC__2009-04-27__00-19-00(1).JPG TRA 2009-04-27 00:19:00
##
## $IDconflictCheck
## data frame with 0 columns and 0 rows
The function returns a list with 2 elements. The first element (temporalIndependenceCheck
) is the check on temporal proximity of different species (the second element IDconflictCheck
is describes in the next paragraph). In our example, two images of different species were taken within 2 minutes of one another at StationC (a chevrotain and a moon rat in our example). Now one should check the species identity of these 2 images to make sure they were identified correctly. If not, the species ID in the incorrectly identified image is corrected. The function checkSpeciesIdentification
can be re-run as often as desired. The behaviour of the function can be further specified by arguments excludeSpecies
and stationsToCheck
. The first causes camtrapR to ignore certain species and the latter can be used to check only certain stations.
# check only station A and B (will give no results)
checkSpeciesIdentification(inDir = wd_images_ID,
IDfrom = "directory",
hasCameraFolders = FALSE,
maxDeltaTime = 120,
stationsToCheck = c("StationA", "StationB"))
## StationA : checking 8 images in 2 directories
## StationB : checking 23 images in 4 directories
## $temporalIndependenceCheck
## data frame with 0 columns and 0 rows
##
## $IDconflictCheck
## data frame with 0 columns and 0 rows
# Exclude chevrotains (Tragulus spp). will give no results
checkSpeciesIdentification(inDir = wd_images_ID,
IDfrom = "directory",
hasCameraFolders = FALSE,
maxDeltaTime = 120,
excludeSpecies = "TRA")
## StationA : checking 8 images in 2 directories
## StationB : checking 23 images in 4 directories
## StationC : checking 20 images in 3 directories
## $temporalIndependenceCheck
## data frame with 0 columns and 0 rows
##
## $IDconflictCheck
## data frame with 0 columns and 0 rows
The second element returned by checkSpeciesIdentification
(IDconflictCheck
) reports on images with conflicting IDs if 2 observers identified images via metadata tagging. To that end, the arguments metadataSpeciesTag
and metadataSpeciesTagToCompare
need to be set. All records that differ in their assigned IDs will be reported. If metadataSpeciesTagToCompare
is not defined, the data frame will be empty.
Once species are identified correctly, species names can be appended to image file names using appendSpeciesNames
. The species names are taken from the directory names (of the drag and drop method was used) or from metadata tags and will be appended to the image file names. Set argument IDfrom = "directory"
or IDfrom = "metadata"
, respectively. A data frame will show directories, old and new file names.
# copy sample images to another location (so we don't mess around in the package directory)
wd_images_ID <- system.file("pictures/sample_images", package = "camtrapR")
file.copy(from = wd_images_ID, to = tempdir() , recursive = TRUE)
## [1] TRUE
wd_images_species_copy <- file.path(tempdir(), "sample_images")
species_names_append <- appendSpeciesNames(inDir = wd_images_species_copy,
IDfrom = "directory",
hasCameraFolders = FALSE
)
## renamed 68 out of 68 images in C:\Users\NIEDBA~1\AppData\Local\Temp\RtmpaaaGPe/sample_images
head(species_names_append)
## directory
## 1 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 2 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 3 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 4 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 5 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 6 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## filename_old species
## 1 StationA__2009-04-21__00-40-00(1).JPG PBE
## 2 StationA__2009-04-22__20-19-00(1).JPG PBE
## 3 StationA__2009-04-22__20-21-00(1).JPG PBE
## 4 StationA__2009-04-23__00-07-00(1).JPG PBE
## 5 StationA__2009-04-23__00-09-00(1).JPG PBE
## 6 StationA__2009-05-07__17-11-00(1).JPG PBE
## filename_new renamed
## 1 StationA__2009-04-21__00-40-00(1)__PBE.JPG TRUE
## 2 StationA__2009-04-22__20-19-00(1)__PBE.JPG TRUE
## 3 StationA__2009-04-22__20-21-00(1)__PBE.JPG TRUE
## 4 StationA__2009-04-23__00-07-00(1)__PBE.JPG TRUE
## 5 StationA__2009-04-23__00-09-00(1)__PBE.JPG TRUE
## 6 StationA__2009-05-07__17-11-00(1)__PBE.JPG TRUE
species_names_remove <- appendSpeciesNames(inDir = wd_images_species_copy,
IDfrom = "directory",
hasCameraFolders = FALSE,
removeNames = TRUE
)
## renamed 68 out of 68 images in C:\Users\NIEDBA~1\AppData\Local\Temp\RtmpaaaGPe/sample_images
head(species_names_remove)
## directory
## 1 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 2 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 3 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 4 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 5 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## 6 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sample_images/StationA/PBE
## filename_old species
## 1 StationA__2009-04-21__00-40-00(1)__PBE.JPG PBE
## 2 StationA__2009-04-22__20-19-00(1)__PBE.JPG PBE
## 3 StationA__2009-04-22__20-21-00(1)__PBE.JPG PBE
## 4 StationA__2009-04-23__00-07-00(1)__PBE.JPG PBE
## 5 StationA__2009-04-23__00-09-00(1)__PBE.JPG PBE
## 6 StationA__2009-05-07__17-11-00(1)__PBE.JPG PBE
## filename_new renamed
## 1 StationA__2009-04-21__00-40-00(1).JPG TRUE
## 2 StationA__2009-04-22__20-19-00(1).JPG TRUE
## 3 StationA__2009-04-22__20-21-00(1).JPG TRUE
## 4 StationA__2009-04-23__00-07-00(1).JPG TRUE
## 5 StationA__2009-04-23__00-09-00(1).JPG TRUE
## 6 StationA__2009-05-07__17-11-00(1).JPG TRUE
The function getSpeciesImages
collects all images of a focal species from all stations and saves them in another directory, creating an image report. This should be done after all images were identified. The function serves 2 purposes:
# again, we use a temporary directory for demonstration. Change this in your own code!
wd_images_species_copy <- file.path(tempdir(), "sampleSpeciesImages")
species_to_copy <- "VTA" # = Viverra tangalunga, Malay Civet
specImagecopy <- getSpeciesImages(species = species_to_copy,
IDfrom = "directory",
inDir = wd_images_ID,
outDir = wd_images_species_copy,
createStationSubfolders = FALSE
)
## VTA - copied 5 out of 5 images in C:/Users/niedballa/AppData/Local/Temp/RtmpUfPKSO/Rinst16e845af38ae/camtrapR/pictures/sample_images to C:\Users\NIEDBA~1\AppData\Local\Temp\RtmpaaaGPe/sampleSpeciesImages/VTA
specImagecopy
## species
## 1 VTA
## 2 VTA
## 3 VTA
## 4 VTA
## 5 VTA
## DirectoryOrig
## 1 C:/Users/niedballa/AppData/Local/Temp/RtmpUfPKSO/Rinst16e845af38ae/camtrapR/pictures/sample_images/StationA/VTA
## 2 C:/Users/niedballa/AppData/Local/Temp/RtmpUfPKSO/Rinst16e845af38ae/camtrapR/pictures/sample_images/StationA/VTA
## 3 C:/Users/niedballa/AppData/Local/Temp/RtmpUfPKSO/Rinst16e845af38ae/camtrapR/pictures/sample_images/StationB/VTA
## 4 C:/Users/niedballa/AppData/Local/Temp/RtmpUfPKSO/Rinst16e845af38ae/camtrapR/pictures/sample_images/StationB/VTA
## 5 C:/Users/niedballa/AppData/Local/Temp/RtmpUfPKSO/Rinst16e845af38ae/camtrapR/pictures/sample_images/StationC/VTA
## FilenameOrig
## 1 StationA__2009-04-10__05-07-00(1).JPG
## 2 StationA__2009-05-06__19-06-00(1).JPG
## 3 StationB__2009-04-15__19-12-00(1).JPG
## 4 StationB__2009-04-27__05-07-00(1).JPG
## 5 StationC__2009-04-24__02-57-00(1).JPG
## DirectoryCopy
## 1 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sampleSpeciesImages/VTA
## 2 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sampleSpeciesImages/VTA
## 3 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sampleSpeciesImages/VTA
## 4 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sampleSpeciesImages/VTA
## 5 C:\\Users\\NIEDBA~1\\AppData\\Local\\Temp\\RtmpaaaGPe/sampleSpeciesImages/VTA
## FilenameCopy copy_ok
## 1 StationA__2009-04-10__05-07-00(1).JPG TRUE
## 2 StationA__2009-05-06__19-06-00(1).JPG TRUE
## 3 StationB__2009-04-15__19-12-00(1).JPG TRUE
## 4 StationB__2009-04-27__05-07-00(1).JPG TRUE
## 5 StationC__2009-04-24__02-57-00(1).JPG TRUE
Before individual identification, images need to be identified to species level using one of the methods described above. All images of the focal species are then collected using getSpeciesImages
(you could also do it manually, but it is laborious and cumbersome). Users can choose if they need station directories or not. Note that it is not possible (but also not needed) to have camera subdirectories in station directories. Thus, directory structure is one of these:
speciesImages/SpeciesA/…
or
speciesImages/SpeciesA/Station1/…
where … stands for the renamed JPG images.
As with species identification, individuals can be identified by drag and drop or by metadata tagging. We recommend identifying individuals using metadata tags in image management software because is more convenient.
Identifying individuals from images is similar to species identification, but there are important differences: In order to use the function recordTableIndividual
which extracts the information from tagged images, images must have been copied into a species directory (e.g. with getSpeciesImages
). It is further recommended to use imageRename
for renaming images earlier in the workflow (if images were not renamed, make sure you create station directories when collecting the species images with getSpeciesImages
.
This will ensure that the function can find all the relevant information:
hasStationFolders
)cameraID
). This is optional.IDfrom
)Individuals can be identified by moving images into individual directories, either within station directories or not. If no station directories are used, the images must have been renames with imageRename
because otherwise there will be no way of deriving the station ID.
Metadata tagging of individual IDs is analogous to species assignment with metadata.