Video and data IO tools for Python.
Links: API documentation, GitHub repository
- via conda or mamba:
conda install danionella::daio
- if you prefer pip:
pip install daio[video,h5]
- for development, clone this repository change to the directory containing
pyproject.toml
conda env create -n env_name -f environment.yml
conda activate env_name
pip install -e .
Write video:
from daio.video import VideoReader, VideoWriter
writer = VideoWriter('/path/to/video.mp4', fps=25)
for i in range(20):
frame = np.random.randint(0,255,size=(720,1280), dtype='uint8')
writer.write(frame)
writer.close()
Read video using speed-optimized array-like indexing or iteration:
reader = VideoReader('/path/to/video.mp4')
frame_7 = reader[7]
first10_frames = reader[:10]
for frame in reader:
process_frame(frame)
reader.close()
You can also use with statements to handle file closure:
with VideoWriter('/path/to/video.mp4', fps=25) as writer:
for i in range(20):
frame = np.random.randint(0,255,size=(720,1280), dtype='uint8')
writer.write(frame)
#or
with VideoReader('/path/to/video.mp4') as reader:
frame_7 = reader[7]
Lazily load HDF5 with a dict-like interface (contents are only loaded when accessed):
from daio.h5 import lazyh5
h5 = lazyh5('/path/to/datafile.h5')
b_loaded = h5['b']
e_loaded = h5['c']['e']
h5.keys()
Create a new HDF5 file (or add items to existing file by setting argument readonly=False
):
h5 = lazyh5('test.h5')
h5['a'] = 1
h5['b'] = 'hello'
h5['c'] = {} # create subgroup
h5['c']['e'] = [2,3,4]
Load entire HDF5-file to dict, or save dict to HDF5-file:
# save dict to HDF5 file:
some_dict = dict(a = 1, b = np.random.randn(3,4,5), c = dict(g='nested'), d = 'some_string')
lazyh5('/path/to/datafile.h5').from_dict(some_dict)
# load dict from HDF5 file:
loaded = lazyh5('/path/to/datafile.h5').to_dict()
In Jupyter, you can interactively explore the file structure:
Old interface (expand this)
from daio.h5 import save_to_h5, load_from_h5
# save dict to HDF5 file:
some_dict = dict(a = 1, b = np.random.randn(3,4,5), c = dict(g='nested'), d = 'some_string')
save_to_h5('/path/to/datafile.h5', some_dict)
# load dict from HDF5 file:
dict_loaded = load_from_h5('/path/to/datafile.h5')