Metadata-Version: 2.4
Name: vision-calibration
Version: 0.1.4
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Rust
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Requires-Dist: calib-targets ; extra == 'examples'
Requires-Dist: pillow ; extra == 'examples'
Provides-Extra: examples
Summary: Python bindings for calibration-rs end-to-end camera calibration
Home-Page: https://vitalyvorobyev.github.io/calibration-rs
Author-email: Vitaly Vorobyev <vit.vorobiev@gmail.com>
License: MIT
Requires-Python: >=3.10
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Homepage, https://vitalyvorobyev.github.io/calibration-rs
Project-URL: Repository, https://github.com/VitalyVorobyev/calibration-rs

# vision-calibration-py

Python bindings for `calibration-rs`.

This crate exposes high-level calibration workflows from `vision-calibration`:

- planar intrinsics
- single-camera hand-eye
- rig extrinsics
- rig hand-eye
- laserline device

## Build locally

```bash
maturin develop -m crates/vision-calibration-py/Cargo.toml
```

## Python package

The Python package name is `vision_calibration`.

```python
import vision_calibration as vc

print(vc.__version__)

# Build Python-native dataset/config objects with docstrings:
obs = vc.Observation(
    points_3d=[(0.0, 0.0, 0.0), (0.1, 0.0, 0.0), (0.1, 0.1, 0.0), (0.0, 0.1, 0.0)],
    points_2d=[(100.0, 100.0), (200.0, 100.0), (200.0, 200.0), (100.0, 200.0)],
)
dataset = vc.PlanarDataset(views=[vc.PlanarView(observation=obs)] * 3)
config = vc.PlanarCalibrationConfig(
    max_iters=80,
    robust_loss=vc.robust_huber(1.0),
)

result = vc.run_planar_intrinsics(dataset, config)
print(result.mean_reproj_error)
```

## Runnable Python examples

Python workflow examples live in `crates/vision-calibration-py/examples/` and
mirror the Rust examples from `crates/vision-calibration/examples/`.

Install detector dependencies for real-image examples:

```bash
./.venv/bin/python -m pip install "vision-calibration[examples]"
```

Run all:

```bash
for f in crates/vision-calibration-py/examples/*.py; do ./.venv/bin/python "$f"; done
```

Run individual examples:

```bash
./.venv/bin/python crates/vision-calibration-py/examples/planar_synthetic.py
./.venv/bin/python crates/vision-calibration-py/examples/planar_real.py
./.venv/bin/python crates/vision-calibration-py/examples/stereo_session.py
./.venv/bin/python crates/vision-calibration-py/examples/stereo_charuco_session.py
./.venv/bin/python crates/vision-calibration-py/examples/handeye_synthetic.py
./.venv/bin/python crates/vision-calibration-py/examples/handeye_session.py
./.venv/bin/python crates/vision-calibration-py/examples/rig_handeye_synthetic.py
./.venv/bin/python crates/vision-calibration-py/examples/laserline_device_session.py
```

Notes:

- `planar_real.py`, `stereo_session.py`, `stereo_charuco_session.py`, and
  `handeye_session.py` run detector-based corner extraction from real images
  using `calib-targets`.
- Low-level serde payload schemas remain available in
  `vision_calibration.types` for advanced interop.

