Skip to main content

Tools for classifying camera trap images

Project description

animl-py 3.2.0

AniML comprises a variety of machine learning tools for analyzing ecological data. This Python package includes a set of functions to classify subjects within camera trap field data and can handle both images and videos. This package is also available in R: animl

Table of Contents

  1. Installation
  2. Usage
  3. Models

Installation Instructions

It is recommended that you set up a conda environment for using animl. See Dependencies below for more detail. You will have to activate the conda environment first each time you want to run AniML from a new terminal.

From GitHub

git clone https://github.com/conservationtechlab/animl-py.git
cd animl-py
pip install -e .

From PyPi

pip install animl

Dependencies

We recommend running AniML on GPU-enabled hardware. **If using an NVIDIA GPU, ensure driviers, cuda-toolkit and cudnn are installed.

Python >= 3.12

Onnx
Animl currently depends on onnxruntime-gpu >= 1.23.2.

Python Package Dependencies

  • numpy>=2.0.2
  • onnxruntime-gpu>=1.23.2
  • pandas>=2.2.2,<3.0.0
  • pillow>=11.0.0
  • opencv-python>=4.12.0.88
  • tqdm>=4.66.5

Verify Install

We recommend you download the examples folder within this repository. Download and unarchive the zip folder. Then with the conda environment active:

python -m animl /path/to/example/folder

This should create an Animl-Directory subfolder within the example folder.

Or, if using your own data/models, animl can be given the paths to those files: Download and unarchive the zip folder. Then with the conda environment active:

python -m animl /example/folder --detector /path/to/megadetector --classifier /path/to/classifier --classlist /path/to/classlist.txt

You can use animl in this fashion on any image directory.

Finally you can use the animl.yml config file to specify parameters:

python -m animl /path/to/animl.yml

Usage

Inference

The functionality of animl can be parcelated into its individual functions to suit your data and scripting needs. The sandbox.ipynb notebook has all of these steps available for further exploration.

  1. It is recommended that you use the animl working directory for storing intermediate steps.
import animl
workingdir = animl.WorkingDirectory('/path/to/save/data')
  1. Build the file manifest of your given directory. This will find both images and videos.
files = animl.build_file_manifest('/path/to/images', out_file=workingdir.filemanifest, exif=True)
  1. If there are videos, extract individual frames for processing. Select either the number of frames or fps using the argumments. The other option can be set to None or removed.
allframes = animl.extract_frames(files, frames=3, out_file=workingdir.imageframes, parallel=True)
  1. Pass all images into MegaDetector. We recommend MDv5a. The function parse_MD will convert the json to a pandas DataFrame and merge detections with the original file manifest, if provided.
detector = animl.load_detector('/path/to/mdmodel.pt', model_type="mdv5", device='cuda:0')
mdresults = animl.detect(detector, allframes, resize_width=animl.MEGADETECTORv5_SIZE, resize_height=animl.MEGADETECTORv5_SIZE, 
                         letterbox=True, file_col="frame", device='cuda:0', checkpoint_path=working_dir.mdraw, quiet=True)
detections = animl.parse_detections(mdresults, manifest=allframes, out_file=workingdir.detections)
  1. For speed and efficiency, extract the empty/human/vehicle detections before classification.
animals = animl.get_animals(detections)
empty = animl.get_empty(detections)
  1. Classify using the appropriate species model. Merge the output with the rest of the detections if desired.
classifier, class_list = animl.load_classifier('/path/to/model', '/path/to/classlist.txt', device='cuda:0')
raw_predictions = animl.classify(classifier, animals, resize_width=480, resize_height=480, 
                                 file_col="filepath", batch_size=4, out_file=working_dir.predictions)
  1. Apply labels from class list with or without utilizing timestamp-based sequences.
manifest = animl.single_classification(animals, empty, raw_predictions, class_list['class'])

or, after defining a station column,

manifest = animl.sequence_classification(animals,
                                         empty, 
                                         raw_predictions,
                                         class_list['class'],
                                         station_col='station',
                                         empty_class="",
                                         sort_columns=None,
                                         file_col="filepath",
                                         maxdiff=60)
  1. (OPTIONAL) Save the Pandas DataFrame's required columns to csv and then use it to create json for TimeLapse compatibility
csv_loc = animl.export_timelapse(manifest, imagedir, only_animal = True)
animl.export_megadetector(manifest, out_file ="final_result.json", detector = 'MegaDetector v5a')
  1. (OPTIONAL) Create symlinks within a given directory for file browser access.
manifest = animl.export_folders(manifest, out_dir=working_dir.linkdir, out_file=working_dir.results)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

animl_lite-3.2.0.tar.gz (38.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

animl_lite-3.2.0-py3-none-any.whl (42.7 kB view details)

Uploaded Python 3

File details

Details for the file animl_lite-3.2.0.tar.gz.

File metadata

  • Download URL: animl_lite-3.2.0.tar.gz
  • Upload date:
  • Size: 38.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for animl_lite-3.2.0.tar.gz
Algorithm Hash digest
SHA256 04868549f6f3ade4e73a5aa15cbc53c19e3efe78b03b8cd354459d52949420d5
MD5 0f2e44168fe8747c48e3bbbc22b6bbe0
BLAKE2b-256 8063df6700668faec1573b92b053d6d5ff72d1bf2ae5b2c9fe2c6719a17b1083

See more details on using hashes here.

File details

Details for the file animl_lite-3.2.0-py3-none-any.whl.

File metadata

  • Download URL: animl_lite-3.2.0-py3-none-any.whl
  • Upload date:
  • Size: 42.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for animl_lite-3.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eaa87d4eadee190526fa173fdfbeb3689b364b62792a67ae067f2deaba70a51f
MD5 5fe9ae26c77b8d63f9384a52737c7cd5
BLAKE2b-256 a97e892fc6e74f069500d0b44ef44088770333c20e9e8a6492ed6bc3a8cb2ce1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page