Python implementation of Continuous Change Detection


Keywords
python, change, detection
License
Unlicense
Install
pip install lcmap-pyccd==2018.10.17

Documentation

PyCCD - Python Continuous Change Detection

pyccd exists to provide the simplest possible implementation of ccd.

Using PyCCD

>>> import ccd
>>> results = ccd.detect(dates, blues, greens, reds, nirs, swir1s, swir2s, thermals, qas)
>>>
>>> type(results)
<class 'dict'>
>>>
>>> results
{algorithm: 'pyccd:x.x.x',
 processing_mask: [bool, bool, ...],
 snow_prob: float,
 water_prob: float,
 cloud_prob: float,
 change_models: [
     {start_day: int,
      end_day: int,
      break_day: int,
      observation_count: int,
      change_probability: float,
      curve_qa: int,
      blue:      {magnitude: float,
                  rmse: float,
                  coefficients: (float, float, ...),
                  intercept: float},
      green:     {magnitude: float,
                  rmse: float,
                  coefficients: (float, float, ...),
                  intercept: float},
      red:       {magnitude: float,
                  rmse: float,
                  coefficients: (float, float, ...),
                  intercept: float},
      nir:       {magnitude: float,
                  rmse: float,
                  coefficients: (float, float, ...),
                  intercept: float},
      swir1:     {magnitude: float,
                  rmse: float,
                  coefficients: (float, float, ...),
                  intercept: float},
      swir2:     {magnitude: float,
                  rmse: float,
                  coefficients: (float, float, ...),
                  intercept: float},
      thermal:   {magnitude: float,
                  rmse: float,
                  coefficients: (float, float, ...),
                  intercept: float}}
                 ]
}

Default processing parameters can be over-ridden using a dictionary (see parameters.yaml for valid keys):

>>> import ccd
>>> params = {'QA_BITPACKED': False,
              'QA_FILL': 255,
              'QA_CLEAR': 0,
              'QA_WATER': 1,
              'QA_SHADOW': 2,
              'QA_SNOW': 3,
              'QA_CLOUD': 4}
>>> results = ccd.detect(dates, blues, greens, reds, nirs, swir1s, swir2s, thermals, qas, params=params)

Installing

System requirements (Ubuntu)

  • python3-dev
  • gfortran
  • libopenblas-dev
  • liblapack-dev
  • graphviz
  • python-virtualenv

System requirements (Centos)

  • python3-devel
  • gfortran
  • blas-dev
  • lapack-dev
  • graphviz
  • python-virtualenv

It's highly recommended to do all your development & testing in a virtual environment.

user@dev:/home/user/$ mkdir pyccd
user@dev:/home/user/$ cd pyccd
user@dev:/home/user/pyccd$ virtualenv -p python3 .venv
user@dev:/home/user/pyccd$ . .venv/bin/activate
(.venv) user@dev:/home/user/pyccd$

The rest of the command prompts are truncated to $ for readability, but assume an activated virtual environment and pwd as above, or that you know what you are doing.

Clone the repo
$ git clone https://github.com/usgs-eros/lcmap-pyccd.git

or if you have ssh keys set up in github:

$ git clone git@github.com:usgs-eros/lcmap-pyccd.git
Install dev dependencies

Install jupyter notebook and line_profiler

$ pip install -e .[dev]
Install test dependencies
$ pip install -e .[test]

Testing & Running

$ pytest
$ pytest --profile
$ pytest --profile-svg

# pytest-watch
$ ptw

Profiling

Decorate the function to be profiled with @profile and run make profile. Remove decorations before committing code.

Contributing

Contributions to pyccd are most welcome, just be sure to thoroughly review the guidelines first.

Contributing

Developers Guide

Versions

PyCCD previously followed MAJOR.MINOR.PATCH.LABEL semantic versioning but has changed to date based semantic versioning, thus: YYYY.MM.DD[.HH.MM.SS][-label].

PyCCD's version is defined by the ccd/version.py/__version__ attribute ONLY.

See Semantic Versioning.

References

Links