Metadata-Version: 2.4
Name: orthomasker
Version: 0.4.0
Summary: CLI tool to convert TIF files to GeoJSON with automatic mask generation using Meta AI's Segment Anything Model (SAM)
Author-email: Nicholas McCarty <nick@upskilled.consulting>
License: MIT License
        
        Copyright (c) 2025 Nicholas McCarty, Upskilled Consulting
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Project-URL: Homepage, https://github.com/nickmccarty/orthomasker
Project-URL: Repository, https://github.com/nickmccarty/orthomasker
Project-URL: Issues, https://github.com/nickmccarty/orthomasker/issues
Keywords: gis,geojson,tif,mask,cli
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.0.0
Requires-Dist: GDAL>=3.8.0
Requires-Dist: geopandas>=1.0.0
Requires-Dist: matplotlib>=3.10.0
Requires-Dist: numpy>=2.0.0
Requires-Dist: opencv-contrib-python>=4.11.0
Requires-Dist: opencv-python>=4.11.0
Requires-Dist: opencv-python-headless>=4.11.0
Requires-Dist: pandas>=2.2.0
Requires-Dist: pillow>=11.2.0
Requires-Dist: rasterio>=1.4.0
Requires-Dist: shapely>=2.1.0
Requires-Dist: geojson>=3.0.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: black>=22.0.0; extra == "dev"
Requires-Dist: flake8>=5.0.0; extra == "dev"
Requires-Dist: mypy>=1.0.0; extra == "dev"
Requires-Dist: openpyxl>=3.1.0; extra == "dev"
Provides-Extra: ml
Requires-Dist: torch; extra == "ml"
Requires-Dist: segment-anything-py; extra == "ml"
Dynamic: license-file

# TIF to GeoJSON Converter

A CLI tool that converts TIF files to GeoJSON format with automatic mask generation.

## Installation

```bash
pip install orthomasker
```

## Usage

```bash
# Using CLI
orthomasker your_input_filename.tif your_output_filename.geojson --sam-checkpoint sam_vit_h_4b8939.pth --confidence-threshold 80 --min-area 100 --max-area 10000 --verbose

# Using Python
from orthomasker.converter import TifToGeoJsonConverter

# Set up the converter (use the path to your .pth file)
converter = TifToGeoJsonConverter(
    sam_checkpoint="sam_vit_h_4b8939.pth",
    confidence_threshold=80.0,
    min_area=100.0,      # Optional: filter by minimum area
    max_area=10000.0,    # Optional: filter by maximum area
    verbose=True,
)

# Provide your own test TIF file (upload or use a sample)
input_tif = "your_input_filename.tif"
output_geojson = "your_output_filename.geojson"

converter.convert(input_tif, output_geojson)
```

### Options

- `--sam-checkpoint`: Path to SAM model weights (default: sam_vit_h_4b8939.pth)

- `--model-type`: SAM model type (`vit_h`, `vit_l`, `vit_b`; default: vit_h)

- `--confidence-threshold`: Minimum stability score to keep a mask (0–100; default: 0, no filter)

- `--tile-size`: Tile size for processing (default: 1024)

- `--overlap`: Tile overlap in pixels (default: 128)

- `--class-name`: Class label for output features (default: sam_object)

- `--min-area`: Minimum area (in square units of TIF CRS) for output features (optional)

- `--max-area`: Maximum area (in square units of TIF CRS) for output features (optional)

- `--fixed-bounds`: Bounding box (minx, miny, maxx, maxy) in image CRS

- `--verbose`: Enable verbose output

## Development

### Setup

```bash
git clone https://github.com/nickmccarty/orthomasker.git
cd orthomasker
pip install -r requirements.txt
pip install -e ".[ml,dev]"
```

## Acknowledgments

This project leverages [Meta AI’s Segment Anything Model (SAM)](https://github.com/facebookresearch/segment-anything) for automatic mask generation, which is faciliated by utilizing [`segment-anything-py`](https://pypi.org/project/segment-anything-py/) as a dependency; many thanks to Wu, et al. for their work!

## Citations

```
@article{kirillov2023segany,
title={Segment Anything},
author={Kirillov, Alexander and Mintun, Eric and Ravi, Nikhila and Mao, Hanzi and Rolland, Chloe and Gustafson, Laura and Xiao, Tete and Whitehead, Spencer and Berg, Alexander C. and Lo, Wan-Yen and Doll{'a}r, Piotr and Girshick, Ross},
journal={arXiv:2304.02643},
year={2023}
}
```

## License

MIT License - see LICENSE file for details.
