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.
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