MCPcopy Index your code
hub / github.com/ac-freeman/adder-codec-rs

github.com/ac-freeman/adder-codec-rs @v0.4.9

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.4.9 ↗ · + Follow
954 symbols 2,574 edges 95 files 228 documented · 24%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

ADDER-codec-rs

Build Status Documentation codecov Crates.io Downloads

A unified framework for event-based video. Encoder/transcoder/decoder for ADΔER (Address, Decimation, Δt Event Representation) video streams. Includes a transcoder for casting framed video and event camera video into an ADΔER representation in a manner which preserves the temporal synchronicity of the source, but enables long-term intensity averaging on a per-pixel basis and extremely high dynamic range.

blender_output2_30_mid

Source 8-bit image frame with shadows boosted (source video) Frame reconstructed from ADΔER events, generated from 48 input frames, with shadows boosted. Note the greater dynamic range and temporal denoising in the shadows.

adder-viz

The easiest way to get up and running with ADΔER is with the GUI program, adder-viz. Folow the instructions here.

System model

Click the image to view the full system model conveyed by this software. I compare the ADΔER approach to traditional framed and event camera systems.

full_sys

Included crates

  • adder-codec-rs: ADΔER transcoders [source] Crates.io
  • adder-codec-core: core library [source] Crates.io
  • adder-info: tool for reading metadata of a .adder file [source] Crates.io
  • adder-to-dvs: tool for quickly converting a .adder file to a reasonable DVS representation in a text format [source] Crates.io
  • adder-viz: GUI application for transcoding framed and event (DVS/DAVIS) video to ADΔER, playing back .adder files, and visualizing the many available ADΔER parameters [source] Crates.io

Other crates

  • davis-edi-rs: a super high-speed system for performing frame deblurring and framed reconstruction from DAVIS/DVS streams, forming the backbone for the event camera driver code in the ADΔER library [source] Crates.io
  • aedat-rs: a fast AEDAT 4 Rust reader. [source] Crates.io

More information

Read this paper and the wiki for background on ADΔER, how to use it, and what tools are included.

Contributing

Several open issues would greatly benefit from additional help! I've marked some as "good first issues" for new contributors. If you have any questions, please ask them on the issues page so others with similar questions can refer to our discussions. I will try to elucidate any confusing code or concepts with better documentation.

Cite this work

If you write a paper which references this software, we ask that you reference the following papers on which it is based. Citations are given in the BibTeX format.

An Open Software Suite for Event-Based Video

Note: The code associated with this paper was released in version 0.4.3.

@misc{freeman2024open,
      title={An Open Software Suite for Event-Based Video}, 
      author={Andrew C. Freeman},
      year={2024},
      eprint={2401.17151},
      archivePrefix={arXiv},
      primaryClass={cs.MM}
}

Accelerated Event-Based Feature Detection and Compression for Surveillance Video Systems

Note: The code associated with this paper was released in version 0.4.1. This paper has been accepted for publication at MMSys '24.

@misc{freeman2023accelerated,
      title={Accelerated Event-Based Feature Detection and Compression for Surveillance Video Systems}, 
      author={Andrew C. Freeman and Ketan Mayer-Patel and Montek Singh},
      year={2023},
      eprint={2312.08213},
      archivePrefix={arXiv},
      primaryClass={cs.MM}
}

An Asynchronous Intensity Representation for Framed and Event Video Sources

Note: The code associated with this paper was released in version 0.2.0

@inproceedings{10.1145/3587819.3590969,
author = {Freeman, Andrew C. and Singh, Montek and Mayer-Patel, Ketan},
title = {An Asynchronous Intensity Representation for Framed and Event Video Sources},
year = {2023},
isbn = {979-8-4007-0148-1/23/06},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3587819.3590969},
doi = {10.1145/3587819.3590969},
booktitle = {Proceedings of the 14th ACM Multimedia Systems Conference},
pages = {1–12},
numpages = {12},
location = {Vancouver, BC, Canada},
series = {MMSys '23}
}

The ADΔER Framework: Tools for Event Video Representations

@inproceedings{Freeman23-0,
  title = {The ADΔER Framework: Tools for Event Video Representations},
  author = {Andrew C. Freeman},
  year = {2023},
  doi = {10.1145/3587819.3593028},
  url = {https://doi.org/10.1145/3587819.3593028},
  researchr = {https://researchr.org/publication/Freeman23-0},
  cites = {0},
  citedby = {0},
  pages = {343-347},
  booktitle = {Proceedings of the 14th Conference on ACM Multimedia Systems, MMSys 2023, Vancouver, BC, Canada, June 7-10, 2023},
  publisher = {ACM},
}

Motion segmentation and tracking for integrating event cameras

@inproceedings{10.1145/3458305.3463373,
author = {Freeman, Andrew C. and Burgess, Chris and Mayer-Patel, Ketan},
title = {Motion Segmentation and Tracking for Integrating Event Cameras},
year = {2021},
isbn = {9781450384346},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3458305.3463373},
doi = {10.1145/3458305.3463373},
abstract = {Integrating event cameras are asynchronous sensors wherein incident light values may be measured directly through continuous integration, with individual pixels' light sensitivity being adjustable in real time, allowing for extremely high frame rate and high dynamic range video capture. This paper builds on lessons learned with previous attempts to compress event data and presents a new scheme for event compression that has many analogues to traditional framed video compression techniques. We show how traditional video can be transcoded to an event-based representation, and describe the direct encoding of motion data in our event-based representation. Finally, we present experimental results proving how our simple scheme already approaches the state-of-the-art compression performance for slow-motion object tracking. This system introduces an application "in the loop" framework, where the application dynamically informs the camera how sensitive each pixel should be, based on the efficacy of the most recent data received.},
booktitle = {Proceedings of the 12th ACM Multimedia Systems Conference},
pages = {1–11},
numpages = {11},
keywords = {HDR, spike compression, image reconstruction, simulation, event cameras, object tracking, entropy encoding, motion segmentation, asynchronous systems},
location = {Istanbul, Turkey},
series = {MMSys '21}
}

Integrating Event Camera Sensor Emulator

@inproceedings{10.1145/3394171.3414394,
author = {Freeman, Andrew C. and Mayer-Patel, Ketan},
title = {Integrating Event Camera Sensor Emulator},
year = {2020},
isbn = {9781450379885},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3394171.3414394},
doi = {10.1145/3394171.3414394},
abstract = {Event cameras are biologically-inspired sensors that upend the framed, synchronous nature of traditional cameras. Singh et al. proposed a novel sensor design wherein incident light values may be measured directly through continuous integration, with individual pixels' light sensitivity being adjustable in real time, allowing for extremely high frame rate and high dynamic range video capture. Arguing the potential usefulness of this sensor, this paper introduces a system for simulating the sensor's event outputs and pixel firing rate control from 3D-rendered input images.},
booktitle = {Proceedings of the 28th ACM International Conference on Multimedia},
pages = {4503–4505},
numpages = {3},
keywords = {asynchronous systems, image reconstruction, spike compression, event cameras, HDR, simulation},
location = {Seattle, WA, USA},
series = {MM '20}
}

Extension points exported contracts — how you extend this code

FrameValue (Interface)
A trait for types that can be used as the value of a pixel in a `Frame`. [5 implementers]
adder-codec-rs/src/framer/scale_intensity.rs
HeaderExtension (Interface)
(no doc) [4 implementers]
adder-codec-core/src/codec/header.rs
Model (Interface)
A [`Model`] is used to calculate the probability of a given symbol occuring in a sequence. The [`Model`] is used both f [1 …
arithmetic-coding-adder-dep/arithmetic-coding-core-adder-dep/src/model/one_shot.rs
TabState (Interface)
(no doc) [2 implementers]
adder-viz/src/main.rs
BitReadExt (Interface)
(no doc) [1 implementers]
arithmetic-coding-adder-dep/src/decoder.rs
DControl (Interface)
Define the shared functions of our `DController` [3 implementers]
adder-codec-rs/src/transcoder/d_controller.rs
WriteCompression (Interface)
(no doc) [3 implementers]
adder-codec-core/src/codec/mod.rs
Model (Interface)
A [`Model`] is used to calculate the probability of a given symbol occuring in a sequence. The [`Model`] is used both f [1 …
arithmetic-coding-adder-dep/arithmetic-coding-core-adder-dep/src/model/max_length.rs

Core symbols most depended-on inside this repo

meta
called by 121
adder-codec-core/src/codec/decoder.rs
len
called by 74
adder-codec-core/src/codec/compressed/fenwick/mod.rs
as_str
called by 42
adder-viz/src/main.rs
flush
called by 41
arithmetic-coding-adder-dep/src/encoder.rs
c_usize
called by 36
adder-codec-core/src/lib.rs
ingest_event
called by 31
adder-codec-rs/src/framer/driver.rs
integrate
called by 31
adder-codec-rs/src/transcoder/event_pixel_tree.rs
digest_event
called by 28
adder-codec-core/src/codec/decoder.rs

Shape

Method 540
Function 228
Class 127
Enum 40
Interface 19

Languages

Rust100%

Modules by API surface

adder-codec-core/src/lib.rs51 symbols
adder-viz/src/utils/slider.rs50 symbols
adder-codec-rs/src/transcoder/source/video.rs39 symbols
adder-codec-rs/src/framer/driver.rs38 symbols
adder-codec-rs/src/transcoder/event_pixel_tree.rs34 symbols
adder-codec-rs/src/raw/stream.rs28 symbols
adder-codec-rs/src/transcoder/source/davis.rs27 symbols
adder-codec-rs/tests/integration_tests.rs26 symbols
adder-codec-core/src/codec/encoder.rs24 symbols
adder-codec-core/src/codec/decoder.rs24 symbols
adder-codec-core/src/codec/compressed/stream.rs23 symbols
arithmetic-coding-adder-dep/src/decoder.rs21 symbols

For agents

$ claude mcp add adder-codec-rs \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page