Introducción

Este documento es un breve tutorial para la extracción de los metadatos de las fotografías de cámaras trampa utilizando el paquete camtrapR. Para realizar esto, asumimos que la clasificación de las fotografías fue realizada en DigiKam o algún otro programa similar, y los metadatos de las fotografías están correctamente almacenados.

camtrapR proporciona un flujo de trabajo para el procesamiento de datos de cámaras trampa y permite preparar la información para análisis posteriores, particularmente para realizar análisis de ocupación y captura-recaptura. En este sentido, camtrapR sugiere una estructura de datos sencilla y proporciona funciones para la gestión de fotografías y vídeos de cámaras trampa, la generación de tablas de registros, mapas de riqueza y detecciones de especies, así como análisis de los patrones de actividad. Además, ayuda a preparar los análisis posteriores creando matrices de detección/no detección para los análisis de ocupación. Además de todo esto, también realiza cálculos de estadísticos básicos entre otras funciones.

Las funciones estan construidas siguiendo una secuencia lógica por lo que, en el escenario ideal, la única entrada manual de datos que se realiza es la identificación de especies (e individuos), que se logra justamente mediante el etiquetado de las fotos en programas como DigiKam. Asimismo, se debe crear una tabla con la ubicación de geográfica de las estaciones (coordenadas) así como la fecha/hora de instalación y retiro de las cámaras (periodo de actividad de las cámaras) junto con la fecha/hora de inicio y fin de los problemas que pueda tener una cámara.

Antes de comenzar con la extracción de los datos, procesarlos, y analizarlos, es necesario preparar el entorno de trabajo en Rstudio. Por lo general estos pasos se realizan una sola vez (con algunas excepciones) y permite trabajar de manera directa una vez finalizada la configuración.

Configurando el entorno de trabajo

Instalación del paquete

Para instalar la versión mas nueva de camtrapR desde CRAN corremos la siguiente linea:

#Instalar camtrapR
##Reemplazar la ruta en "lib"" para decirle a R donde quiero que instale el paquete
#install.packages("camtrapR", lib = "D:/DATA/R/Rpackages")

Una vez instalado el paquete, lo traemos al entorno de trabajo:

#Cargamos el paquete
library(camtrapR)

Exiftools

camtrapR se basa en el software libre y de código abierto ExifTool el cual sirve para extraer los metadatos de las imágenes. ExifTool está disponible gratuitamente acá y funciona en Windows, Linux y MacOS. Para poder usarlo, la computadora debe ser capaz de encontrar el software. En MacOS, Linux y Unix no suele existir problemas para que el equipo lo encuentre, siendo Windows el que crea la mayor cantidad de inconvenientes para su configuración. Por eso, a continuación se detalla cómo configurar Exiftool para Windows pero las instrucciones generales de instalación de Exiftool se pueden encontrar acá

Exiftools para Windows

En Windows, ExifTool no necesita de una instalación propiamente dicha, pero para que el sistema pueda encontrar ExifTool tenemos que seguir los siguientes pasos:

Descargar el ejecutable “independiente”stand-alone“. El archivo descargado es un .zip Descomprimir el .zip Renombrar el archivo”exiftool(-k).exe" que se encuentra dentro a “exiftool.exe”. Colocar el archivo "exiftool.exe en por ejemplo la ruta C:/Windows.

Siguiendo estos pasos Windows podrá encontrar ExifTool siempre y cuando el archivo se encuentre en un directorio reconocido por variable PATH de Windows (por ejemplo, C:/Windows). La variable PATH del sistema es una variable de entorno y para editarla de manera manual tu mejor amigo es Google!.

Ahora que tenemos Exiftool, chequeamos cuales son los directorios que se encuentran en PATH y así confirmamos que añadimos el directorio donde colocamos Exiftool, y luego chequeamos si R encuentra la herramienta en el sistema:

#Chequeamos la ruta donde colocamos Exiftools
Sys.getenv("C:/Windows") #Existe esta ruta en PATH?
## [1] ""
#Comprobar que exiftool existe en la pc
Sys.which("exiftool")
##                    exiftool 
## "C:\\WINDOWS\\exiftool.exe"

En el caso de no contar con permisos de administrador del sistema, para modificar las variables de entorno, se puede colocar Exiftool en cualquier directorio y añadirlo temporalmente en cada nueva sesión:

#Tengan en cuenta que el directorio utilizado es un solo un ejemplo
#Guardamos la ruta
exiftool_dir <- "C:/Path/To/Exiftool" 

#Añadimos la ruta de manera temporal
exiftoolPath(exiftoolDir = exiftool_dir)

Información de las estaciones

