Package: animl
animl-pyAniML 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:animlTable of ContentsInstallationUsageInstallation InstructionsIt is recommended that you set up a conda environment for using animl.
SeeDependenciesbelow for more detail. You will have to activate the conda environment first each
time you want to run AniML from a new terminal.From GitHubgit clone https://github.com/conservationtechlab/animl-py.git
cd animl-py
conda env create --file environment.yml
conda activate animl-gpu
pip install -e .From PyPiWith NVIDIA GPUconda create -n animl-gpu python=3.7
conda activate animl-gpu
conda install cudatoolkit=11.3.1 cudnn=8.2.1
pip install animlCPU onlyconda create -n animl-cpu python=3.7
conda activate animl
pip install animlDependenciesWe recommend running AniML on GPU-enabled hardware. **If using an NVIDIA GPU, ensure driviers, cuda-toolkit and cudnn are installed.
The /models/ and /utils/ modules are from the YOLOv5 repository.https://github.com/ultralytics/yolov5Python Package Dependenciespandas = 1.3.5tensorflow = 2.6torch = 1.13.1torchvision = 0.14.1numpy = 1.19.5cudatoolkit = 11.3.1 **cudnn = 8.2.1 **A full list of dependencies can be found in environment.ymlVerify InstallWe recommend you download theexamplesfolder within this repository.
Download and unarchive the zip folder. Then with the conda environment active:python3 -m animl /path/to/example/folderThis should create an Animl-Directory subfolder within
the example folder.UsageInferenceThe 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.It is recommended that you use the animl working directory for storing intermediate steps.fromanimlimportfile_managementworkingdir=file_management.WorkingDirectory(imagedir)Build the file manifest of your given directory. This will find both images and videos.files=file_management.build_file_manifest('/path/to/images',out_file=workingdir.filemanifest)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.fromanimlimportvideo_processingallframes=video_processing.images_from_videos(files,out_dir=workingdir.vidfdir,out_file=workingdir.imageframes,parallel=True,frames=3,fps=None)Pass all images into MegaDetector. We recommendMDv5aparseMD will merge detections with the original file manifest, if provided.fromanimlimportdetectMD,megadetector,parse_resultsdetector=megadetector.MegaDetector('/path/to/mdmodel.pt')mdresults=detectMD.detect_MD_batch(detector,allframes["Frame"],quiet=True)mdres=parse_results.from_MD(mdresults,manifest=allframes,out_file=workingdir.mdresults)For speed and efficiency, extract the empty/human/vehicle detections before classification.fromanimlimportsplitanimals=split.getAnimals(mdres)empty=split.getEmpty(mdres)Classify using the appropriate species model. Merge the output with the rest of the detections
if desired.fromanimlimportclassify,parse_resultsclassifier=classify.load_classifier('/path/to/classifier/')predresults=classify.predict_species(animals,classifier,batch=4)animals=parse_results.from_classifier(animals,predresults,'/path/to/classlist.txt',out_file=workingdir.predictions)manifest=pd.concat([animals,empty])TrainingTraining workflows are available in the repo but still under development.