This page covers the full pipeline for the camera trap monitoring project. It is written for students who will be deploying cameras, processing images, or analysing the resulting data. The 45 sites (Site_001 to Site_045) sit across north-east Scotland and are revisited each season during the summer, with each camera deployed for 14-day in each site.

The pipeline runs in three phases: field data collection, image processing, and data processing. Each is described below.


Pipeline Overview

%%{init: {'themeVariables': {'lineColor': '#00a68a', 'primaryBorderColor': '#00a68a'}}}%%
flowchart LR
  A([Deploy camera\nEpicollect5]) --> B([Retrieve camera\nEpicollect5])
  B --> C([Copy images\nto laptop])
  C --> D([Run AddaxAI\nDeepFaune v1.4])
  D --> E([Delete human\nimages])
  E --> F([Upload to\nOneDrive])
  F --> G([Verify in\nShiny app])
  G --> H([Create detection\histories])
  H --> I([Upload outputs\nto OneDrive])

Pre-fieldwork Checklist

Download and complete the checklist before every deployment trip. Fieldwork cannot proceed without my (Deon) signature on the risk assessment and my acceptance of the calendar invite.

  pre_fieldwork_checklist.docx

Phase 1: Field Data Collection

Epicollect5

All deployment and retrieval data is recorded in the Epicollect5 project North East Scotland Camera Trapping. Install the Epicollect5 app on your phone and confirm you have access to the project before heading out.

There are two forms:

  • Camera Trap Deployment: filled in when you put a camera up
  • Retrieval: a child form filled in when you collect the camera, linked back to its deployment record

Deployment form

Field What to record
GPS location Recorded automatically: let it get a good fix before saving
Site ID Select from the dropdown (Site_001 to Site_045, or Deon_House)
Name Your name
Date of deployment Today’s date
Camera set up Confirm the camera settings match the standard protocol: Trigger (passive infrared), 8MP, 30s delay, 4 images per trigger, Normal speed, date/time set
Camera type Select from the dropdown (Browning BTC-8A or other model as labelled on the camera)
Camera ID The ID label on the camera body
SD card size Select 8 GB, 16 GB, or 128 GB to match the card installed
Dominant habitat Best match from the 10 habitat categories
Field of view 1-5 scale: 1 = heavily obstructed, 5 = clear and unobstructed
Deployment issues Any problems, e.g. difficult placement, camera wouldn’t trigger
Photo of camera location Take a photo showing the camera position in context
Important

Set Site ID, Date, and Name correctly. Epicollect5 builds the entry title from these three fields. If they are missing or wrong the record is nearly impossible to identify later without opening the full entry.

Tip

Field of view scoring: Stand at approximately the point where an animal would cross through the camera’s frame. Score 5 means a clear, unobstructed view to at least 5 m. Score 1 means branches, tall grass, or other material obscures more than half the frame.

Retrieval form

The retrieval form is opened from within the existing deployment entry. Find the deployment in Epicollect5, open it, and add a child entry. This links the retrieval record to the correct deployment automatically.

Field What to record
Date Today’s date
Camera status Functioning / Faulty / Missing
Deployment issues None / Minor (data useable) / Major (data compromised): your assessment of data quality for the deployment
Retrieval issues Any problems, e.g. battery failure, vandalism, camera moved
SD card removed? Confirm Yes before leaving the site

Site locations

All 45 sites are shown on the map below. Click a marker to see the site ID and coordinates. A shared Google My Maps is also available for use in the field.


Phase 2: Image Processing

Folder structure

Before copying any images, create the correct folder structure on your local machine. All images for a season go into:

Year/
└── Site_ID/
    └── [images]

For example:

2025/
├── Site_001/
├── Site_002/
└── Site_003/

Make sure the site folder exists transferring from the SD card.

Copying images from the SD card

  1. Insert the SD card from the retrieved camera.
  2. Copy all images into the correct Year/Site_ID/ folder on your laptop.
  3. Spot-check that files transferred correctly, open a few at random and confirm they are not corrupted.
  4. Leave the images on the SD card. Delete them only once the full pipeline is complete and the images have been confirmed on OneDrive.

Running AddaxAI with DeepFaune v1.4

AddaxAI is a local desktop application that runs species detection and classification on camera trap images. The project uses the DeepFaune v1.4 model, which is trained on European mammals and birds. Download AddaxAI

  1. Open AddaxAI.

  2. Set the input folder to Year/Site_ID/.

  3. Select the DeepFaune v1.4 model.

  4. In the species filter, enable only the following 18 categories and deselect everything else:

    badger beaver bird cat cow dog fallow deer fox hedgehog lagomorph micromammal mustelid otter red deer roe deer sheep squirrel wild boar

  5. Run the classifier.

When it finishes, AddaxAI writes an Excel file into the folder. This file lists each image, its predicted species label, and the associated confidence score. Keep this file: it is uploaded to OneDrive alongside the images and is read by the Shiny app.

Note

AddaxAI runs entirely on your local machine. No images are sent to a server or any external service.

Handling human images

AddaxAI flags images containing people as Human. Before uploading anything:

  1. Open the AddaxAI Excel output and filter to rows where the prediction is Human.
  2. Delete those image files from your local machine.
  3. Do not upload human images to OneDrive or any shared storage.

