Skip to main content

AquaCal

Build Coverage PyPI Python License DOI

Refractive multi-camera calibration for underwater arrays. AquaCal calibrates cameras in air viewing through a flat water surface, using Snell's law to achieve accurate 3D reconstruction in refractive environments.

Features

  • Snell's law refractive projection — Accurate ray-tracing through air-water interfaces
  • Multi-camera pose graph — Best-first extrinsic initialization for camera arrays
  • Joint bundle adjustment — Simultaneous optimization of extrinsics, interface distances, and board poses
  • Sparse Jacobian optimization — Scalable to 10+ cameras with column grouping
  • ChArUco board detection — Robust corner detection for calibration targets
  • Validation diagnostics — Holdout reprojection, 3D triangulation checks, and per-camera error breakdowns
  • Active re-calibration (beta) — refine_calibration() updates an existing calibration from point correspondences collected in the field; not yet fully tested

Installation

pip install aquacal

Quick Start

  1. Install AquaCal:

    pip install aquacal
    
  2. Generate a configuration file from your calibration videos:

    aquacal init --intrinsic-dir videos/intrinsic/ --extrinsic-dir videos/extrinsic/
    
  3. Run calibration:

    aquacal calibrate config.yaml
    

Results are saved to output/calibration.json with camera intrinsics, extrinsics, interface distances, and diagnostics.

Documentation

Full documentation is available at aquacal.readthedocs.io:

Citation

If you use AquaCal in your research, please cite:

@software{aquacal,
  title = {AquaCal: Refractive Multi-Camera Calibration},
  author = {Lancaster, Tucker},
  year = {2026},
  url = {https://github.com/McGrathLab/AquaCal},
  version = {2.0.0},
  doi = {10.5281/zenodo.18644658}
}

See CITATION.cff for full citation metadata.

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT License. See LICENSE for details.

Metadata

Release files for aquacal 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aquacal 2.1.0
File Size Uploaded Provenance Actions
aquacal-2.1.0.tar.gz 200.7 kB With provenance Details for aquacal-2.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for aquacal 2.1.0
File Interpreter ABI Platform Actions
aquacal-2.1.0-py3-none-any.whl Python 3 none any Details for aquacal-2.1.0-py3-none-any.whl

Total release size: 422.8 kB

Release files / aquacal-2.1.0.tar.gz

Download URL aquacal-2.1.0.tar.gz
Size 200.7 kB
Tags Source
SHA-256 checksum
How to use checksums
82ec27a24df85c1237f1afc513d30e824f92d92f9881ac707f63ba30eedb15d6
BLAKE2b-256 checksum
How to use checksums
8bbafead2ae18e5e8c08ded7620c00ff16941098b7bf9e9495b141cfbffbe103
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Release files / aquacal-2.1.0-py3-none-any.whl

Download URL aquacal-2.1.0-py3-none-any.whl
Size 222.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0eaa325218c7bde206e835ec5ba5f300a31b86f04532303ae9ed483ef1ce8290
BLAKE2b-256 checksum
How to use checksums
e7dbacf779d9f833e07d12731b2b1c15289be493ad34eb0c9822b9dd9f3a4895
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

Security for aquacal 2.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for aquacal-2.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 27, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page