Module DynAIkonTrap.settings

The mechanism by which the tunable settings may be loaded into the system. Whilst this may look complicated at first, it provides a simple method to access all of the settings without needing to index into/get from a dictionary. This also means IDEs are able to perform autocompletion and provide type hints as the settings are unpacked in their respective places in the system.

To load the settings.json file, just run the load_settings() function once and it returns the a Settings object. For example:

settings = load_settings()

camera = DynAIkonTrap.camera.Camera(settings=settings.camera)

The settings.json should ideally be generated by the provided tuner.py script, although manual modifications may be desired.

The JSON file should be structured as follows (of course the values can be changed):

{
    "camera": {
        "framerate": 20,
        "resolution": [640, 480]
    },
    "filter": {
        "motion": {
            "small_threshold": 10,
            "sotv_threshold": 300,
            "iir_cutoff_hz": 1,
            "iir_order": 8,
            "iir_attenuation": 20
        },
        "animal": {
            "threshold": 0.1
        },
        "motion_queue": {
            "smoothing_factor": 1,
            "max_sequence_period_s": 10.0
        }
    },
    "sensor": {
        "port": "/dev/ttyUSB0",
        "baud": 57600,
        "interval_s": 30.0
    },
    "sender": {
        "server": "http://10.42.0.1:8080/trap/",
        "POST": "capture/",
        "device_id": 0,
        "output_format": 0
    }
}

Functions

def load_settings() ‑> Settings

Call this function once to load the settings from settings.json file. If the file is not present some defaults are loaded.

NOTE: these defaults should not be used for anything other than a brief test. Please generate a settings.json for any full deployments (see docs for more info).

Returns

Settings
The settings for all tunable parameters in the system.

Classes

class AnimalFilterSettings (threshold: float = 0.2)

Settings for a AnimalFilter

Class variables

var threshold : float
class CameraSettings (framerate: int = 20, resolution: Tuple[int, int] = (640, 480))

Settings for a Camera

Class variables

var framerate : int
var resolution : Tuple[int, int]
class FilterSettings (motion: MotionFilterSettings = MotionFilterSettings(small_threshold=10, sotv_threshold=300.0, iir_cutoff_hz=2.0, iir_order=3, iir_attenuation=35), animal: AnimalFilterSettings = AnimalFilterSettings(threshold=0.2), motion_queue: MotionQueueSettings = MotionQueueSettings(smoothing_factor=0.5, max_sequence_period_s=10.0))

Settings for a Filter

Class variables

var animalAnimalFilterSettings
var motionMotionFilterSettings
var motion_queueMotionQueueSettings
class MotionFilterSettings (small_threshold: int = 10, sotv_threshold: float = 300.0, iir_cutoff_hz: float = 2.0, iir_order: int = 3, iir_attenuation: int = 35)

Settings for a MotionFilter

Class variables

var iir_attenuation : int
var iir_cutoff_hz : float
var iir_order : int
var small_threshold : int
var sotv_threshold : float
class MotionQueueSettings (smoothing_factor: float = 0.5, max_sequence_period_s: float = 10.0)

Settings for a MotionQueue

Class variables

var max_sequence_period_s : float
var smoothing_factor : float
class OutputFormat (value, names=None, *, module=None, qualname=None, type=None, start=1)

System output format

Ancestors

  • enum.Enum

Class variables

var STILL
var VIDEO
class OutputMode (value, names=None, *, module=None, qualname=None, type=None, start=1)

System output mode

Ancestors

  • enum.Enum

Class variables

var DISK
var SEND
class OutputSettings (device_id: Any = 0, output_format: OutputFormat = OutputFormat.STILL, output_mode: OutputMode = OutputMode.DISK)

OutputSettings(device_id: Any = 0, output_format: DynAIkonTrap.settings.OutputFormat = , output_mode: DynAIkonTrap.settings.OutputMode = )

Subclasses

Class variables

var device_id : Any
var output_formatOutputFormat
var output_modeOutputMode
class SenderSettings (device_id: Any = 0, output_format: OutputFormat = OutputFormat.STILL, output_mode: OutputMode = OutputMode.DISK, server: str = 'http://10.42.0.1:8080/trap/', POST: str = 'capture/')

Settings for a Sender

Ancestors

Class variables

var POST : str
var server : str
class SensorSettings (port: str = '/dev/ttyUSB0', baud: int = 57600, interval_s: float = 30.0)

Settings for a SensorLogs

Class variables

var baud : int
var interval_s : float
var port : str
class Settings (camera: CameraSettings = CameraSettings(framerate=20, resolution=(640, 480)), filter: FilterSettings = FilterSettings(motion=MotionFilterSettings(small_threshold=10, sotv_threshold=300.0, iir_cutoff_hz=2.0, iir_order=3, iir_attenuation=35), animal=AnimalFilterSettings(threshold=0.2), motion_queue=MotionQueueSettings(smoothing_factor=0.5, max_sequence_period_s=10.0)), sensor: SensorSettings = SensorSettings(port='/dev/ttyUSB0', baud=57600, interval_s=30.0), output: Union[SenderSettingsWriterSettings] = WriterSettings(device_id=0, output_format=<OutputFormat.STILL: 1>, output_mode=<OutputMode.DISK: 0>, path=''))

Settings for the camera trap system. A class of nested classes and variables to represent all tunable parameters in the system.

Class variables

var cameraCameraSettings
var filterFilterSettings
var output : Union[SenderSettingsWriterSettings]
var sensorSensorSettings
class WriterSettings (device_id: Any = 0, output_format: OutputFormat = OutputFormat.STILL, output_mode: OutputMode = OutputMode.DISK, path: str = '')

Settings for a Writer

Ancestors

Class variables

var path : str