Inspect, clean, convert, and benchmark event-camera data from the command line
Project description
evlab
Inspect, clean, convert, and benchmark event-camera data from the command line.
Event-based vision has a preprocessing problem: every sensor and dataset ships a
different container (AEDAT, ROS bags, CSV, NPZ, proprietary .dat), every paper
wants a different representation (voxel grids, time surfaces, frames), and every
pipeline reimplements the same denoising filters. evlab is the small, boring
tool that handles that mess so you can get to the actual work.
pip install evlab[viz]
evlab info recording.npz # what is this file?
evlab convert events.aedat4 events.npz # normalize the container
evlab convert drive.dat events.npz # Prophesee .dat works too
evlab convert flight.bag events.npz # ...and ROS bags (dvs_msgs)
evlab denoise events.npz clean.npz --filter baf --window 5000
evlab voxel clean.npz voxels.npy --bins 10
evlab visualize clean.npz preview.gif --mode gif
evlab benchmark events.npz clean.npz # what did the filter do?
How good is a denoising filter, really? Generate a labeled stream and score it:
evlab synth labeled.npz --signal-rate 20000 --noise-rate 8000
evlab denoise-bench labeled.npz --filter baf --window 3000
# precision : 99.2%
# recall : 37.8%
# f1 : 0.548
# noise removed : 99.2%
Status
Early alpha. Works and is tested: the canonical representation; loading
NPZ/CSV/TXT, AEDAT4 ([aedat] extra), Prophesee legacy .dat (with
timestamp-wrap handling), and ROS1/ROS2 bags with EventArray topics
([ros] extra); BAF/refractory denoising; voxel grids, time surfaces,
accumulate frames; synthetic labeled streams and precision/recall filter
scoring; and the eight CLI commands above. Planned next: Prophesee EVT3
.raw, dataset-aware loaders (via Tonic), streaming via Faery, and
more filters (STCF, IE/YNoise) under denoise-bench.
Python API
import evlab
data = evlab.load("recording.npz") # EventData: (x, y, t, p) + sensor size
print(data.event_rate)
from evlab.filters import background_activity_filter
clean = background_activity_filter(data, time_window_us=5000)
from evlab.representations import voxel_grid
grid = voxel_grid(clean, bins=10) # (10, H, W) float32, ready for torch
Design notes
- One canonical in-memory format: a t-sorted structured numpy array
(
x: u2, y: u2, t: i8 (µs), p: i1) plus sensor geometry. Every loader normalizes into it; every filter/representation consumes it. - Zero heavy dependencies in the core (
numpy+click). Visualization, AEDAT support, and dataset loaders are opt-in extras. - Filters return copies; nothing mutates your data behind your back.
Development
pip install -e .[dev]
pytest
ruff check src tests
License
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 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 evlab-0.1.0a1.tar.gz.
File metadata
- Download URL: evlab-0.1.0a1.tar.gz
- Upload date:
- Size: 16.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26f9d7a00a753e720770206b4a91b61fbaebff7a0e34364e59c95103315ebf20
|
|
| MD5 |
990e3a125b0dd62ea66c0e3cb8589c1f
|
|
| BLAKE2b-256 |
b166e8e314f64dfaf33c2bdbcf7c8be983cf01af575019c2b54b56845dcc8129
|
Provenance
The following attestation bundles were made for evlab-0.1.0a1.tar.gz:
Publisher:
release.yml on JPL11/evlab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evlab-0.1.0a1.tar.gz -
Subject digest:
26f9d7a00a753e720770206b4a91b61fbaebff7a0e34364e59c95103315ebf20 - Sigstore transparency entry: 2112713508
- Sigstore integration time:
-
Permalink:
JPL11/evlab@78cec3ce19a881838a36a79cbcee355015170bb1 -
Branch / Tag:
refs/tags/v0.1.0a1 - Owner: https://github.com/JPL11
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@78cec3ce19a881838a36a79cbcee355015170bb1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file evlab-0.1.0a1-py3-none-any.whl.
File metadata
- Download URL: evlab-0.1.0a1-py3-none-any.whl
- Upload date:
- Size: 16.7 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 |
70113cf8737173b10f4b759139e852c03a3c43cc3534417ea937093b3cfc32a6
|
|
| MD5 |
b6660e264f1ad38f6b8d8c1c9cddf334
|
|
| BLAKE2b-256 |
1ec51db192cefe91eabe43a23b30db386411f7ac8041d9fdebcba4d87618c8c5
|
Provenance
The following attestation bundles were made for evlab-0.1.0a1-py3-none-any.whl:
Publisher:
release.yml on JPL11/evlab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evlab-0.1.0a1-py3-none-any.whl -
Subject digest:
70113cf8737173b10f4b759139e852c03a3c43cc3534417ea937093b3cfc32a6 - Sigstore transparency entry: 2112713512
- Sigstore integration time:
-
Permalink:
JPL11/evlab@78cec3ce19a881838a36a79cbcee355015170bb1 -
Branch / Tag:
refs/tags/v0.1.0a1 - Owner: https://github.com/JPL11
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@78cec3ce19a881838a36a79cbcee355015170bb1 -
Trigger Event:
release
-
Statement type: