How to use this repository: if you know exactly what you are looking for (e.g. you have the paper name) you can Control+F
to search for it in this page (or search in the raw markdown).
- Deep learning projects & frameworks
- Software for working with remote sensing data
- Image dataset creation
- Image chipping/tiling & merging
- Image processing, handling, manipulation
- Image augmentation packages
- Image formats, data management and catalogues
- General utilities
- Low level numerical & data formats
- Graphing and visualisation
- Algorithms
- GDAL & Rasterio
- Cloud Optimised GeoTiff (COG)
- SpatioTemporal Asset Catalog specification (STAC)
- OpenStreetMap
- QGIS
- Parallel processing with Dask
- Jupyter
- Julia language
- Streamlit
- TorchGeo -> PyTorch library providing datasets, samplers, transforms, and pre-trained models specific to geospatial data. 📺 YouTube: TorchGeo with Caleb Robinson
- rastervision -> An open source Python framework for building computer vision models on aerial, satellite, and other large imagery sets. 📺 YouTube: Raster Vision with Adeel Hassan
- segmentation_gym -> A neural gym for training deep learning models to carry out geoscientific image segmentation, uses keras. 📺 YouTube: Satellite image segmentation using the Doodleverse segmentation gym with Dan Buscombe
- sits -> Satellite image time series in R. 📺 YouTube: Satellite image time series with Gilberto Camara
- torchrs -> PyTorch implementation of popular datasets and models in remote sensing
- pytorch-enhance -> Open-source Library of Image Super-Resolution Models, Datasets, and Metrics for Benchmarking or Pretrained Use
- GeoTorchAI -> A Deep Learning and Scalable Data Processing Framework for Raster and Spatio-Temporal Datasets, uses PyTorch and Apache Sedona
- EarthNets -> includes a database of 400 baseline models, and tutorial examples of common deep learning tasks on satellite imagery
- PaddleRS -> remote sensing image processing development kit based on PaddlePaddle. For English see README_EN.md
- mmsegmentation -> Semantic Segmentation Toolbox with support for many remote sensing datasets including LoveDA, Potsdam, Vaihingen & iSAID
- mmrotate -> Open-source toolbox for rotated object detection which is great for detecting randomly oriented objects in huge satellite images
- Myria3D -> Myria3D is a deep learning library designed with a focused scope: the multiclass semantic segmentation of large scale, high density aerial Lidar points cloud.
- Open3D-ML -> Open3D-ML focuses on applications such as semantic point cloud segmentation and provides pretrained models that can be applied to common tasks as well as pipelines for training. It works with TensorFlow and PyTorch.
- DeepHyperX -> A Python/pytorch tool to perform deep learning experiments on various hyperspectral datasets
- DELTA -> Deep Earth Learning, Tools, and Analysis, by NASA is a framework for deep learning on satellite imagery, based on Tensorflow & using MLflow for tracking experiments
- pytorch_eo -> aims to make Deep Learning for Earth Observation data easy and accessible to real-world cases and research alike
- NGVEO -> applying convolutional neural networks (CNN) to Earth Observation (EO) data from Sentinel 1 and 2 using python and PyTorch
- chip-n-scale-queue-arranger by developmentseed -> an orchestration pipeline for running machine learning inference at scale. Supports fastai models
- TorchSat is an open-source deep learning framework for satellite imagery analysis based on PyTorch (no activity since June 2020)
- DeepNetsForEO -> Uses SegNET for working on remote sensing images using deep learning (no activity since 2019)
- RoboSat -> semantic segmentation on aerial and satellite imagery. Extracts features such as: buildings, parking lots, roads, water, clouds (no longer maintained)
- DeepOSM -> Train a deep learning net with OpenStreetMap features and satellite imagery (no activity since 2017)
- mapwith.ai -> AI assisted mapping of roads with OpenStreetMap. Part of Open-Mapping-At-Facebook
- terragpu -> Python library to process and classify remote sensing imagery by means of GPUs and AI/ML
- EOTorchLoader -> Pytorch dataloader and pytorch lightning datamodule for Earth Observation imagery
- satellighte -> an image classification library that consist state-of-the-art deep learning methods, using PyTorch Lightning
- rsi-semantic-segmentation -> A unified PyTorch framework for semantic segmentation from remote sensing imagery, in pytorch, uses DeepLabV3ResNet
- ODEON landcover -> a set of command-line tools performing semantic segmentation on remote sensing images (aerial and/or satellite) with as many layers as you wish
- AiTLAS -> implements state-of-the-art AI methods for exploratory and predictive analysis of satellite images
- aitlas-arena -> An open-source benchmark framework for evaluating state-of-the-art deep learning approaches for image classification in Earth Observation (EO)
- RocketML Deep Neural Networks -> read Satellite Image Classification using rmldnn and Sentinel 2 data
- raster4ml -> A geospatial raster processing library for machine learning
- moonshine -> a Python package that makes it easier to train models on remote sensing data like satellite imagery
A note on licensing: The two general types of licenses for open source are copyleft and permissive. Copyleft requires that subsequent derived software products also carry the license forward, e.g. the GNU Public License (GNU GPLv3). For permissive, options to modify and use the code as one please are more open, e.g. MIT & Apache 2. Checkout choosealicense.com/
- awesome-earthobservation-code -> lists many useful tools and resources
- Orfeo toolbox - remote sensing toolbox with python API (just a wrapper to the C code). Do activites such as pansharpening, ortho-rectification, image registration, image segmentation & classification. Not much documentation.
- QUICK TERRAIN READER - view DEMS, Windows
- dl-satellite-docker -> docker files for geospatial analysis, including tensorflow, pytorch, gdal, xgboost...
- AIDE V2 - Tools for detecting wildlife in aerial images using active learning
- Land Cover Mapping web app from Microsoft
- Solaris -> An open source ML pipeline for overhead imagery
- openSAR -> Synthetic Aperture Radar (SAR) Tools and Documents from Earth Big Data LLC
- YMIR -> YMIR provides a Rapid Data-centric Development Platform for Vision Applications. Read the paper here.
- qhub -> QHub enables teams to build and maintain a cost effective and scalable compute/data science platform in the cloud.
- imagej -> a very versatile image viewer and processing program
- Geo Data Viewer extension for VSCode which enables opening and viewing various geo data formats with nice visualisations
- Datasette is a tool for exploring and publishing data as an interactive website and accompanying API, with SQLite backend. Various plugins extend its functionality, for example to allow displaying geospatial info, render images (useful for thumbnails), and add user authentication. Available as a desktop app. Read Drawing shapes on a map to query a SpatiaLite database
- Photoprism is a privately hosted app for browsing, organizing, and sharing your photo collection, with support for tiffs
- dbeaver is a free universal database tool and SQL client with geospatial features
- Grafana can be used to make interactive dashboards, checkout this example showing Point data. Note there is an AWS managed service for Grafana
- litestream -> Continuously stream SQLite changes to S3-compatible storage
- ImageFusion) -> Temporal fusion of raster image time-Series
- nvtop -> NVIDIA GPUs htop like monitoring tool
- rgis -> Geospatial data viewer written in Rust
- aerialbot -> A simple yet highly configurable bot that tweets geotagged aerial imagery of a random location in the world
- SatDump -> A generic satellite data processing software.
- EOdal -> a Python library enabling the acquisition, organization, and analysis of EO data in a completely open-source manner within a unified framework.
Many datasets on kaggle & elsewhere have been created by screen-clipping Google Maps or browsing web portals. The tools below are to create datasets programatically
- MapTilesDownloader -> A super easy to use map tiles downloader built using Python
- jimutmap -> get enormous amount of high resolution satellite images from apple / google maps quickly through multi-threading
- google-maps-downloader -> A short python script that downloads satellite imagery from Google Maps
- ExtractSatelliteImagesFromCSV -> extract satellite images using a CSV file that contains latitude and longitude, uses mapbox
- sentinelsat -> Search and download Copernicus Sentinel satellite images
- SentinelDownloader -> a high level wrapper to the SentinelSat that provides an object oriented interface, asynchronous downloading, quickview & simpler searching methods
- GEES2Downloader -> Downloader for GEE S2 bands
- Sentinel-2 satellite tiles images downloader from Copernicus -> Minimizes data download and combines multiple tiles to return a single area of interest
- felicette -> Satellite imagery for dummies. Generate JPEG earth imagery from coordinates/location name with publicly available satellite data
- Easy Landsat Download
- A simple python scrapper to get satellite images of Africa, Europe and Oceania's weather using the Sat24 website
- RGISTools -> Tools for Downloading, Customizing, and Processing Time Series of Satellite Images from Landsat, MODIS, and Sentinel
- DeepSatData -> Automatically create machine learning datasets from satellite images
- landsat_ingestor -> Scripts and other artifacts for landsat data ingestion into Amazon public hosting
- satpy -> a python library for reading and manipulating meteorological remote sensing data and writing it to various image and data file formats
- GIBS-Downloader -> a command-line tool which facilitates the downloading of NASA satellite imagery and offers different functionalities in order to prepare the images for training in a machine learning pipeline
- eodag -> Earth Observation Data Access Gateway
- pylandsat -> Search, download, and preprocess Landsat imagery
- landsatxplore -> Search and download Landsat scenes from EarthExplorer
- OpenSarToolkit -> High-level functionality for the inventory, download and pre-processing of Sentinel-1 data in the python language
- lsru -> Query and Order Landsat Surface Reflectance data via ESPA
- eoreader -> Remote-sensing opensource python library reading optical and SAR sensors, loading and stacking bands, clouds, DEM and index in a sensor-agnostic way
- Export thumbnails from Earth Engine
- deepsentinel-osm -> A repository to generate land cover labels from OpenStreetMap
- img2dataset -> Easily turn large sets of image urls to an image dataset. Can download, resize and package 100M urls in 20h on one machine
- ohsome2label -> Historical OpenStreetMap (OSM) Objects to Machine Learning Training Samples
- Label Maker -> a library for creating machine-learning ready data by pairing satellite images with OpenStreetMap (OSM) vector data
- sentinel2tools -> downloading & basic processing of Sentinel 2 imagesry. Read Sentinel2tools: simple lib for downloading Sentinel-2 satellite images
- Aerial-Satellite-Imagery-Retrieval -> A program using Bing maps tile system to automatically download Aerial / Satellite Imagery given a lat/lon bounding box and level of detail
- google-maps-at-88-mph -> Google Maps keeps old satellite imagery around for a while – this tool collects what's available for a user-specified region in the form of a GIF
- srtmDownloader -> Python library (multi-threaded) for retrieving SRTM elevation map of CGIAR-CSI
- ImageDatasetViz -> create a mosaic of images in a dataset for previewing purposes
- landsatlinks -> A simple CLI interface to generate download urls for Landsat Collection 2 Level 1 product bundles
- pyeo -> a set of portable, extensible and modular Python scripts for machine learning in earth observation and GIS, including downloading, preprocessing, creation of base layers, classification and validation.
- metaearth -> Download and access remote sensing data from any platform
- geoget -> Download geodata for anywhere in Earth via ladsweb.modaps.eosdis.nasa.gov
- geeml -> A python package to extract Google Earth Engine data for machine learning
- xlandsat -> A Python package for handling Landsat scenes from EarthExplorer with xarray
- tms2geotiff -> Download tiles from Tile Map Server (online maps) and make a large geo-referenced image
Since raw images can be very large, it is usually necessary to chip/tile them into smaller images before annotation & training
- image_slicer -> Split images into tiles. Join the tiles back together
- tiler by nuno-faria -> split images into tiles and merge tiles into a large image
- tiler by the-lay -> N-dimensional NumPy array tiling and merging with overlapping, padding and tapering
- xbatcher -> Xbatcher is a small library for iterating xarray DataArrays in batches. The goal is to make it easy to feed xarray datasets to machine learning libraries such as Keras
- GeoTagged_ImageChip -> A simple script to create geo tagged image chips from high resolution RS iamges for training deep learning models such as Unet
- geotiff-crop-dataset -> A Pytorch Dataloader for tif image files that dynamically crops the image
- Train-Test-Validation-Dataset-Generation -> app to crop images and create small patches of a large image e.g. Satellite/Aerial Images, which will then be used for training and testing Deep Learning models specifically semantic segmentation models
- satproc -> Python library and CLI tools for processing geospatial imagery for ML
- Sliding Window -> break large images into a series of smaller chunks
- patchify -> A library that helps you split image into small, overlappable patches, and merge patches into original image
- split-rs-data -> Divide remote sensing images and their labels into data sets of specified size
- image-reconstructor-patches -> Reconstruct Image from Patches with a Variable Stride
- rpc_cropper -> A small standalone tool to crop satellite images and their RPC
- geotile -> python library for tiling the geographic raster data
- GeoPatch -> generating patches from remote sensing data
- ImageTilingUtils -> Minimalistic set of image reader agnostic tools to easily iterate over large images
- split_raster -> Creates a tiled output from an input raster dataset. pip installable
- SAHI -> Utilties for slicing COCO formatted annotations and image files, performing sliced inference using MMDetection, Detectron2, YOLOv5, HuggingFace detectors and calculating AP over image slices.
- geo2ml -> Python library and module for converting earth observation data to be suitable for machine learning models, Converting vector data to COCO and YOLO formats and creating required dataset files, Rasterizing polygon geometries for semantic segmentation tasks, Tiling larger rasters and shapefiles into smaller patches
- Pillow is the Python Imaging Library -> this will be your go-to package for image manipulation in python
- opencv-python is pre-built CPU-only OpenCV packages for Python
- kornia is a differentiable computer vision library for PyTorch, like openCV but on the GPU. Perform image transformations, epipolar geometry, depth estimation, and low-level image processing such as filtering and edge detection that operate directly on tensors.
- tifffile -> Read and write TIFF files
- xtiff -> A small Python 3 library for writing multi-channel TIFF stacks
- geotiff -> A noGDAL tool for reading and writing geotiff files
- geolabel-maker -> combine satellite or aerial imagery with vector spatial data to create your own ground-truth dataset in the COCO format for deep-learning models
- imagehash -> Image hashes tell whether two images look nearly identical
- fake-geo-images -> A module to programmatically create geotiff images which can be used for unit tests
- imagededup -> Finding duplicate images made easy! Uses perceptual hashing
- duplicate-img-detection -> A basic duplicate image detection service using perceptual image hash functions and nearest neighbor search, implemented using faiss, fastapi, and imagehash
- rmstripes -> Remove stripes from images with a combined wavelet/FFT approach
- activeloopai Hub -> The fastest way to store, access & manage datasets with version-control for PyTorch/TensorFlow. Works locally or on any cloud. Scalable data pipelines.
- sewar -> All image quality metrics you need in one package
- Satellite imagery label tool -> provides an easy way to collect a random sample of labels over a given scene of satellite imagery
- Missing-Pixel-Filler -> given images that may contain missing data regions (like satellite imagery with swath gaps), returns these images with the regions filled
- color_range_filter -> a script that allows us to find range of colors in images using openCV, and then convert them into geo vectors
- eo4ai -> easy-to-use tools for preprocessing datasets for image segmentation tasks in Earth Observation
- rasterix -> a cross-platform utility built around the GDAL library and the Qt framework designed to process geospatial raster data
- datumaro -> Dataset Management Framework, a Python library and a CLI tool to build, analyze and manage Computer Vision datasets
- sentinelPot -> a python package to preprocess Sentinel 1&2 imagery
- ImageAnalysis -> Aerial imagery analysis, processing, and presentation scripts.
- rastertodataframe -> Convert any GDAL compatible raster to a Pandas DataFrame
- yeoda -> provides lower and higher-level data cube classes to work with well-defined and structured earth observation data
- tiles-to-tiff -> Python script for converting XYZ raster tiles for slippy maps to a georeferenced TIFF image
- telluric -> a Python library to manage vector and raster geospatial data in an interactive and easy way
- Sniffer -> A python application for sorting through geospatial imagery
- pyjeo -> a library for image processing for geospatial data implemented in JRC Ispra, with paper
- vpv -> Image viewer designed for image processing experts
- arop -> Automated Registration and Orthorectification Package
- satellite_image -> Python package to process images from Landsat satellites and return geographic information, cloud mask, numpy array, geotiff
- large_image -> Python modules to work with large multiresolution images
- ResizeRight -> The correct way to resize images or tensors. For Numpy or Pytorch (differentiable)
- pysat -> a package providing a simple and flexible interface for downloading, loading, cleaning, managing, processing, and analyzing scientific measurements
- plcompositor -> c++ tool from Planet to create seamless and cloudless image mosaics from deep stacks of satellite imagery
Image augmentation is a technique used to expand a training dataset in order to improve ability of the model to generalise
- AugLy -> A data augmentations library for audio, image, text, and video. By Facebook
- albumentations -> Fast image augmentation library and an easy-to-use wrapper around other libraries
- FoHIS -> Towards Simulating Foggy and Hazy Images and Evaluating their Authenticity
- Kornia provides augmentation on the GPU
- toolbox by ming71 -> various cv tools, such as label tools, data augmentation, label conversion, etc.
- AstroAugmentations -> augmentations designed around astronomical instruments
- Chessmix -> data augmentation method for remote sensing semantic segmentation
- satellite_object_augmentation -> Object-based augmentation for remote sensing images segmentation via CNN
- hypernet -> hyperspectral data augmentation
- GeoServer -> an open source server for sharing geospatial data
- Open Data Cube - serve up cubes of data https://www.opendatacube.org/
- https://terria.io/ for pretty catalogues
- Large datasets may come in HDF5 format, can view with -> https://www.hdfgroup.org/downloads/hdfview/
- Climate data is often in netcdf format, which can be opened using xarray
- TileDB -> a 'Universal Data Engine' to store, analyze and share any data (beyond tables), with any API or tool (beyond SQL) at planet-scale (beyond clusters), open source and managed options.
- Read about Serverless PostGIS on AWS Aurora
- Hub -> The fastest way to store, access & manage datasets with version-control for PyTorch/TensorFlow. Works locally or on any cloud. Read Faster Machine Learning Using Hub by Activeloop: A code walkthrough of using the hub package for satellite imagery
- A Comparison of Spatial Functions: PostGIS, Athena, PrestoDB, BigQuery vs RedShift
- Unfolded Studio -> visualization platform building on open source geospatial technologies including kepler.gl, deck.gl and H3. Processing is performed browser side enabling very responsive visualisations.
- DroneDB -> can index and extract useful information from the EXIF/XMP tags of aerial images to display things like image footprint, flight path and image GPS location
- embeddinghub -> A vector database for machine learning embeddings
- Resonant GeoData -> a Django application well suited for catalogging and searching annotated geospatial imagery, shapefiles, and full motion video datasets
- fastdup -> a tool for gaining insights from a large image collection. It can find anomalies, duplicate and near duplicate images
- Nucleus is a platform for image dataset management with advanced features including autotagging and finding instances with mismatched predictions & annotations
Scripts and command line applications
- geospatial-cli -> a collection of geospatial programs with commandline interface
- PyShp -> The Python Shapefile Library (PyShp) reads and writes Shapefiles in pure Python
- s2p -> a Python library and command line tool that implements a stereo pipeline which produces elevation models from images taken by high resolution optical satellites such as Pléiades, WorldView, QuickBird, Spot or Ikonos
- EarthPy -> A set of helper functions to make working with spatial data in open source tools easier. readExploratory Data Analysis (EDA) on Satellite Imagery Using EarthPy
- pygeometa -> provides a lightweight and Pythonic approach for users to easily create geospatial metadata in standards-based formats using simple configuration files
- GEOS -> Google Earth Overlay Server (GEOS) is a python-based server for creating Google Earth overlays of tiled maps. Your can also display maps in the web browser, measure distances and print maps as high-quality PDF’s.
- GeoDjango intends to be a world-class geographic Web framework. Its goal is to make it as easy as possible to build GIS Web applications and harness the power of spatially enabled data. Some features of GDAL are supported.
- rasterstats -> summarize geospatial raster datasets based on vector geometries
- turfpy -> a Python library for performing geospatial data analysis which reimplements turf.js
- rsgislib -> Remote Sensing and GIS Software Library; python module tools for processing spatial and image data
- eo-learn -> seamlessly access and process spatio-temporal image sequences acquired by any satellite fleet in a timely and automatic manner. See eo-learn-examples
- RStoolbox: Tools for Remote Sensing Data Analysis in R
- nd -> Framework for the analysis of n-dimensional, multivariate Earth Observation data, built on xarray
- reverse-geocoder -> a fast, offline reverse geocoder in Python
- MuseoToolBox -> a python library to simplify the use of raster/vector, especially for machine learning and remote sensing
- py6s -> an interface to the Second Simulation of the Satellite Signal in the Solar Spectrum (6S) atmospheric Radiative Transfer Model
- timvt -> PostGIS based Vector Tile server built on top of the modern and fast FastAPI framework
- titiler -> A dynamic Web Map tile server using FastAPI
- BRAILS -> an AI-based pipeline for city-scale building information modelling (BIM)
- color-thief-py -> Grabs the dominant color or a representative color palette from an image
- force -> an all-in-one processing engine for medium-resolution Earth Observation image archives
- mapwarper -> an open source map geo-rectification, warping and georeferencing application
- sarpy -> A basic Python library to demonstrate reading, writing, display, and simple processing of complex SAR data using the NGA SICD standard
- buzzard -> Advanced raster and geometry manipulations
- sentinel1denoised -> Thermal noise subtraction, scalloping correction, angular correction
- RStoolbox -> Remote Sensing Data Analysis in R
- kart -> Distributed version-control for geospatial and tabular data
- picogeojson -> a Python library for reading, writing, and working with GeoJSON
- shareloc -> a simple remote sensing geometric library, to perform image coordinates projections between sensor and ground and vice versa
- geoblaze -> Blazing Fast JavaScript Raster Processing Engine
- nasa-wildfires -> Download wildfire hotspots detected by NASA satellites and the Fire Information for Resource Management System (FIRMS)
- SSGP-toolbox -> Simple Spatial Gapfilling Processor. Toolbox for filling gaps in spatial datasets
- imgreg2D -> 2D image registration in python, using napari
- georust -> A collection of geospatial tools and libraries written in Rust
- DataPillager -> Download data from Esri REST service
- litexplore -> a Python web app that lets you explore remote SQLite databases over SSH connections
- tifeatures -> Simple and Fast Geospatial Features API for PostGIS
- pyroSAR -> framework for large-scale SAR satellite data processing
- S1_NRB -> A prototype processor for the Sentinel-1 Normalised Radar Backscatter product
- AGBench -> a Python library that benchmarks satellite-based aboveground biomass or carbon estimate maps
- mbtiles-s3-server -> Python server to on-the-fly extract and serve vector tiles from an mbtiles file on S3
- matico -> a set of tools and services that allow users to manage geospatial datasets, build APIs that use those datasets and full geospatial applications with little to no code
- gmtsar -> easy and fast satellite interferometry (InSAR) processing
- image_tiles -> a simple but flexible tool to view a folder full of images on your web browser
- sen2mosaic -> a set of tools to aid in the production of large-scale cloud-free seasonal mosaic products from Sentinel-2 data
- xarray -> N-D labeled arrays and datasets. Read Handling multi-temporal satellite images with Xarray. Checkout xarray_leaflet for tiled map plotting and sklearn-xarray for metadata-aware machine learning. Publish Xarray Datasets via a REST API uisng xpublish
- wxee -> Export data from GEE to xarray using wxee then train with pytorch or tensorflow models. Useful since GEE only suports tfrecord export natively
- xarray-spatial -> Fast, Accurate Python library for Raster Operations. Implements algorithms using Numba and Dask, free of GDAL
- datatree -> WIP implementation of a tree-like hierarchical data structure for xarray
- xarray-beam -> Distributed Xarray with Apache Beam by Google
- Geowombat -> geo-utilities applied to air and space-borne imagery, uses Rasterio, Xarray and Dask for I/O and distributed computing with named coordinates. Create Land Use Classification using Geowombat & Sklearn
- NumpyTiles -> a specification for providing multiband full-bit depth raster data in the browser
- Zarr -> Zarr is a format for the storage of chunked, compressed, N-dimensional arrays. Zarr depends on NumPy
- geoparquet -> Specification for storing geospatial vector data (point, line, polygon) in Parquet
- TFRecord reader for PyTorch
- hvplot -> A high-level plotting API for the PyData ecosystem built on HoloViews. Allows overlaying data on map tiles, see Exploring USGS Terrain Data in COG format using hvPlot
- Pyviz examples include several interesting geospatial visualisations
- napari -> napari is a fast, interactive, multi-dimensional image viewer for Python. It’s designed for browsing, annotating, and analyzing large multi-dimensional images. By integrating closely with the Python ecosystem, napari can be easily coupled to leading machine learning and image analysis tools. Note that to view a 3GB COG I had to install the napari-tifffile-reader plugin.
- pixel-adjust -> Interactively select and adjust specific pixels or regions within a single-band raster. Built with rasterio, matplotlib, and panel.
- Plotly Dash can be used for making interactive dashboards
- folium -> a python wrapper to the excellent leaflet.js which makes it easy to visualize data that’s been manipulated in Python on an interactive leaflet map. Also checkout the streamlit-folium component for adding folium maps to your streamlit apps
- ipyearth -> An IPython Widget for Earth Maps
- geopandas-view -> Interactive exploration of GeoPandas GeoDataFrames
- geogif -> Turn xarray timestacks into GIFs
- leafmap -> geospatial analysis and interactive mapping with minimal coding in a Jupyter environment
- xmovie -> A simple way of creating movies from xarray objects
- acquisition-time -> Drawing (Satellite) acquisition dates in a timeline
- splot -> Lightweight plotting for geospatial analysis in PySAL
- prettymaps -> A small set of Python functions to draw pretty maps from OpenStreetMap data
- Tools to Design or Visualize Architecture of Neural Network
- AstronomicAL -> An interactive dashboard for visualisation, integration and classification of data using Active Learning
- pyodi -> A simple tool for explore your object detection dataset
- Interactive-TSNE -> a tool that provides a way to visually view a PyTorch model's feature representation for better embedding space interpretability
- fastgradio -> Build fast gradio demos of fastai learners
- pysheds -> Simple and fast watershed delineation in python
- mapboxgl-jupyter -> Use Mapbox GL JS to visualize data in a Python Jupyter notebook
- cartoframes -> integrate CARTO maps, analysis, and data services into data science workflows
- datashader -> create meaningful representations of large datasets quickly and flexibly. Read Creating Visual Narratives from Geospatial Data Using Open-Source Technology Maxar blog post
- Kaleido -> Fast static image export for web-based visualization libraries with zero dependencies
- Embedding Projector in Wandb -> allows users to plot multi-dimensional embeddings on a 2D plane using common dimension reduction algorithms like PCA, UMAP, and t-SNE
- PlotNeuralNet -> Latex code for making neural networks diagrams
- Damage Assessment Visualizer -> leverages satellite imagery from a disaster region to visualize conditions of building and structures before and after a disaster
- NN-SVG -> is a tool for creating Neural Network (NN) architecture drawings parametrically rather than manually
- bbox-visualizer -> Make drawing and labeling bounding boxes easy as cake
- jupyter-bbox-widget -> A Jupyter widget for annotating images with bounding boxes
- EOmaps -> A library to create interactive maps of geographical datasets
- H3-Pandas -> Integrates H3 with GeoPandas and Pandas
- gmplot -> a matplotlib-like interface to render all the data you'd like on top of Google Maps
- NPYViewer -> a simple GUI tool that provides multiple ways to view
.npy
files containing 2D NumPy Arrays - pyGEOVis -> Visualize geo-tiff/json based on folium
- bokeh-tiler -> Tile large geospatial images for use in Bokeh. Read Serving up SpaceNet Imagery for Bokeh
- torchshow -> Visualize PyTorch tensor in one-line of code
- pixels -> Mapping and charting pixels from remote sensing Earth observation data with JavaScript
- MulimgViewer -> a multi-image viewer that can open multiple images in one interface
- cnn-explainer -> Learning Convolutional Neural Networks with Interactive Visualization
- Overlay-GeoTiff-Raster-with-nodata-On-Interactive-Map
- shapefile2gif -> Given a shapefile with time-annotated vector objects (e.g., building footprints + construction year), this script will automatically create an animated GIF illustrating the dynamics for a user-specified period of time
- insat3d_imagen -> Processes INSAT HDF file and generates satellite images
- pygieons -> A simple package to visualize and keep track of GIS and Earth Observation libraries in Python
- regionmask -> Create masks of geographical regions for arbitrary longitude and latitude grids
- How to Use t-SNE Effectively
- WaterDetect -> an end-to-end algorithm to generate open water cover mask, specially conceived for L2A Sentinel 2 imagery. It can also be used for Landsat 8 images and for other multispectral clustering/segmentation tasks.
- GatorSense Hyperspectral Image Analysis Toolkit -> This repo contains algorithms for Anomaly Detectors, Classifiers, Dimensionality Reduction, Endmember Extraction, Signature Detectors, Spectral Indices
- detectree -> Tree detection from aerial imagery
- pylandstats -> compute landscape metrics
- dg-calibration -> Coefficients and functions for calibrating DigitalGlobe imagery
- python-fmask -> Implementation in Python of the cloud and shadow algorithms known collectively as Fmask
- pyshepseg -> Python implementation of image segmentation algorithm of Shepherd et al (2019) Operational Large-Scale Segmentation of Imagery Based on Iterative Elimination.
- Shadow-Detection-Algorithm-for-Aerial-and-Satellite-Images -> shadow detection and correction algorithm
- faiss -> A library for efficient similarity search and clustering of dense vectors, e.g. image embeddings
- awesome-spectral-indices -> A ready-to-use curated list of Spectral Indices for Remote Sensing applications
- urban-footprinter -> A convolution-based approach to detect urban extents from raster datasets
- ocean_color -> Tools and algorithms for drone and satellite based ocean color science
- poliastro -> pure Python library for interactive Astrodynamics and Orbital Mechanics, with a focus on ease of use, speed, and quick visualization
- acolite -> generic atmospheric correction module
- pmapper -> a super-resolution and deconvolution toolkit for python. PMAP stands for Poisson Maximum A-Posteriori, a highly flexible and adaptable algorithm for these problems
- pylandtemp -> Algorithms for computing global land surface temperature and emissivity from NASA's Landsat satellite images with Python
- sarsen -> Algorithms and utilities for Synthetic Aperture Radar (SAR) sensors
- sun-position -> code for computing sun position
- simple_ortho -> Fast and simple orthorectification of images with known DEM and camera model
- imageResolution -> Simple spatial resolution calculator for nadir & oblique aerial imagery
- Spectral-Clustering -> normalized and unnormalized spectral clustering algorithms
- Fogpy -> nowcasting of fog and low stratus clouds
- orthorectification -> Orthorectification in Python. Note that all of this functionality already exists in libraries like GDAL and others. The goal of this codebase was to present and deep dive into these subroutines
- Flood-Severity-Estimation -> estimate the height of the water in geo-referenced photos that depict floods using DEMs from JAXA
- coastline-extraction -> Methods to identify and extract coastline from remote sensed data
- Near real-time shadow detection and removal in remote sensing imagery application
- image-registration -> using Point Feature Detection, Normalized DLT, RANSAC & Image Warping
- pyTSEB -> A python Two Source Energy Balance model for estimation of evapotranspiration with remote sensing data
- libpredict -> satellite orbit prediction library
- GOTCHA -> Command line implementation of the GOTCHA stereo matching algorithm
- SREM -> A Simplified and Robust Surface Reflectance Estimation Method for Satellite Imagery
- kaizen -> A library to map match and help tackle the problem of overlapping/intersecting road and building footprint that arises in the process of map making
- CoastSat.PlanetScope -> Batch shoreline extraction toolkit for PlanetScope Dove satellite imagery
- mappymatch -> Pure-python package for map matching
So improtant this pair gets their own section. GDAL is THE command line tool for reading and writing raster and vector geospatial data formats. If you are using python you will probably want to use Rasterio which provides a pythonic wrapper for GDAL
- GDAL and on twitter
- GDAL is a dependency of Rasterio and can be difficult to build and install. I recommend using conda, brew (on OSX) or docker in these situations
- GDAL docker quickstart:
docker pull osgeo/gdal
thendocker run --rm -v $(pwd):/data/ osgeo/gdal gdalinfo /data/cog.tiff
- Even Rouault maintains GDAL, please consider sponsoring him
- Rasterio -> reads and writes GeoTIFF and other raster formats and provides a Python API based on Numpy N-dimensional arrays and GeoJSON. There are a variety of plugins that extend Rasterio functionality.
- rio-cogeo -> Cloud Optimized GeoTIFF (COG) creation and validation plugin for Rasterio.
- rioxarray -> geospatial xarray extension powered by rasterio
- aws-lambda-docker-rasterio -> AWS Lambda Container Image with Python Rasterio for querying Cloud Optimised GeoTiffs. See this presentation
- godal -> golang wrapper for GDAL
- Write rasterio to xarray
- Loam: A Client-Side GDAL Wrapper for Javascript
- Short list of useful GDAL commands while working in data science for remote sensing
- gdal-segment -> implements various segmentation algorithms over raster images
- aws-gdal-robot -> A proof of concept implementation of running GDAL based jobs using AWS S3/Lambda/Batch
- gdal2tiles -> A python library for generating map tiles based on gdal2tiles.py from GDAL project
- gdal3.js -> Convert raster and vector geospatial data to various formats and coordinate systems entirely in the browser
A Cloud Optimized GeoTIFF (COG) is a regular GeoTIFF that supports HTTP range requests, enabling downloading of specific tiles rather than the full file. COG generally work normally in GIS software such as QGIS, but are larger than regular GeoTIFFs
- https://www.cogeo.org/
- cog-best-practices
- COGs in production
- rio-cogeo -> Cloud Optimized GeoTIFF (COG) creation and validation plugin for Rasterio.
- aiocogeo -> Asynchronous cogeotiff reader (python asyncio)
- Landsat data in cloud optimised (COG) format analysed for NVDI with medium article Cloud Native Geoprocessing of Earth Observation Satellite Data with Pangeo.
- Working with COGS and STAC in python using geemap
- Load, Experiment, and Download Cloud Optimized Geotiffs (COG) using Python with Google Colab -> short read which covers finding COGS, opening with Rasterio and doing some basic manipulations, all in a Colab Notebook.
- Exploring USGS Terrain Data in COG format using hvPlot -> local COG from public AWS bucket, open with rioxarray, visualise with hvplot. See the Jupyter notebook
- aws-lambda-docker-rasterio -> AWS Lambda Container Image with Python Rasterio for querying Cloud Optimised GeoTiffs. See this presentation
- cogbeam -> a python based Apache Beam pipeline, optimized for Google Cloud Dataflow, which aims to expedite the conversion of traditional GeoTIFFs into COGs
- cogserver -> Expose a GDAL file as a HTTP accessible on-the-fly COG
- Displaying a gridded dataset on a web-based map - Step by step guide for displaying large GeoTIFFs, using Holoviews, Bokeh, and Datashader
- cog_worker -> Scalable arbitrary analysis on COGs
The STAC specification provides a common metadata specification, API, and catalog format to describe geospatial assets, so they can more easily indexed and discovered.
- Spec at https://github.com/radiantearth/stac-spec
- STAC 1.0.0: The State of the STAC Software Ecosystem
- Planet Disaster Data catalogue has the catalogue source on Github and uses the stac-browser
- Getting Started with STAC APIs intro article
- SpatioTemporal Asset Catalog API specification -> an API to make geospatial assets openly searchable and crawlable
- stacindex -> STAC Catalogs, Collections, APIs, Software and Tools
- Several useful repos on https://github.com/sat-utils
- Intake-STAC -> Intake-STAC provides an opinionated way for users to load Assets from STAC catalogs into the scientific Python ecosystem. It uses the intake-xarray plugin and supports several file formats including GeoTIFF, netCDF, GRIB, and OpenDAP.
- sat-utils/sat-search -> Sat-search is a Python 3 library and a command line tool for discovering and downloading publicly available satellite imagery using STAC compliant API
- franklin -> A STAC/OGC API Features Web Service focused on ease-of-use for end-users.
- stacframes -> A Python library for working with STAC Catalogs via Pandas DataFrames
- sat-api-pg -> A Postgres backed STAC API
- stactools -> Command line utility and Python library for STAC
- pystac -> Python library for working with any STAC Catalog
- STAC Examples for Nightlights data -> minimal example STAC implementation for the Light Every Night dataset of all VIIRS DNB and DMSP-OLS nighttime satellite data
- stackstac -> Turn a STAC catalog into a dask-based xarray
- stac-fastapi -> STAC API implementation with FastAPI
- stac-fastapi-elasticsearch -> Elasticsearch backend for stac-fastapi
- ml-aoi -> An Item and Collection extension to provide labeled training data for machine learning models
- Discoverable and Reusable ML Workflows for Earth Observation -> part 1 and part 2 with the Geospatial Machine Learning Model Catalog (GMLMC)
- eoAPI -> Earth Observation API with STAC + dynamic Raster/Vector Tiler
- stac-nb -> STAC in Jupyter Notebooks
- xstac -> Generate STAC Collections from xarray datasets
- qgis-stac-plugin -> QGIS plugin for reading STAC APIs
- cirrus-geo -> a STAC-based processing pipeline
- stac-interactive-search -> A simple (browser based) UI for searching STAC APIs
- easystac -> A Python package for simple STAC queries
- stacmap -> Explore STAC items with an interactive map
- odc-stac -> Load STAC items into xarray Datasets. Process locally or distribute data loading and computation with Dask.
- AWS Lambda SenCloud Monitoring -> keep up-to-date your own derived data from the Sentinel-2 COG imagery archive using AWS lambda
- stac-geoparquet -> Convert STAC items to geoparquet
- labs-gpt-stac -> connect ChatGPT to a STAC API backend
- stac_ipyleaflet -> stac_ipyleaflet is a customized version of ipyleaflet built to be an in-jupyter-notebook interactive mapping library that prioritizes access to STAC catalog data
- prefect-planetary-computer -> Prefect integrations with Microsoft Planetary Computer
OpenStreetMap (OSM) is a map of the world, created by people like you and free to use under an open license. Quite a few publications use OSM data for annotations & ground truth. Note that the data is created by volunteers and the quality can be variable
- osmnx -> Retrieve, model, analyze, and visualize data from OpenStreetMap
- ohsome2label -> Historical OpenStreetMap Objects to Machine Learning Training Samples
- Label Maker -> downloads OpenStreetMap QA Tile information and satellite imagery tiles and saves them as an
.npz
file for use in machine learning training. This should be used instead of the deprecated skynet-data - prettymaps -> A small set of Python functions to draw pretty maps from OpenStreetMap data
- Joint Learning from Earth Observation and OpenStreetMap Data to Get Faster Better Semantic Maps -> fusion based architectures and coarse-to-fine segmentation to include the OpenStreetMap layer into multispectral-based deep fully convolutional networks, arxiv paper
- Identifying Buildings in Satellite Images with Machine Learning and Quilt -> NDVI & edge detection via gaussian blur as features, fed to TPOT for training with labels from OpenStreetMap, modelled as a two class problem, “Buildings” and “Nature”
- Import OpenStreetMap data into Unreal Engine 4
- OSMDeepOD -> perform object detection with retinanet
- Match Bing Map Aerial Imagery with OpenStreetMap roads
- Computer Vision With OpenStreetMap and SpaceNet — A Comparison
- url-map -> A tiny web app to create images from OpenStreetMap maps
- Label Maker -> a library for creating machine-learning ready data by pairing satellite images with OpenStreetMap (OSM) vector data
- baremaps -> Create custom vector tiles from OpenStreetMap and other data sources with Postgis and Java.
- osm2streets -> Convert OSM to street networks with detailed geometry
A popular open source alternative to ArcGIS, QGIS is a desktop appication written in python and extended with plugins which are essentially python scripts
- QGIS
- Create, edit, visualise, analyse and publish geospatial information. Open source alternative to ArcGIS.
- Python scripting
- Create your own plugins using the QGIS Plugin Builder
- DeepLearningTools plugin -> aid training Deep Learning Models
- Mapflow.ai plugin -> various models to extract building footprints etc from Maxar imagery
- dzetsaka plugin -> classify different kind of vegetation
- Coregistration-Qgis-processing -> Qgis processing plugin for image co-registration; projection and pixel alignment based on a target image, uses Arosics
- qgis-stac-plugin -> QGIS plugin for reading STAC APIs
- buildseg -> a building extraction plugin of QGIS based on ONNX
- deep-learning-datasets-maker -> a QGIS plugin to make datasets creation easier for raster and vector data
- Modzy-QGIS-Plugin -> demos Vehicle Detection model
- kart -> provides modern, open source, distributed version-control for geospatial and tabular datasets
- Plugin for Landcover Classification -> capable of implementing machine learning algorithms such as Random forest, SVM and CNN algorithms such as UNET through a simple GUI framework.
- [pg_tileserv])(https://github.com/CrunchyData/pg_tileserv) -> A very thin PostGIS-only tile server in Go. Takes in HTTP tile requests, executes SQL, returns MVT tiles.
- pg_featureserv -> Lightweight RESTful Geospatial Feature Server for PostGIS in Go
- osm-instance-segmentation -> QGIS plugin for finding changes in vector data from orthophotos (i.e. aerial imagery) using tensorflow
- Semi-Automatic Classification Plugin -> supervised classification of remote sensing images, providing tools for the download, the preprocessing and postprocessing of images
- chippy-checker-editor -> QGIS plugin for viewing and editing labeled remote sensing images
- qgis-plugin-deepness -> Plugin for neural network inference in QGIS: segmentation, regression and detection
Dask provides advanced parallelism and distributed out-of-core computation with a dask.dataframe
module designed to scale pandas.
- Dask -> works with your PyData libraries to provide performance at scale
- Coiled -> a managed Dask service. Get started by reading Democratizing Satellite Imagery Analysis with Dask
- Dask with PyTorch for large scale image analysis
- dask-geopandas -> offers geospatial capabilities of GeoPandas backed by Dask
- stackstac -> Turn a STAC catalog into a dask-based xarray
- dask-geomodeling -> On-the-fly operations on geographical maps
- dask-image -> many SciPy ndimage functions implemented
- Detecting Green Roofs in Toronto -> compares deep learning (Mask R-CNN & fast.ai) and classical approach using NDVI scaled on Dask
- Analyze terabyte-scale geospatial datasets with Dask and Jupyter on AWS
- austin-ml-change-detection-demo -> A change detection demo for the Austin area using a pre-trained PyTorch model scaled with Dask on Planet imagery
The Jupyter Notebook is a web-based interactive computing platform. There are many extensions which make it a powerful environment for analysing satellite imagery
- jupyterlite -> JupyterLite is a JupyterLab distribution that runs entirely in the browser
- jupyter_compare_view -> Blend Between Multiple Images
- folium -> display interactive maps in Jupyter notebooks
- ipyannotations -> Image annotations in python using jupyter notebooks
- pigeonXT -> create custom image classification annotators within Jupyter notebooks
- jupyter-innotater -> Inline data annotator for Jupyter notebooks
- jupyter-bbox-widget -> A Jupyter widget for annotating images with bounding boxes
- mapboxgl-jupyter -> Use Mapbox GL JS to visualize data in a Python Jupyter notebook
- pylabel -> includes an image labeling tool that runs in a Jupyter notebook that can annotate images manually or perform automatic labeling using a pre-trained model
- jupyterlab-s3-browser -> extension for browsing S3-compatible object storage
- papermill -> Parameterize, execute, and analyze notebooks
- pretty-jupyter -> Creates dynamic html report from jupyter notebook
Julia looks and feels a lot like Python, but can be much faster. Julia can call Python, C, and Fortran libraries and is capabale of C/Fortran speeds. Julia can be used in the familiar Jupyterlab notebook environment
- Why you should invest in Julia now, as a Data Scientist
- eBook: Introduction to Datascience with Julia
- FastAI.jl -> Repository of best practices for deep learning in Julia, inspired by fastai
- Flux.jl -> the ML library that doesn't make you tensor. Checkout The Deep Learning with Julia book
- GDAL.jl -> Thin Julia wrapper for GDAL
- GeoInterface.jl -> A Julia Protocol for Geospatial Data
- GeoJSON.jl -> Utilities for working with GeoJSON data
- JuliaImages: image processing and machine vision for Julia
- Julia_Geospatial -> Examples for a blog series on Geospatial Julia using ArchGDAL
- MLJ.jl -> A Julia machine learning framework
- Proj4.jl -> Julia wrapper for the PROJ cartographic projections library
- Rasters.jl -> types and methods for reading, writing and manipulating rasterized spatial data including GeoTIFF and NetCDF
- RemoteS.jl -> Remote sensing data processing
- SatelliteToolbox.jl -> This package contains several functions to build simulations related with satellites
- SatelliteDynamics.jl -> a satellite dynamics modeling package
- Sentinel.jl -> library for processing ESA Sentinel 2 satellite data
- DeepSat-Kaggle -> uses Julia
Streamlit is an awesome python framework for creating apps with python. These apps can be used to present ML models, and here I list resources which are EO related. Note that a component is an addon which extends Streamlits basic functionality
- cogviewer -> Simple Cloud Optimized GeoTIFF viewer
- cogcreator -> Simple Cloud Optimized GeoTIFF Creator. Generates COG from GeoTIFF files.
- cogvalidator -> Simple Cloud Optimized GeoTIFF validator
- streamlit-image-comparison -> compare images with a slider. Used in example-app-image-comparison
- streamlit-folium -> Streamlit Component for rendering Folium maps
- streamlit-keplergl -> Streamlit component for rendering kepler.gl maps
- streamlit-light-leaflet -> Streamlit quick & dirty Leaflet component that sends back coordinates on map click
- leafmap-streamlit -> various examples showing how to use streamlit to: create a 3D map using Kepler.gl, create a heat map, display a GeoJSON file on a map, and add a colorbar or change the basemap on a map
- geemap-apps -> build a multi-page Earth Engine App using streamlit and geemap
- streamlit-geospatial -> A multi-page streamlit app for geospatial
- geospatial-apps -> A collection of streamlit web apps for geospatial applications
- BirdsPyView -> convert images to top-down view and get coordinates of objects
- Build a useful web application in Python: Geolocating Photos -> Step by Step tutorial using Streamlit, Exif, and Pandas
- Wild fire detection app
- dvc-streamlit-example -> how dvc and streamlit can help track model performance during R&D exploration
- stacdiscovery -> Simple STAC Catalogs discovery tool
- SARveillance -> Sentinel-1 SAR time series analysis for OSINT use
- streamlit-template -> A streamlit app template for geospatial applications
- streamlit-labelstudio -> A Streamlit component that provides an annotation interface using the LabelStudio Frontend
- streamlit-img-label -> a graphical image annotation tool using streamlit. Annotations are saved as XML files in PASCAL VOC format
- Streamlit-Authenticator -> A secure authentication module to validate user credentials in a Streamlit application
- prettymapp -> Create beautiful maps from OpenStreetMap data in a webapp
- mapa-streamlit -> creating 3D-printable models of the earth surface based on mapa
- BoulderAreaDetector -> CNN to classify whether a satellite image shows an area would be a good rock climbing spot or not, deployed to streamlit app
- streamlit-remotetileserver -> Easily visualize a remote raster given a URL and check if it is a valid Cloud Optimized GeoTiff (COG)
- Streamlit_Image_Sorter -> Generic Image Sorter Interface for Streamlit
- Streamlit-Folium + Snowflake + OpenStreetMap -> demonstrates the power of Snowflake Geospatial data types and queries combined with Streamlit
- observing-earth-from-space-with-streamlit -> blog post on the SatSchool app
- vector-validator -> Webapp that validates and automatically fixes your geospatial vector data