Skip to main content

A high-performance fiducial marker detector for robotics.

Project description

Locus (locus-vision)

The Project Goal

Locus is a high-performance fiducial marker detector (AprilTag & ArUco) written in Rust with zero-copy Python bindings. It targets a balance of low latency, high recall, and precise pose estimation.

[!WARNING] Experimental Status: Locus is an experiment on AI-assisted coding and the code is still actively iterated on. The API is subject to breaking changes. While performance is high on current benchmarks, it is not recommended for production systems yet. Photo-realistic benchmarks are in development under render-tag.

Performance (ICRA 2020 Dataset)

Detector Recall RMSE Latency (avg)
Locus (Soft) 95.42% 0.26 px 129.1 ms
Locus (Hard) 83.90% 0.25 px 97.9 ms
AprilTag 3 62.34% 0.22 px 121.0 ms
OpenCV 33.16% 0.92 px 113.0 ms

Note: Locus' higher recall (detecting more challenging tags) correlates with its aggregate RMSE. On identical detections, Locus' precision is within +0.0024 px of AprilTag.

Quick Start

Install

pip install locus-tag
# Or from source
uv run maturin develop -r

Basic Usage

The simplest way to detect tags using default settings:

import cv2
import locus

# Load image in grayscale
img = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)

# Detect tags (defaults to AprilTag 36h11)
tags = locus.detect_tags(img)

for t in tags:
    print(f"ID: {t.id}, Center: {t.center}")

Advanced Features

For performance tuning, pose estimation, and specialized profiles, see the User Guide.

  • Decimation: Speed up processing on high-res images.
  • Soft-Decoding: Maximum recall for blurry or small tags (+11.5% boost).
  • Pose Estimation: Advanced IPPE-Square and Probabilistic refinement.
  • Profiles: Optimized settings for checkerboards and dense patterns.

Development & Benchmarking

Locus includes a rigorous suite to ensure detection quality and latency targets.

# Prepare datasets
uv run python scripts/locus_bench.py prepare

# Run evaluation suite
uv run python scripts/locus_bench.py run real --compare

Detailed instructions for profiling and regression testing are available in the Benchmarking Guide.

License

Dual-licensed under Apache 2.0 or MIT.

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

locus_tag-0.1.3.tar.gz (2.5 MB view details)

Uploaded Source

Built Distributions

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

locus_tag-0.1.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl (405.4 kB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

locus_tag-0.1.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl (404.5 kB view details)

Uploaded PyPymanylinux: glibc 2.28+ ARM64

locus_tag-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl (446.6 kB view details)

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

locus_tag-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl (405.8 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

File details

Details for the file locus_tag-0.1.3.tar.gz.

File metadata

  • Download URL: locus_tag-0.1.3.tar.gz
  • Upload date:
  • Size: 2.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.11.5

File hashes

Hashes for locus_tag-0.1.3.tar.gz
Algorithm Hash digest
SHA256 22a578b3ad2f03e2c6fe562048e05e6fcefeb3d5673b3c7e6f1b99ad17b03963
MD5 f56207f562c65ecce441082346897f63
BLAKE2b-256 6472d0c186099d74035eed5353a00f9c4c4098bbdea08e89bc5491b23b13c046

See more details on using hashes here.

File details

Details for the file locus_tag-0.1.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for locus_tag-0.1.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5d72d946cbff208a45a1e86573e1915834b0f848e4cf6aea309322d095072aa2
MD5 135bb02ff47cef6d3c0c891aa84221a2
BLAKE2b-256 3418d46c375cbc1faae2faf9eee8c1f9a9831fcf13260fb382fa76892d22415c

See more details on using hashes here.

File details

Details for the file locus_tag-0.1.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for locus_tag-0.1.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 70245fef14e03cc0c37d14ff0b249bacf39e996d6beddc111741a7c074d30b79
MD5 606e10203ceb68eb1808a708c5bc74c7
BLAKE2b-256 a14f8993b71a1a89a45d96e80a94c8fc640ede23f4d16bc37db418c31ee21ab4

See more details on using hashes here.

File details

Details for the file locus_tag-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for locus_tag-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2645c654e4f6f8537732b5031a22f5a5f2541a14fdcd77ae442c6105cc945b79
MD5 00f7a4bb54ef407416d546f4e7c61b9d
BLAKE2b-256 c257a3cd38a0d8737c0f416fe5ac6238580b82d1fc8a5db94237fc84bc94c057

See more details on using hashes here.

File details

Details for the file locus_tag-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for locus_tag-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 21717f4f7778eafeae79db9651319496c62d9a393a4527b1f79566c05d7c4454
MD5 2d5d387c8a0848b463494c365bd071cc
BLAKE2b-256 599c8fecec1d7dce4c5230fd93ec75e7750aeef596890ccb0ab355b089ba99aa

See more details on using hashes here.

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