DISCOVER-Utils
DISCOVER-Utils is a Python utility package for data handling, processing, and annotation of multimedia data. It is designed to work with the DISCOVER framework or as a stand-alone library.
Features
- Data handling — Unified access to streams (audio, video, sensor data) and annotations (discrete, continuous) via file, MongoDB, or URL backends
- Multiple video backends — Choose between decord, imageio, moviepy, or pyav for video decoding
- Dataset management — Iterate over multi-session datasets with
DatasetManagerandDatasetIterator - Processing pipeline — Run DISCOVER server modules from the command line for feature extraction and prediction
- SSI compatibility — Read and write SSI trainer files and XML configurations
Installation
pip install hcai-discover-utils
Optional video backends
# Fast video decoding with decord
pip install hcai-discover-utils[decord]
# PyAV (FFmpeg bindings)
pip install hcai-discover-utils[pyav]
# MoviePy
pip install hcai-discover-utils[pymovie]
Getting Started
Command-line tools
Process data with DISCOVER server modules:
du-process \
--dataset "my_dataset" \
--db_host "127.0.0.1" --db_port "27017" \
--db_user "user" --db_password "pass" \
--trainer_file_path "path/to/trainer.trainer" \
--sessions '["session1", "session2"]' \
--data '[{"src": "db:anno", "scheme": "transcript", "annotator": "test", "role": "testrole"}]'
File mode (no database)
Read inputs and write outputs directly from/to disk, without a NOVA database. Use file: sources and supply a path via uri (static, single session) or uri_template (per-session paths via {dataset} and {session} placeholders):
du-process \
--dataset "my_study" \
--trainer_file_path "path/to/trainer.trainer" \
--sessions '["session_a", "session_b"]' \
--data '[
{
"id": "video",
"type": "input",
"src": "file:stream:video",
"uri_template": "/data/{dataset}/{session}/video.mp4"
},
{
"id": "valence",
"type": "output",
"src": "file:annotation:continuous",
"uri_template": "/outputs/{dataset}/{session}/valence.annotation",
"sample_rate": 30,
"min_val": -1,
"max_val": 1
}
]'
Each session resolves its own input and output paths. Output annotation descriptors may carry scheme metadata that is used when no annotation file exists yet:
-
file:annotation:continuous:sample_rate,min_val,max_val(defaults:1,0,1). -
file:annotation:discrete:classesas a map from class id to a dict of per-class XML attributes (typicallyname, optionallycolor, etc.). The outer key is the canonical id; the writer injects it into the XML automatically. For example:// fragment of a data description entry "classes": { "0": {"name": "neutral", "color": "#888"}, "1": {"name": "happiness", "color": "#ffd700"} }Legacy
{id: name}strings are also accepted and normalized internally to the canonical form.
This matters for modules that resample continuous outputs to the scheme's sample_rate — without explicit metadata, outputs default to 1 Hz.
Notes:
urianduri_templateare filesystem paths (absolute or relative to the working directory). There is no implicit base directory.uri_templateplaceholders that reference{dataset}or{session}must have non-empty values; otherwiseresolve_file_uriraisesValueError.uri_templatetakes precedence overuriwhen both are present.
Python API
from discover_utils.data.provider.data_manager import DatasetManager
# Set up a dataset manager for your sessions
dm = DatasetManager(
dataset="my_dataset",
db_host="127.0.0.1",
db_port=27017,
db_user="user",
db_password="pass",
sessions=["session1"],
data_description=[...],
)
Exploring a database
When you don't already know the dataset, scheme, or annotator names, use the exploration queries on the MongoDB handler to discover what's available. They are read-only and return lightweight metadata (no stream files or annotation labels are loaded):
from discover_utils.data.handler.nova_db_handler import NovaDBHandler
db = NovaDBHandler(
db_host="127.0.0.1", db_port=27017, db_user="user", db_password="pass",
)
db.list_datasets() # datasets you can read
db.list_sessions("my_dataset") # session names
db.list_scheme_names("my_dataset") # scheme names
db.list_schemes("my_dataset") # [{name, type}, ...]
db.list_roles("my_dataset") # role names
db.list_annotators("my_dataset") # annotator names
db.list_streams("my_dataset") # stream metadata (no files read)
# which annotations exist for a session, without loading any labels
db.list_annotations("my_dataset", session="session1")
# -> [{session, annotator, role, scheme, isFinished, isLocked}, ...]
The same methods are inherited by AnnotationHandler, StreamHandler, and
SessionHandler, so you can explore and load through a single handler instance.
Documentation
Full API documentation is available at hcmlab.github.io/discover-utils/docbuild/.
Citation
If you use DISCOVER or DISCOVER-Utils in your research, please cite:
@article{hallmen2025discover,
title = {DISCOVER: a Data-driven Interactive System for Comprehensive
Observation, Visualization, and ExploRation of human behavior},
author = {Hallmen, Tobias and Schiller, Dominik and others},
journal = {Frontiers in Digital Health},
volume = {7},
pages = {1638539},
year = {2025},
publisher = {Frontiers}
}
License
This project is licensed under the GNU General Public License v3.0.
Metadata
Release files for hcai-discover-utils 1.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| hcai_discover_utils-1.2.1.tar.gz | 87.3 kB | Without provenance | Details for hcai_discover_utils-1.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| hcai_discover_utils-1.2.1-py3-none-any.whl | Python 3 | none | any | Details for hcai_discover_utils-1.2.1-py3-none-any.whl |
Total release size: 180.0 kB
Release files / hcai_discover_utils-1.2.1.tar.gz
| Download URL | hcai_discover_utils-1.2.1.tar.gz |
|---|---|
| Size | 87.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e14037590cc635e98b03e52b606c0a39046075f9a84e9d105c660c87b53ac325
|
|
BLAKE2b-256 checksum How to use checksums |
3d9788f4ace769b5e824e41c782b9fdf732c728c4759018262d0927cf759ef39
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|
Release files / hcai_discover_utils-1.2.1-py3-none-any.whl
| Download URL | hcai_discover_utils-1.2.1-py3-none-any.whl |
|---|---|
| Size | 92.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2d62bfe56159d3a0371b33adcbb0d7b3df04fcf11c46c260d7788e629d46e6c9
|
|
BLAKE2b-256 checksum How to use checksums |
fdb84dd32024c2e3aa7b95eabe6d3b1d612384c08571a8fd027795949f86fdba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|
Security for hcai-discover-utils 1.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.