The Shiny app in Phase 3 also has a built-in confirmation modal for deleting any human images that were missed at this stage.


Phase 3: Verification and Analysis

Uploading to OneDrive

Once human images have been removed, upload the remaining images and the AddaxAI Excel file to OneDrive. The OneDrive folder structure mirrors your local structure:

Year/
└── Site_ID/
    ├── [species images]
    └── addaxai_output.xlsx

Do not run any analysis scripts until the images are on OneDrive and you have verified them in the Shiny app.


Species verification: the Shiny app

The Shiny app (classify_app.R) provides an interface for reviewing AddaxAI’s predictions, correcting misclassifications, and exporting a clean classifications CSV for use in camtrapR.

How to use it

  1. Open RStudio and run classify_app.R.
  2. Click Browse to select the image folder (Year/Site_ID/), then Browse again to select the AddaxAI results.xlsx. Click Load.
  3. The app works label by label. Each AddaxAI label (e.g. “roe deer”, “bird”) is processed in sequence, with person detections handled first.
  4. For each image, the species dropdown is pre-set to AddaxAI’s suggestion. Confirm it, or select a different species, then click Confirm.
  5. Select Nothing present if the detection was a false positive. This skips the image without writing anything to the output.
  6. If the image contains a person, the delete button turns red. Click it to permanently remove the image from disk (GDPR compliance).
  7. Once all images for a label are reviewed, click Next label to continue.
  8. Repeat from step 2 for each site folder by clicking Change folder.

Progress is saved to classifications.csv in the image folder after every confirmation. Reloading the same folder resumes where you left off.

Species list

The app uses a fixed species list. You can only assign one of these labels to each image.

Several labels mirror DeepFaune’s resolution rather than species-level identification: Mustelid covers stoat, weasel, pine marten, and mink; Lagomorph covers rabbit and brown hare; Bird covers all bird species. These can be refined in a later pass by cross-referencing the classifications CSV with the original images on OneDrive.

Deer Wild mammals Domestic / other
Fallow deer Badger Bird
Red deer Beaver Cat
Roe deer Fox Cow
Hedgehog Dog
Lagomorph Other mammal
Micromammal Sheep
Mustelid Vehicle
Otter Unknown
Squirrel
Wild boar
Note

Human images are never written to the classifications CSV. They are removed from disk via the deletion modal. This is intentional as the project does not retain any record of human presence in its data files.

Download

  classify_app.R

From classifications to detection histories

The classifier app produces classifications.csv; one row per image, with station, filename, datetime, species, count, and burst ID. The next task is to turn this into a detection history: the site-by-occasion matrix that occupancy models require.

What you are aiming for

A detection history for a single focal species looks something like this, with each row a station and each column a sampling occasion (typically one day):

Station Day 1 Day 2 Day 3 ··· Day 14
Site_001 0 1 0 ··· 0
Site_002 NA 0 0 ··· 1
Site_003 0 0 0 ··· 0

1 means the species was detected on that day. 0 means the camera was operating but the species was not detected. NA means the camera was not operating, so that occasion contributes no information to the model.

What you need

To build the detection history you need three things:

  1. classifications.csv from the classifier app
  2. The deployment CSV exported from Epicollect5
  3. The retrieval CSV exported from Epicollect5

Export both CSVs from the Epicollect5 website. The columns you will use to link deployment dates to detection records are:

CSV Column Contents
Deployment ec5_uuid Unique ID for the deployment
Deployment 2_Site_ID Site label (e.g. Site_001)
Deployment 4_Date_of_deployment Start date
Deployment lat_1_Location Latitude
Deployment long_1_Location Longitude
Retrieval ec5_parent_uuid Links back to the deployment
Retrieval 13_Date Retrieval date
Retrieval 14_Camera_status Camera condition at collection
Retrieval 16_Retrieval_issues Free-text retrieval notes

Building it in R

The camtrapR package is designed for this. The two key functions are cameraOperation(), which builds an effort matrix from deployment and retrieval dates, and detectionHistory(), which maps detection records onto that matrix to produce the site-by-occasion output. Package documentation and worked vignettes are at cran.r-project.org/package=camtrapR.


Uploading final outputs to OneDrive

Once detection histories are generated, save outputs to a Detection_histories/ subfolder under the year:

Year/
├── Site_001/
│   └── ...
├── Site_002/
│   └── ...
└── Detection_histories/
    ├── classifications.csv
    ├── record_table.csv
    ├── <Species>_detection_history.csv
    └── <Species>_effort.csv

Quick-reference checklist

Full pipeline checklist

Field

  • Complete risk assessment (HS014) and send calendar invite (HS022) before departure
  • Record deployment in Epicollect5 (Camera Trap Deployment form)
  • Record retrieval in Epicollect5 (Retrieval child form, linked to the deployment)

Processing

  • Copy images to Year/Site_ID/ on laptop
  • Run AddaxAI with DeepFaune v1.4
  • Delete human images from local machine
  • Upload images and AddaxAI Excel to OneDrive
  • Delete images from SD card only after pipeline is complete and images are confirmed on OneDrive

Analysis

  • Run Shiny app: verify predictions, export classifications CSV
  • Export Epicollect5 deployment and retrieval CSVs
  • Build detection histories using camtrapR
  • Upload classifications CSV and detection histories to OneDrive