{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Anomaly Detection in Camera Trap Images - Implementation\n",
    "This is an index file for the implementation part of my bachelor thesis 'Anomaly Detection in Camera Trap Images'."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Approach 1: Lapse Frame Differencing\n",
    "**Note:** Before this approach can be used on a new session, lapse maps have to be generated for this session using *scan_sessions.ipynb*.\n",
    "\n",
    " - *approach1a_basic_frame_differencing.ipynb*: Implementation.\n",
    " - *approach1b_histograms.ipynb*: Discarded similar approach using histogram distribution to compare Lapse and Motion images.\n",
    "\n",
    "## Approach 2: Median Frame Differencing\n",
    " - *approach2_background_estimation.ipynb*: Implementation.\n",
    "\n",
    "## Approach 3: Bag of Visual Words\n",
    "### Notebooks\n",
    " - *approach3_local_features.ipynb*: Visualizations and evaluation of single trainings.\n",
    " - *approach3_boxplot.ipynb*: Boxplot to compare multiple vocabularies generated using random prototypes.\n",
    "\n",
    "### Scripts\n",
    " - *train_bow.py*: Training of BOW model\n",
    " - *eval_bow.py*: Evaluation of BOW model\n",
    "\n",
    "## Approach 4: Autoencoder\n",
    "### Notebooks\n",
    " - *approach4_autoencoder.ipynb*: Visualizations and evaluation of single trainings.\n",
    " - *approach4_boxplot.ipynb*: Boxplot to compare different trainings.\n",
    "\n",
    "### Scripts\n",
    " - *train_autoencoder.py*: Training of autoencoder\n",
    " - *eval_autoencoder.py*: Evaluation of trained autoencoder\n",
    "\n",
    "## Helpers\n",
    " - *analyze_dataset.ipynb*: Dataset statistics, check for duplicates\n",
    " - *analyze_labels.ipynb*: Annotation statistics (number of normal/anomalous motion samples)\n",
    " - *check_csv.ipynb*: Loads annotations from *Kadaverbilder_leer.csv*\n",
    " - *generate_lapseless_session.ipynb*: Generate a session with artificial lapse data from a lapseless session (e.g., Fox_03 -> GFox_03)\n",
    " - *quick_label.py*: Minimal quick labeling script using OpenCV\n",
    " - *read_csv_annotations.ipynb*: Loads annotations from *observations.csv* and *media.csv*\n",
    " - *resize_session.ipynb*: Session preprocessing (crop and resize images)\n",
    " - *scan_sessions.ipynb*: Creates lapse maps (map between lapse images and their EXIF dates), statistics of inconsistencies in sessions\n",
    "\n",
    "## Early experiments\n",
    " - *deprecated/experiments.ipynb*: Early experiments with lapse images and frame differencing"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.10.4 ('pytorch-gpu')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.10.4"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "17cd5c528a3345b75540c61f907eece919c031d57a2ca1e5653325af249173c9"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
