Convert video files or webcam feeds into simulated event-camera (DVS) data.
Project description
eventify-dvs
Convert video files or webcam feeds into simulated event-camera (DVS) data using log-intensity differencing. A clean-room, dependency-light reimplementation of the core idea behind v2e/ESIM — no CUDA, no PyTorch, no pretrained models. Just NumPy, OpenCV, and h5py.
Install
pip install eventify-dvs
The CLI entry point is eventify. With uv:
uv add eventify-dvs
uv run eventify --help
CLI
Three subcommands under the eventify entry point.
eventify webcam — live event preview
Opens the default camera and shows the event stream in an OpenCV window. Press q to quit. On macOS, grant camera permission to your terminal app first (System Settings → Privacy & Security → Camera).
# Defaults — 1280x720 @ 60 FPS
eventify webcam
# Snappy, high-sensitivity preview
eventify webcam --threshold 0.03 --accum-ms 40
# Different camera
eventify webcam --device 1
| Flag | Default | Purpose |
|---|---|---|
--device |
0 |
Webcam device index |
--threshold |
0.05 |
Log-intensity event threshold |
--width |
1280 |
Requested capture width |
--height |
720 |
Requested capture height |
--fps |
60 |
Requested capture FPS |
--accum-ms |
80 |
Event accumulator half-life in ms |
--max-events |
8 |
Saturation ceiling for accumulated events per pixel |
eventify convert — video file → event-visualized video
eventify convert input.mp4 events.mp4
eventify convert input.mp4 events.mp4 --threshold 0.03
| Flag | Default | Purpose |
|---|---|---|
input |
— | Path to source video |
output |
— | Path to write the rendered MP4 |
--threshold |
0.05 |
Log-intensity event threshold |
eventify export — video → DVS-Gesture HDF5
Emits binary-polarity DVS events to an HDF5 file compatible with the DVS128 Gesture dataset layout (Tonic / SpikingJelly loaders).
eventify export input.mp4 events.h5
eventify export input.mp4 events.h5 --sensor-size 128,128 --interp 4
| Flag | Default | Purpose |
|---|---|---|
input |
— | Path to source video |
output |
— | Path to write the HDF5 events file |
--threshold |
0.05 |
Log-intensity event threshold |
--sensor-size |
source resolution | Override as W,H |
--interp |
0 |
Interpolated sub-frames between real frames |
Library
import numpy as np
from eventify import (
frame_to_event_tuples,
video_to_event_stream,
interpolate_frames,
write_hdf5,
EVENT_DTYPE,
)
# Per-frame-pair event tuples
events = frame_to_event_tuples(prev, curr, prev_t_us=0, curr_t_us=1000)
# events["x"], events["y"], events["t"], events["p"] — p ∈ {0, 1}
# Full stream from a video file
chunks = list(video_to_event_stream("video.mp4", sensor_size=(128, 128), interp=4))
all_events = np.concatenate(chunks)
write_hdf5("out.h5", all_events, sensor_shape=(128, 128))
API reference
-
frame_to_event_tuples(prev, curr, prev_t_us, curr_t_us, c_thresh=0.05, eps=1.0, sensor_size=None)— returns a NumPy structured array with dtypeEVENT_DTYPEand fields(x: i2, y: i2, t: i8, p: i1). Polarity is binary (0 = OFF, 1 = ON). A pixel whose log-delta spansKthresholds emitsKevents, uniformly staggered across the interval. -
video_to_event_stream(source, c_thresh=0.05, sensor_size=None, interp=0, capture_settings=None)— generator yielding one structured event array per (sub-)frame-pair. Timestamps are monotonic microseconds. -
interpolate_frames(prev, curr, n_intermediate)— linearly interpolatesn_intermediateframes between two endpoints, returning a list ofn_intermediate + 2frames. -
write_hdf5(path, events, sensor_shape)— writes events in the DVS-Gesture reprocessed layout:/events .attrs["sensor_shape"] (height, width) /xs i2 /ys i2 /ts i8 microseconds /ps i1 ∈ {0, 1} -
EVENT_DTYPE— NumPy structured dtype[("x", "<i2"), ("y", "<i2"), ("t", "<i8"), ("p", "<i1")].
Tests
uv run pytest
License
MIT — see LICENSE.
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 eventify_dvs-0.1.2.tar.gz.
File metadata
- Download URL: eventify_dvs-0.1.2.tar.gz
- Upload date:
- Size: 51.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
962b0b633f510d5fef7d817b598f6a1172627927add1ff63ab492b0dba5e68e9
|
|
| MD5 |
01bc0ffe3cdb915fb9f798899544048a
|
|
| BLAKE2b-256 |
9c56dd318fed8ba16019c808c99f8f3def1a8ad719ca774d444bb00aecc3fe1d
|
Provenance
The following attestation bundles were made for eventify_dvs-0.1.2.tar.gz:
Publisher:
publish.yml on Arpan-206/eventify-dvs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eventify_dvs-0.1.2.tar.gz -
Subject digest:
962b0b633f510d5fef7d817b598f6a1172627927add1ff63ab492b0dba5e68e9 - Sigstore transparency entry: 2139600159
- Sigstore integration time:
-
Permalink:
Arpan-206/eventify-dvs@c75b862695bb0e6c623dcea021ee1cf85c17dd53 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/Arpan-206
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c75b862695bb0e6c623dcea021ee1cf85c17dd53 -
Trigger Event:
push
-
Statement type:
File details
Details for the file eventify_dvs-0.1.2-py3-none-any.whl.
File metadata
- Download URL: eventify_dvs-0.1.2-py3-none-any.whl
- Upload date:
- Size: 11.8 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 |
85899de07e324c1dfbaf53aaab5a4324030b7c5317ef54a1b67092d52853444d
|
|
| MD5 |
083f23849b1d535d31eb2c3747963948
|
|
| BLAKE2b-256 |
cba5bbf6c6619f1f02ffd56d95265b14755b44bda4c08c783f4583c7ec04a2ca
|
Provenance
The following attestation bundles were made for eventify_dvs-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on Arpan-206/eventify-dvs
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eventify_dvs-0.1.2-py3-none-any.whl -
Subject digest:
85899de07e324c1dfbaf53aaab5a4324030b7c5317ef54a1b67092d52853444d - Sigstore transparency entry: 2139600240
- Sigstore integration time:
-
Permalink:
Arpan-206/eventify-dvs@c75b862695bb0e6c623dcea021ee1cf85c17dd53 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/Arpan-206
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c75b862695bb0e6c623dcea021ee1cf85c17dd53 -
Trigger Event:
push
-
Statement type: