A library for efficient indexing & similarity search of satellite images.
Project description
Earth Search
A library for efficient indexing & similarity search of satellite images.
Earth Search is built on top of Faiss (Facebook AI Similarity Search) with a number of feature extractors for indexing and querying satellite image embeddings.
Installation:
pip install earthsearch
Supported Features:
Images for chipping:
- Any geospatial image format, e.g., TIF, NITF, etc.
Images for indexing:
- Any image format, e.g., TIF, PNG, JPEG, etc.
- If you have a directory of chips, you can index them
Models:
- ResNet-18:
resnet18 - ResNet-34:
resnet34 - ResNet-50:
resnet50 - ResNet-101:
resnet101 - ResNet-152:
resnet152 - DINOv2 ViT-S/14 distilled:
dinov2_vits14 - DINOv2 ViT-S/14 distilled with Registers:
dinov2_vits14_reg - DINOv2 ViT-B/14 distilled:
dinov2_vitb14 - DINOv2 ViT-B/14 distilled with Registers:
dinov2_vitb14_reg - DINOv2 ViT-L/14 distilled:
dinov2_vitl14 - DINOv2 ViT-L/14 distilled with Registers:
dinov2_vitl14_reg - DINOv2 ViT-g/14:
dinov2_vitg14 - DINOv2 ViT-g/14 with Registers:
dinov2_vitg14_reg
Faiss Indices:
- L2
Planned Features:
Models/Algorithms:
- SIFT (Scale-Invariant Feature Transform)
- ORB (Oriented FAST and Rotated BRIEF)
- Hashing algorithms
Faiss Indices:
- IndexIVFFlat
- IndexHNSWFlat
- IndexLSH
- IndexBinaryFlat
- IndexBinaryIVF
Usage:
chip takes a directory of satellite imagery scenes and creates a directory of chips for indexing.
If you already have a directory of chips, you can skip this step and run index and search.
Package import usage:
from earthsearch.chip import chip
from earthsearch.index import index
from earthsearch.search import search
from earthsearch.core import show_search_results
image_dir = "directory/path/to/satellite/image/scenes"
chip_dir = "directory/path/to/write/image/chips"
window_size = 512
stride = 0.0
valid_exts = ["tif"]
index_path = "path/to/save/index/to.bin"
indexed_images_path = "path/to/write/indexed/image/paths/to.txt"
index_type = "L2"
model_type = "dinov2_vits14_reg"
device = "cuda" # or "mps", "cpu
batch_size = 32
query_image = "path/to/query/for/top_k/similar/images",
top_k = 10
chip(image_dir, chip_dir, window_size, stride, valid_exts, multiprocess=True)
index(chip_dir, index_path, indexed_images_path, index_type, model_type, device, batch_size, overwrite_index=False)
results = search(query_image, index_path, indexed_images_path, index_type, top_k, model_type, device)
for idx, result in enumerate(results):
print(f"{idx + 1}: {result["path"]} - Distance: {result["distance"]}")
show_search_results(query_image, results, max_display=top_k)
CLI usage:
earthsearch {chip,index,search} ...
usage: earthsearch chip [-h] --image_dir IMAGE_DIR --chip_dir CHIP_DIR
[--window_size WINDOW_SIZE] [--stride STRIDE]
[--valid_exts [VALID_EXTS ...]] [--multiprocess]
options:
-h, --help show this help message and exit
--image_dir IMAGE_DIR
Directory path to images
--chip_dir CHIP_DIR Directory path to write chips to
--window_size WINDOW_SIZE
Size of sliding window, e.g., 512
--stride STRIDE Amount of overlap in x, y direction, e.g., 0.2
--valid_exts [VALID_EXTS ...]
Image extensions to filter for
--multiprocess Use multiprocessing vs multithreading
usage: earthsearch index [-h] --image_dir IMAGE_DIR --index_path INDEX_PATH
--indexed_images_path INDEXED_IMAGES_PATH --index_type INDEX_TYPE
--model_type MODEL_TYPE [--device DEVICE] [--batch_size BATCH_SIZE]
[--overwrite_index]
options:
-h, --help show this help message and exit
--image_dir IMAGE_DIR
Path to directory of images to index
--index_path INDEX_PATH
Path to save index
--indexed_images_path INDEXED_IMAGES_PATH
Path to save file containing indexed image paths
--index_type INDEX_TYPE
Type of index to use (currently only using L2)
--model_type MODEL_TYPE
Type of model to use
--device DEVICE Device to use for feature extraction (cuda, mps, cpu)
--batch_size BATCH_SIZE
Number of images per batch
--overwrite_index Overwrite existing index of same index_path
(.venv) ✝ ~/repos/earthsearch main
usage: earthsearch search [-h] --query_image QUERY_IMAGE --index_path INDEX_PATH
--indexed_images_path INDEXED_IMAGES_PATH --index_type INDEX_TYPE
--top_k TOP_K --model_type MODEL_TYPE [--device DEVICE]
options:
-h, --help show this help message and exit
--query_image QUERY_IMAGE
Path to directory of images to index
--index_path INDEX_PATH
Path to saved index
--indexed_images_path INDEXED_IMAGES_PATH
Path to file containing indexed image paths
--index_type INDEX_TYPE
Type of index to use (currently only using L2)
--top_k TOP_K top k-Nearest Neighbors to return
--model_type MODEL_TYPE
Type of model to use
--device DEVICE Device to use for feature extraction (cuda, mps, cpu)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file earthsearch-0.1.5.tar.gz.
File metadata
- Download URL: earthsearch-0.1.5.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a74cad823a43d5ae9da7d09ceec9594bfdfd34bd15c08c87e84412dccc472bd2
|
|
| MD5 |
b5d790ce10ead41f177578b59796ee76
|
|
| BLAKE2b-256 |
8b552e7b818bac2f8a68b317dd021867582eb56dba7d293d9db3bbd04270c64a
|
File details
Details for the file earthsearch-0.1.5-py3-none-any.whl.
File metadata
- Download URL: earthsearch-0.1.5-py3-none-any.whl
- Upload date:
- Size: 13.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e324bc2d1ad6eb1d1825ff79bc127c32bdf33d7d0b1b6944c4d759b546d4173
|
|
| MD5 |
b41f5bec55c31713d59758597b213feb
|
|
| BLAKE2b-256 |
ff1718218018a54a309f110408362ce14466b532bad887f1c5415bb251b21242
|