Handy toolkit for saving, evaluating, and visualizing 3D reconstruction predictions.
Project description
eval3r
eval3r is a Python toolkit for saving, benchmarking, and visualizing 3D reconstruction results with explicit assumptions and reproducible workflows.
Motivation
Many reconstruction pipelines fail at the "last mile": prediction artifacts are hard to compare, evaluation settings are underspecified, and reproducing numbers from papers can be difficult.
eval3r addresses this with:
- a practical CLI (
e3r) for evaluation tasks, - strongly typed I/O for predictions and metrics,
- optional rendering and debug visualization,
- and end-to-end benchmark utilities.
Installation
pip install eval3r
Command-line overview
After installation, eval3r exposes the e3r command.
e3r --help
e3r -v # print version
Primary commands:
e3r metric ...— compute 2d/3d metrics for a prediction/GT paire3r benchmark ...— evaluate many scenes and aggregate split-level metricse3r render ...— render geometry and comparison outputse3r mask ...— generate/inspect occlusion maskse3r validate <prediction_dir>— validate a prediction directory against manifest rulese3r inspect <prediction_dir>— inspect a prediction directory summary
Quickstart: single-scene geometry evaluation
Assume:
pred.ply # prediction
gt.ply # ground truth
1) Compute metrics
e3r metric geometry pred.ply --gt gt.ply
Typical outputs include Chamfer distance, accuracy/completeness, and thresholded precision/recall/F-score.
2) Always inspect overlap
e3r metric geometry pred.ply --gt gt.ply --debug-plot
If overlap is poor due to coordinate mismatch, metrics are not meaningful yet.
3) Select alignment intentionally
Use rigid alignment when scale is trustworthy:
e3r metric geometry pred.ply --gt gt.ply --align icp_se3 --debug-plot
Use similarity alignment when scale may drift (common in monocular systems):
e3r metric geometry pred.ply --gt gt.ply --align icp_sim3 --debug-plot
Use trajectory-driven alignment when poses are available:
e3r metric geometry pred.ply --gt gt.ply \
--align traj_sim3 \
--pred-poses pred_trajectory.txt \
--gt-poses gt_trajectory.txt \
--debug-plot
Quickstart: benchmark a dataset split
Expected prediction layout example:
preds_root/
scene0000_00/
mesh.ply
scene0001_00/
mesh.ply
Run benchmark:
e3r benchmark scannet \
--pred-root preds_root \
--gt-root /path/to/scannet \
--split split.txt \
--align sim3 \
--workers 8 \
--out results.json \
--csv results.csv
Useful options:
--samples 200000points sampled per scene--thresholds 0.05threshold(s) for F-score-like metrics--debug-plotto save visual diagnostics--pred-patternto map custom prediction filenames
Trajectory-based benchmark alignment example:
e3r benchmark scannet \
--pred-root preds_root \
--gt-root /path/to/scannet \
--split split.txt \
--aligner traj_sim3 \
--pred-pose-dir pred_poses \
--pred-pose-file "{scene_id}.txt" \
--pred-pose-convention T_wc
Prediction format and Python API
eval3r includes a manifest-driven prediction format so files are portable and self-described.
Minimal writer example:
import eval3r as e3r
with e3r.PredictionWriter(
"outputs/scannet/scene0799_00",
scene_id="scene0799_00",
dataset="scannet",
method="my_method",
unit="m",
coordinate_system="opengl",
pose_convention="T_wc",
) as pred:
pred.save_point_cloud(points, colors=colors)
pred.save_mesh(vertices, faces)
pred.save_poses(poses, timestamps=timestamps)
pred.save_metadata({"checkpoint": "ckpt.pth"})
When key metadata is missing, the writer records explicit placeholders instead of guessing, enabling downstream validation and auditability.
Supported workflows
- Scene-level metric inspection during model development.
- Dataset-level benchmark reporting for ablations and papers.
- Reproducible artifact exchange between teams using manifest-backed prediction directories.
- Alignment experiments (
icp_se3,icp_sim3, trajectory-driven variants) with debug plots.
Documentation
- Docs site: https://eval3r.readthedocs.io/
- Repository: https://github.com/xingruiy/eval3r
Development
pip install -e .[dev]
pytest
License and dataset disclaimer
eval3r is released under the MIT License.
This project does not redistribute third-party datasets such as ScanNet, Replica, DTU, ETH3D, Tanks & Temples, or TUM RGB-D. You must obtain and use those datasets under their original licenses.
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
Built Distribution
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 eval3r-0.2.1.tar.gz.
File metadata
- Download URL: eval3r-0.2.1.tar.gz
- Upload date:
- Size: 63.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c5496fc6bf8455266321c993aa4c03a5662a32b965b1b93196094612e19eaa1
|
|
| MD5 |
77ff391b67b1b48618887f321a1e5d7c
|
|
| BLAKE2b-256 |
8dd688926c87978a441a781eb2511e315a0204a8db30c73669425619c3a22ec3
|
Provenance
The following attestation bundles were made for eval3r-0.2.1.tar.gz:
Publisher:
publish.yml on xingruiy/eval3r
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eval3r-0.2.1.tar.gz -
Subject digest:
2c5496fc6bf8455266321c993aa4c03a5662a32b965b1b93196094612e19eaa1 - Sigstore transparency entry: 1533051568
- Sigstore integration time:
-
Permalink:
xingruiy/eval3r@0465110a4192774a23e59956442b0f620376c6d6 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/xingruiy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0465110a4192774a23e59956442b0f620376c6d6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file eval3r-0.2.1-py3-none-any.whl.
File metadata
- Download URL: eval3r-0.2.1-py3-none-any.whl
- Upload date:
- Size: 105.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
270e13014847ba0adb1d9439bfa4cc0cda7e3292f14196ac63086038574032c1
|
|
| MD5 |
97d0f016457c089007b86d8913dd699b
|
|
| BLAKE2b-256 |
41b99a061196ab92d6a4d091f46bcc32ef49ca867341af6cccabe38e7ca70ce4
|
Provenance
The following attestation bundles were made for eval3r-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on xingruiy/eval3r
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eval3r-0.2.1-py3-none-any.whl -
Subject digest:
270e13014847ba0adb1d9439bfa4cc0cda7e3292f14196ac63086038574032c1 - Sigstore transparency entry: 1533051686
- Sigstore integration time:
-
Permalink:
xingruiy/eval3r@0465110a4192774a23e59956442b0f620376c6d6 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/xingruiy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0465110a4192774a23e59956442b0f620376c6d6 -
Trigger Event:
push
-
Statement type: