Skip to main content

Python bindings for the fast ChESS chessboard corner detector (Rust backend)

Project description

chess_corners (Python)

Python-first bindings for the chess-corners detector.

The installed package is a mixed Rust/Python package:

  • chess_corners is a pure-Python public API with type hints, docstrings, JSON helpers, and readable config objects.
  • chess_corners._native is the private PyO3 extension module that runs the detector.

Quick start

import numpy as np
import chess_corners

img = np.zeros((128, 128), dtype=np.uint8)

cfg = chess_corners.ChessConfig.multiscale()
cfg.threshold_value = 0.15
cfg.refiner.kind = chess_corners.RefinementMethod.FORSTNER

corners = chess_corners.find_chess_corners(img, cfg)
print(corners.shape, corners.dtype)
print(cfg)

find_chess_corners(image, cfg=None) returns a NumPy float32 array of shape (N, 4) with columns:

  1. x
  2. y
  3. response
  4. orientation

Input requirements:

  • image must be a 2D uint8 NumPy array with shape (H, W)
  • it must be C-contiguous

The rows are sorted deterministically by response descending, then x, then y.

Public config API

The public config shape is intentionally flat. There is no params section and no nested pyramid object.

cfg = chess_corners.ChessConfig()
cfg.detector_mode = chess_corners.DetectorMode.BROAD
cfg.descriptor_mode = chess_corners.DescriptorMode.FOLLOW_DETECTOR
cfg.threshold_mode = chess_corners.ThresholdMode.RELATIVE
cfg.threshold_value = 0.2
cfg.nms_radius = 2
cfg.min_cluster_size = 2
cfg.pyramid_levels = 3
cfg.pyramid_min_size = 128
cfg.refinement_radius = 3
cfg.merge_radius = 3.0

All nested objects are default-initialized, so you can always do:

cfg = chess_corners.ChessConfig()
cfg.refiner.kind = chess_corners.RefinementMethod.FORSTNER
cfg.refiner.forstner.max_offset = 2.0

Supported enums:

  • DetectorMode: canonical, broad
  • DescriptorMode: follow_detector, canonical, broad
  • ThresholdMode: relative, absolute
  • RefinementMethod: center_of_mass, forstner, saddle_point

broad uses the wider, blur-tolerant detector sampling pattern. Leave descriptor_mode at follow_detector unless you have a reason to override descriptor or orientation sampling separately.

Refiner configuration

cfg.refiner always contains every leaf config:

  • cfg.refiner.center_of_mass
  • cfg.refiner.forstner
  • cfg.refiner.saddle_point

Only cfg.refiner.kind selects which one is active.

cfg = chess_corners.ChessConfig()
cfg.refiner.kind = chess_corners.RefinementMethod.SADDLE_POINT
cfg.refiner.saddle_point.radius = 3
cfg.refiner.saddle_point.max_offset = 2.0

JSON helpers and printing

Every public config object supports:

  • to_dict()
  • from_dict(...)
  • to_json()
  • from_json(...)
  • pretty()
  • print()

Example:

cfg = chess_corners.ChessConfig.multiscale()
text = cfg.to_json(indent=2)
restored = chess_corners.ChessConfig.from_json(text)

print(restored)
restored.print()

If rich is installed, .print() uses it automatically and the config objects also expose a Rich render hook.

Canonical JSON schema

The same algorithm config schema is used by Rust, Python, docs, and the CLI:

{
  "detector_mode": "broad",
  "descriptor_mode": "canonical",
  "threshold_mode": "absolute",
  "threshold_value": 0.5,
  "nms_radius": 3,
  "min_cluster_size": 1,
  "refiner": {
    "kind": "forstner",
    "center_of_mass": {
      "radius": 2
    },
    "forstner": {
      "radius": 3,
      "min_trace": 20.0,
      "min_det": 0.001,
      "max_condition_number": 60.0,
      "max_offset": 2.0
    },
    "saddle_point": {
      "radius": 3,
      "det_margin": 0.002,
      "max_offset": 1.75,
      "min_abs_det": 0.0002
    }
  },
  "pyramid_levels": 3,
  "pyramid_min_size": 96,
  "refinement_radius": 4,
  "merge_radius": 2.5
}

Unknown keys are rejected with a clear ConfigError.

Example runners

For a complete Pillow-based example that loads the full config from JSON, run:

uv run --python .venv/bin/python python crates/chess-corners-py/examples/run_with_full_config.py \
  testimages/mid.png \
  config/chess_algorithm_config_example.json

For a complete Pillow-based example that defines the entire config directly in Python code and only takes the image path as an argument, run:

uv run --python .venv/bin/python python crates/chess-corners-py/examples/run_with_code_config.py \
  testimages/mid.png

Both examples use Pillow only for image loading:

uv pip install --python .venv/bin/python Pillow

ML refiner

If the bindings are built with the ml-refiner feature, the package also exports:

corners = chess_corners.find_chess_corners_with_ml(img, cfg)

That toggles the separate ML-backed refinement path. It does not change the canonical ChessConfig schema.

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

chess_corners-0.5.0.tar.gz (799.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

chess_corners-0.5.0-cp310-abi3-win_amd64.whl (5.9 MB view details)

Uploaded CPython 3.10+Windows x86-64

chess_corners-0.5.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

chess_corners-0.5.0-cp310-abi3-macosx_11_0_arm64.whl (5.7 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file chess_corners-0.5.0.tar.gz.

File metadata

  • Download URL: chess_corners-0.5.0.tar.gz
  • Upload date:
  • Size: 799.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chess_corners-0.5.0.tar.gz
Algorithm Hash digest
SHA256 e3efe94f869763a45b35216420c6125d8debb7bad4abd49438e8938bb2281689
MD5 3fd2a9a6e1b16c64b2be006c318f21f8
BLAKE2b-256 c6846c10f6f1aab681d53fd292c3a55df65fd2fc0e8039ecf589227f1527c42f

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_corners-0.5.0.tar.gz:

Publisher: release-pypi.yml on VitalyVorobyev/chess-corners-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chess_corners-0.5.0-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for chess_corners-0.5.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 bf7177f95ae0b74885014bb919dc25dde0822d36abfec5a582e2dcd1a7132643
MD5 b4a3f48f13433b947ab5f6ef015585e3
BLAKE2b-256 5956a50be05304e16ed6c3e0a6dfd9d780bf84ed578da3947dd6ab692c69a4e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_corners-0.5.0-cp310-abi3-win_amd64.whl:

Publisher: release-pypi.yml on VitalyVorobyev/chess-corners-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chess_corners-0.5.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for chess_corners-0.5.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0eb4c9077defb7a762de2ad9edafcf9449af86dfd999f6f17d2fffe39f5d1920
MD5 1ac714d4d7c106ca550a1095cbe9c2d9
BLAKE2b-256 fa555c371159beb152ee02751c7c1e38f057859fa08bfaa77cce14601c83ac06

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_corners-0.5.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release-pypi.yml on VitalyVorobyev/chess-corners-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chess_corners-0.5.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for chess_corners-0.5.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce426b4b4703367f08c0977fe9e1f7f0b9d638c99b147090708abbc2db205e02
MD5 197ffc83e2e76fdfb133a50217b6ccea
BLAKE2b-256 5d71ae7f1e88ddeca0dbb21e20a0d2b7a91ee992d27b034f70cff64566298e29

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_corners-0.5.0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: release-pypi.yml on VitalyVorobyev/chess-corners-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page