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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22a578b3ad2f03e2c6fe562048e05e6fcefeb3d5673b3c7e6f1b99ad17b03963
|
|
| MD5 |
f56207f562c65ecce441082346897f63
|
|
| BLAKE2b-256 |
6472d0c186099d74035eed5353a00f9c4c4098bbdea08e89bc5491b23b13c046
|
File details
Details for the file locus_tag-0.1.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: locus_tag-0.1.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 405.4 kB
- Tags: PyPy, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d72d946cbff208a45a1e86573e1915834b0f848e4cf6aea309322d095072aa2
|
|
| MD5 |
135bb02ff47cef6d3c0c891aa84221a2
|
|
| BLAKE2b-256 |
3418d46c375cbc1faae2faf9eee8c1f9a9831fcf13260fb382fa76892d22415c
|
File details
Details for the file locus_tag-0.1.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: locus_tag-0.1.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 404.5 kB
- Tags: PyPy, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70245fef14e03cc0c37d14ff0b249bacf39e996d6beddc111741a7c074d30b79
|
|
| MD5 |
606e10203ceb68eb1808a708c5bc74c7
|
|
| BLAKE2b-256 |
a14f8993b71a1a89a45d96e80a94c8fc640ede23f4d16bc37db418c31ee21ab4
|
File details
Details for the file locus_tag-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: locus_tag-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 446.6 kB
- Tags: CPython 3.10+, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2645c654e4f6f8537732b5031a22f5a5f2541a14fdcd77ae442c6105cc945b79
|
|
| MD5 |
00f7a4bb54ef407416d546f4e7c61b9d
|
|
| BLAKE2b-256 |
c257a3cd38a0d8737c0f416fe5ac6238580b82d1fc8a5db94237fc84bc94c057
|
File details
Details for the file locus_tag-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: locus_tag-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 405.8 kB
- Tags: CPython 3.10+, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: maturin/1.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21717f4f7778eafeae79db9651319496c62d9a393a4527b1f79566c05d7c4454
|
|
| MD5 |
2d5d387c8a0848b463494c365bd071cc
|
|
| BLAKE2b-256 |
599c8fecec1d7dce4c5230fd93ec75e7750aeef596890ccb0ab355b089ba99aa
|