Antes de entrar a trabajar con las fotos, tenemos que entender como la información de las estaciones es almacenada. Esta información consiste en un data frame cargado como variable a partir de un archivo .csv: en este archivo cada fila corresponde a una estación (si hay 1 cámara por estación) o 1 fila por cámara (si hay más de 1 cámara por estación). El archivo debe estar tabulado de la siguiente manera: Una columna con el nombre de las estaciones, otra para los nombres de las cámaras (en el caso que sean estaciones dobles), coordenadas geográficas (latitud y longitud), fechas de instalación y retiro, y posibles fechas donde la cámara no estuvo operativa (debido a un mal funcionamiento, interferencias de animales, baterías vacías, tarjetas de memoria llenas, etc.). Toda esta información esta en las planillas de instalación y retiro.

Algunas consideraciones

Para Los nombres de las cámaras no usar "_" ni espacios. El nombre de las columnas son específicos para cada campo por lo que se recomienda revisar el ejemplo del paquete y utilizar los mismos nombres para cada columna y evitar errores. También, una fuente común de error es el formato de las fechas; las fechas deben ser del tipo “character” y una vez cargado el data frame se les debe dar el formato de fecha usando el paquete “lubridate”.

Por default, camtrapR asume que las fechas estan en formato “YYY-MM-DD” y este formato debe ser consistente en todas las tablas de datos que carguemos a R. Si tienen problemas con las fechas, lo mejor es consultar las viñetas del paquete en el apartado de “Date format”.

Organizando la base de datos

La metodología implementada en el caso del Proyecto Guanaco requiere le colocación de 2 cámaras trampa por estación. En este caso particular, los directorios donde se encuentran almacenadas las fotos ( ruta o path) en la computadora deben estar organizados de la siguiente manera:

## [1] "FOLDER/CIO3/CON271... Camara 1 de la estacion 1"
## [1] "FOLDER/CIO3/GUA011... Camara 2 de la estacion 1"

Esta manera de organización sigue la estructura “CARPETA/ESTACION/CAMARA/”, donde cada carpeta de una estación contiene las carpetas correspondientes a cada cámara de dicha estación. En el caso de ser estaciones simples el formato es “CARPETA/CAMARA/”. R suele tener problemas cuando el Path es muy largo o cuando alguno de los directorios contiene espacios, causando problemas al momento de leer los archivos. Por esto se recomienda mantener la estructura lo más sencillo posible.

Extracción de metadatos

Una vez que tenemos camtrapR instalado, Exiftools configurado y los datos organizados, podemos comenzar a utilizar camtrapR como tal para extraer los metadatos de las fotos y hacer varios análisis, todos dentro del paquete.

Primero definimos el directorio de trabajo (la ruta donde se guardaron las fotos), este directorio lo usaremos solo al momento de extraer las fotos ya que lo ideal es guardar cualquier resultado en una ruta distinta para evitar dañar involuntariamente la base de datos.

#Elegir el directorio donde estan las fotos
wd_images <- file.path(path = "I:/CT_GS")

#Revisar la cantidad de imagenes en la carpeta. 
length(list.files(wd_images, pattern = "JPG", recursive = TRUE))
## [1] 0

Para la extracción de los metadatos recurrimos a la función “recordTable()”. En la misma debemos indicar todos los parametros de la función que sean necesarios. Para los datos del proyecto Guanaco, necesitamos los siguientes parametros:

Funciones * inDir = aqui va el wd donde se encuentran las fotos * cameraID = Configurar como “directory” si es que es el ID de la camara se va a estirar desde la ruta (nombre de las carpetas) * camerasIndependent = FALSE indica que al menos 1 camara estuvo funcionando en la estación * IDfrom = Configurar como “metadata” si el ID de las especies se traera de los metadatos (etiquetado de fotos)
* metadataSpeciesTag = “Especie” aqui se indica en que grupo de etiquetas estan las especies. Nuestro grupo es “Especie” * metadataHierarchyDelimitor = “|” se coloca el delimitador que separa las jerarquias de las etiquetas, en DigiKam es “|”

#Correr la funcion recordTable para tener la tabla.

metadata_table <- recordTable(inDir  = wd_images,
                              cameraID = "directory",
                              camerasIndependent = FALSE,
                              minDeltaTime = 1440,
                              deltaTimeComparedTo = "lastIndependentRecord",
                              IDfrom = "metadata",
                              metadataSpeciesTag =  "Mamiferos", 
                              metadataHierarchyDelimitor = "|",
                              writecsv = TRUE)
#Ejemplo para la tabla
data("camtraps")
camtraps
#Generar la tabla de funcionamiento de las cámaras
# camop_problem <- cameraOperation(CTtable      = camop_table,
#                                  stationCol   = "Station",
#                                  setupCol     = "Setup_date",
#                                  retrievalCol = "Retrieval_date",
#                                  writecsv     = FALSE,
#                                  hasProblems  = TRUE,
#                                  dateFormat   = "%Y/%m/%d")