Repository navigation
π v1.1.0 β Installable PyPI Package, CI/CD & Reproducible Benchmarks
Stabilo-Optimize is now a proper installable Python package on PyPI (pip install stabilo-optimize), with a unified stabilo-optimize console command, full CI/CD, Zenodo archival metadata, and a reproducibility fix that makes seeded benchmark runs fully deterministic.
β οΈ This release contains breaking changes for users upgrading from v1.0.0. See Migrating from v1.0.0 below.
π¦ Installation
pip install stabilo-optimize # from PyPI
pip install -e '.[dev]' # from source, with dev extrasInstalling provides the stabilo-optimize console command (python -m stabilo_optimize is equivalent).
β¨ New Features
Installable package & unified CLI: benchmark.py/utils/ are restructured into the stabilo_optimize package with a single console entry point and lazy subcommand dispatch: benchmark and plot.
File logging: -l/--log-file on both subcommands tees console output to a file β ANSI color codes stripped, resolved absolute path printed to the console, appended across runs with a timestamped separator, and gitignored (*.log) by default.
CI/CD: ci.yml runs ruff lint, a cross-platform pytest matrix (Linux Python 3.9-3.13, macOS, Windows), and a build + wheel-install smoke test. publish.yml publishes to PyPI via trusted (OIDC) publishing on GitHub Release.
Zenodo metadata: new .zenodo.json powers the GitHub β Zenodo archive integration, cross-linking stabilo (as a dependency), geo-trax, and hbb2obb.
π§ Improvements & Bug Fixes
Fully reproducible seeded runs: cv2.setRNGSeed is now seeded alongside np.random. Stabilo's RANSAC-based homography/affine estimation uses OpenCV's own internal RNG, which np.random.seed never reached β a given config's seed now makes every metric (Mean_IoU, Homography_error_norm, Mean_corner_error) bit-identical across repeat runs, not just the injected perturbations.
OpenCV 5.0 compatibility: bumped to stabilo>=1.3.1, which pins opencv-python<5.0.0. OpenCV 5.0 silently dropped cv2.AKAZE_create/BRISK_create/KAZE_create, breaking 3 of the 6 supported detectors.
Quieter low verbosity: Stabilo's own internal logger previously leaked WARNING+ messages to stderr regardless of --verbosity. --verbosity now controls it too β fully silent at 0, up to Stabilo's own info-level output at 3.
β οΈ Migrating from v1.0.0
- Commands: invoke via
stabilo-optimize benchmark <config>/stabilo-optimize plot <path>instead ofpython benchmark.py .../python utils/plot.py .... - Install:
pip install stabilo-optimize(orpip install -e '.[dev]'from source) replacespip install -r requirements.txt;requirements.txtis removed.
π§ͺ Testing
- New pytest suite: 27 tests covering the deterministic core logic, reproducibility, and file logging.
ruff check --select F,E9clean;python -m build && twine checkverified.
π Citation
If you use Stabilo-Optimize in your research, please cite it (see CITATION.cff / the README citation block, now at v1.1.0).
Full Changelog: v1.0.0...v1.1.0