Management of and data extraction from camera trap photographs in wildlife studies. The package provides a workflow for storing and sorting camera trap photographs, computes record databases and detection/non-detection matrices for occupancy and spatial capture-recapture analyses with great flexibility. In addition, it provides simple mapping functions (number of species, number of independent species detections by station) and can visualise activity data.
o activityDensity: fixed problem with argument allSpecies = TRUE that caused output list to return values for one species only (reported by Sally Soo). o appendSpeciesNames, checkSpeciesIdentification,getSpeciesImages, recordTableIndividual: fixed error in extracting species IDs from image metadata in directories in which no images are tagged. These stations are now skipped with a warning. o detectionHistory / spatialDetectionHistory: fixed error with detection histories and effort matrix full of NAs arising if camera operation matrix had values > 2 (after argument camerasIndependent = TRUE in cameraOperation)
o imageRename: meaningful error message if no DateTimeOriginal tag was readable (e.g. all cameras were Reconyx HC500) o recordTable/ recordTableIndividual: new argument: returnFileNamesMissingTags: file name of images with missing species tag are returned if TRUE (default = FALSE) o surveyReport: in sample R script enclosed in survey report zip file, object cameraOperation was renamed to camOp (to avoid the clash with the function name cameraOperation) o detectionHistory: the detection history output csv was renamed from record_history... to detection_history...
o camera operation: fixed bug with empty entries in cameraCol when cameraCol is defined (reported by Partha Sarathi Ghose) o recordTable / recordTableIndividual: verbose warnings and better handling of situations in which date/time is unreadable (empty Exif:DateTimeOriginal metadata tag)
o detectionHistory / activity plot functions: if date/time is unreadable function returns row IDs to facilitate checks o activityDensity: warning instead of error if bandwidth estimation fails and argument allSpecies = TRUE (problem occurred with single records, or few records at similar time of day)
o exifTagNames: returns name of image from which metadata were extracted as a message
o recordTable / recordTableIndividual: column "HierarchicalSubject" (containing digiKam metadata tags in their native format) was called "record.table3[, col_to_move]" by mistake (thanks to Ross Pitman for reporting)
o improved checks that function input has correct class (to make sure data.frames are provided where the functions expect them)
o recordTable: returned station ID as camera ID if IDfrom = "metadata" and cameraID = "directory"
o detectionMaps: gained argument 'backgroundPolgygon' for plotting a SpatialPolygon object in the background of the maps o imageRename: new argument 'createEmptyDirectories' to control whether empty directories should be copied or not o imageRename: if outDir contains images already, the function will not stop with an error, but asks you whether or not to copy new images (useful if data come in over time)
o recordTable / recordTableIndividual: improved handling and reporting of stations without images (warning instead of error) o recordTable / recordTableIndividual: improved handling and reporting of stations where all images lack species/individual metadata tags (only if using metadata ID, functions will throw warning instead of error, reported by Aditya Malgaonkar)
o fixed crash in cameraOperation function caused by underscores in station / camera IDs (reported by Wyatt Petersen)
o fixDateTimeOriginal: Makes DateTimeOriginal Exif metadata tag in Reconyx Hyperfire cameras readable
o spatialDetectionHistory: argument 'sessionCol' can now create multi-session capthist objects by either assigning individuals to different sessions or assigning stations to different sessions o exifTagNames: gained argument 'returnTagGroup', and now by default returns metadata tag group in addition to metadata tag names (to unambiguously address specific metadata tags)
o new dependency: "ritis" - this is because parts of package taxize (used internally by function "checkSpeciesNames") were migrated to ritis o detectionHistory / spatialDetectionHistory: occasionLength can be any value between 1 and the number of columns in camOp (not half the number of columns in camOp as before) o functions check for spaces in user-provided column names and report them as errors
o recordTable/recordTableIndividual: give warning if Exif DateTimeOriginal tag of images is unreadable (error if all tags of a station are unreadable). May happen if images files are corrupted due to camera malfunctioning. o recordTable/recordTableIndividual: 2 records of the same species at the same station and same time by different cameras are not collapsed into one record if camerasIndependent = TRUE o all functions using Exiftool: JPG files beginning with "._" are now ignored with a warning (these are hidden, uninformative system files created on Macs and were quite capable of messing up function calls)
o getSpeciesImages can now also read image file paths from a record table provided by the user instead of reading species IDs anew in every function call. It gained 3 new arguments for that purpose. o recordTable and recordTableIndividual both gained an argument (removeDuplicateRecords) to control whether duplicate records (same station, same species, exactly same time) should be collapsed into one record (former versions did that without asking)
o imageRename will first check all directories before actually renaming anything. So the function won't break halfway through, leaving you with a half-full directory of renamed images if something goes wrong (e.g. unreadable date/time tags).
o spatialDetectionHistory: trap usage now codes malfunctioning cameras and cameras that were not set up as 0 instead of NA (as expected by the secr package) o spatialDetectionHistory: argument "scaleEffort" can only be FALSE now (to avoid negative trapping effort values, which secr does not accept)
o spatialDetectionHistory gained argument "sessionCol". It can be used to split data (i.e., create a list with multiple capthist objects) if captures come from different sessions).
o package shows startup message and checks automatically if local package version is up to date
o addCopyrightTag: Write a copyright tag into image Exif metadata
o detectionHistory: malfunctioning cameras (0 in camera operation matrix) did not cause detection history matrix cells to be NA (even if includeEffort = FALSE; reported by Hsiang Ling Chen) o detectionHistory: if the last occasion is shorter than occasionLength, the corresponding detection history matrix cells will now be NA if includeEffort = FALSE o surveyReport: species column names other than "Species" are now supported, i.e. argument "speciesCol" is now respected (thanks to Valentine Herrmann and Stefano Anile for reporting)
o detectionHistory gained argument "minActiveDaysPerOccasion". It can be used to define the minimum number of active trap days per occasion for that occasion be included (0/1 instead of NA)
o recordTable: fixed problem with appending camera IDs o cameraOperation: improved messages to user
o added section about defining date formats in camera station table to vignette 1 (Image Organisation)
o detectionHistory and spatialDetectionHistory did not run correctly under some rare circumstances (combinations of input arguments) o column names of detection histories were incorrect if occasionStartTime != 0 and datesAsOccasionNames = TRUE o argument maxNumberDays in detectionHistory / spatialDetectionHistory works on each station individually if day1 = "survey" or "station"; and from the specified date if day1 is a date
o additional checks for consistency of input in a number of functions o code simplification invisible to the user
o checkSpeciesNames: checks a vector of species names (common or scientific) against the ITIS taxonomic database via package 'taxize' o checkSpeciesIdentification: expanded from former function checkSpeciesFolders (now defunct). Can check identification if metadata tags were used for species identification. o createStationFolders: Create camera trap station directories, possibly with camera subdirectories, for storing raw images (was not included in NAMESPACE of version 0.98.0, therefore invisible. Thanks to Patrick Lorch and Brent Pease for notification)
o recordDatabase -> recordTable o recordDatabaseIndividual -> recordTableIndividual
o recordDatabaseSample -> recordTableSample o recordDatabaseIndividualSample -> recordTableIndividualSample
o detectionHistory and spatialDetectionHistory: - detection histories can begin on any specified date, station-specific setup date or day the first station was set up (to that end argument "beginWithDay1" was changed to "day1") - a buffer between setup and the first occasion can be applied (argument "buffer"). o spatialDetectionHistory: - output can be given as counts or binary (argument "output") - an RMark data frame can be created using argument makeRMarkInput o extended support for identification via metadata tags (in functions appendSpeciesNames, getSpeciesImages) o exifTagNames: can return metadata, not only metadata tag names (new argument "returnMetadata") o createStationFolders: new argument "createinDir". o detecionMaps: new argument "speciesToShow" to make maps for certain species only o activity plot functions show number of records that were used
o surveyReport returned an error when there were stations without records. o detecionMaps: Xcol and Ycol have arbitrary names now.
o arguments "customMetadataTags" and hasSpeciesFolders/ hasIndividualFolders was removed and replaced with argument "IDfrom" o metadata tags assigned in image management software are always extracted and tabulated in recordTable functions (making argument "customMetadataTags" obsolete) o some functions changed the user's working directory. Fixed. Thanks to Patrick Lorch for notification. o argument "hasCameraSubfolders" was renamed to "hasCameraFolders" (functions appendSpeciesNames, checkSpeciesIdentification, createSpeciesFolders, imageRename, timeShiftImages) o in all 4 activity plot functions, argument "all.species" was renamed to "allSpecies" o argument "recordTable" in spatialDetectionHistory was renamed to "recordTableIndividual" to make the difference from "recordTable" in "detectionHistory" clearer
o createStationFolders: Create camera trap station directories, possibly with camera subdirectories, for storing raw images o recordDatabaseIndividual: Single-species record databases from camera trap images with custom metadata tags o spatialDetectionHistory: prepare a capthist object for spatial capture-recapture analyses
o support for camera subdirectories in species identification: Station/Camera/Species in the following function: - appendSpeciesFolders - createSpeciesFolders - checkSpeciesFolders - createStationFolders - getSpeciesImages - imageRename - recordDatabase - recordDatabaseIndividual o recordDatabase: can handle different types of directory structures and metadata tags (both custom and manufacturer-specific) and has gained new arguments: - hasSpeciesFolders - cameraID (expanded from includeCameras) - camerasIndependent - stationCol - customMetadataTags - metadataHierarchyDelimitor - metadataSpeciesTag - additionalMetadataTags (renamed from metadataTags) o detectionMaps: shapefile export using packages sp and rgdal o checkSpeciesFolders: new argument stationsToCheck
o checkSpeciesFolders: renamed argument exclude -> excludeSpecies o detectionHistory: "session" in argument names was renamed to "occasion" (to be consistent with secr nomenclature) o getSpeciesImages: removed argument emptyOutDir (nothing can be deleted anymore) o recordDatabase: row names of object are 1:nrow
o surveyReport: fixed bug which caused wrong numbers of active trap nights to be returned o surveyReport: does not depend on function cameraOperation anymore o renamed function TimeShiftImages to timeShiftImages o minor fixes in cameraOperation o some rephrasing in help files o changes to author list