telekinesis-dataengine 0.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
File without changes
@@ -0,0 +1,150 @@
1
+ Metadata-Version: 2.4
2
+ Name: telekinesis-dataengine
3
+ Version: 0.0.2
4
+ Summary: Data-collection logging (MCAP over Zenoh) and detection-dataset tooling (YOLO / RF-DETR) for the Telekinesis SDK.
5
+ Author-email: Telekinesis <support@telekinesis.ai>
6
+ License-Expression: LicenseRef-Proprietary
7
+ Project-URL: Homepage, https://telekinesis.ai
8
+ Project-URL: Documentation, https://docs.telekinesis.ai
9
+ Project-URL: Telekinesis Examples Repository, https://github.com/telekinesis-ai/telekinesis-examples
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Topic :: Software Development :: Libraries
17
+ Requires-Python: >=3.10
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE.txt
20
+ Requires-Dist: babyros>=0.1.6
21
+ Requires-Dist: mcap>=1.0.0
22
+ Requires-Dist: loguru>=0.5.0
23
+ Requires-Dist: numpy>=1.26.0
24
+ Requires-Dist: pillow>=9.0.0
25
+ Requires-Dist: pyyaml>=6.0
26
+ Requires-Dist: telekinesis-datatypes>=0.2.3
27
+ Provides-Extra: viz
28
+ Requires-Dist: fiftyone==1.17.0; extra == "viz"
29
+ Provides-Extra: dev
30
+ Requires-Dist: ruff==0.15.8; extra == "dev"
31
+ Requires-Dist: pylint==4.0.5; extra == "dev"
32
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
33
+ Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
34
+ Dynamic: license-file
35
+
36
+ <div align="center">
37
+ <p>
38
+ <a align="center" href="" target="_blank">
39
+ <img
40
+ width="100%"
41
+ src="https://telekinesis-public-assets.s3.us-east-1.amazonaws.com/Telekinesis+Banner.png"
42
+ >
43
+ </a>
44
+ </p>
45
+
46
+ <br>
47
+
48
+ [Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples)
49
+ <br>
50
+
51
+ [![PyPI version](https://img.shields.io/pypi/v/telekinesis-dataengine)](https://pypi.org/project/telekinesis-dataengine/)
52
+ [![License](https://img.shields.io/pypi/l/telekinesis-dataengine)](https://pypi.org/project/telekinesis-dataengine/)
53
+ [![Python versions](https://img.shields.io/pypi/pyversions/telekinesis-dataengine)](https://pypi.org/project/telekinesis-dataengine/)
54
+
55
+ </div>
56
+
57
+ <p align="center">
58
+ <a href="https://github.com/telekinesis-ai">GitHub</a>
59
+ &nbsp;•&nbsp;
60
+ <a href="https://www.linkedin.com/company/telekinesis-ai/">LinkedIn</a>
61
+ &nbsp;•&nbsp;
62
+ <a href="https://x.com/telekinesis_ai">X</a>
63
+ &nbsp;•&nbsp;
64
+ <a href="https://discord.gg/7NnQ3bQHqm">Discord</a>
65
+ </p>
66
+
67
+
68
+ # Telekinesis Data Engine
69
+
70
+ Telekinesis Data Engine turns real-world, online-collected robot and perception data into standard, trainable datasets within the Telekinesis ecosystem.
71
+
72
+ ## Features
73
+
74
+ It includes:
75
+ - MCAP logging: capture every publisher on the Zenoh network into a single self-describing `.mcap` file, and read it back into live objects
76
+ - Detection-dataset logging: write labelled frames straight to a trainable **YOLO** (Ultralytics) or **RF-DETR** (COCO) dataset, with automatic train/val/test routing
77
+ - Decoupled pub/sub writers so disk I/O never stalls the capture loop
78
+ - Lossless conversion and merging between the YOLO and COCO / RF-DETR layouts
79
+ - FiftyOne-based visualization of detection datasets
80
+
81
+ ## Requirements
82
+ Current support for Python versions - `3.10`, `3.11`, `3.12`.
83
+
84
+
85
+ **Note**
86
+ - Telekinesis Data Engine is currently in its early development phase (pre-1.0).
87
+ - There will be continuous **version updates** which introduce new features and optimizations. To have the latest features, please always install or upgrade to the **latest version of the package.**
88
+
89
+
90
+ ## Installation
91
+
92
+ ```bash
93
+ pip install telekinesis-dataengine
94
+ ```
95
+
96
+ ## Example
97
+
98
+ Run a sample python code to quickly test your installation.
99
+
100
+ 1. Create a `Python` file named `dataengine_example.py` in a directory of your choice, and copy paste the below:
101
+
102
+ ```python
103
+ import numpy as np
104
+ from telekinesis.dataengine import DetectionLogger
105
+
106
+ # Create a logger that writes an Ultralytics YOLO dataset.
107
+ # categories=None builds the class table dynamically from what you log.
108
+ logger = DetectionLogger.create("yolo", "results/demo_dataset", mode="overwrite")
109
+
110
+ # A labelled frame: a raw image (HxWxC) + COCO-style boxes [x, y, w, h].
111
+ image = np.zeros((480, 640, 3), dtype=np.uint8)
112
+ annotations = [{"category_id": 0, "bbox": [100, 120, 80, 60]}]
113
+
114
+ logger.log(image, annotations) # auto-routed 80/10/10 across train/val/test
115
+ logger.close() # writes images/, labels/, and data.yaml
116
+
117
+ print("Dataset written to results/demo_dataset")
118
+ ```
119
+
120
+ 2. On a terminal, navigate to the directory where `dataengine_example.py` was created, and run:
121
+
122
+ ```bash
123
+ python dataengine_example.py
124
+ ```
125
+
126
+ Expected output:
127
+ ```bash
128
+ Dataset written to results/demo_dataset
129
+ ```
130
+
131
+ Swap `"yolo"` → `"rfdetr"` to emit a COCO dataset instead — the call sites stay the same.
132
+
133
+ You are now set up with Telekinesis Data Engine.
134
+
135
+ ## Resources
136
+
137
+ - Examples
138
+ Runnable usage examples for the Telekinesis SDK: [Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples)
139
+
140
+ - Documentation
141
+ Full SDK documentation and usage details: [Telekinesis Documentation](https://docs.telekinesis.ai)
142
+
143
+ - Development
144
+ Building, testing, and contributing to this package: [DEVELOPMENT.md](DEVELOPMENT.md)
145
+
146
+ ## Support
147
+
148
+ For issues and questions:
149
+ - Create an [issue](https://gitlab.com/telekinesis/data-engine/-/issues) in the GitLab repository.
150
+ - Contact the Telekinesis development team at support@telekinesis.ai or on [Discord](https://discord.com/invite/7NnQ3bQHqm).
@@ -0,0 +1,115 @@
1
+ <div align="center">
2
+ <p>
3
+ <a align="center" href="" target="_blank">
4
+ <img
5
+ width="100%"
6
+ src="https://telekinesis-public-assets.s3.us-east-1.amazonaws.com/Telekinesis+Banner.png"
7
+ >
8
+ </a>
9
+ </p>
10
+
11
+ <br>
12
+
13
+ [Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples)
14
+ <br>
15
+
16
+ [![PyPI version](https://img.shields.io/pypi/v/telekinesis-dataengine)](https://pypi.org/project/telekinesis-dataengine/)
17
+ [![License](https://img.shields.io/pypi/l/telekinesis-dataengine)](https://pypi.org/project/telekinesis-dataengine/)
18
+ [![Python versions](https://img.shields.io/pypi/pyversions/telekinesis-dataengine)](https://pypi.org/project/telekinesis-dataengine/)
19
+
20
+ </div>
21
+
22
+ <p align="center">
23
+ <a href="https://github.com/telekinesis-ai">GitHub</a>
24
+ &nbsp;•&nbsp;
25
+ <a href="https://www.linkedin.com/company/telekinesis-ai/">LinkedIn</a>
26
+ &nbsp;•&nbsp;
27
+ <a href="https://x.com/telekinesis_ai">X</a>
28
+ &nbsp;•&nbsp;
29
+ <a href="https://discord.gg/7NnQ3bQHqm">Discord</a>
30
+ </p>
31
+
32
+
33
+ # Telekinesis Data Engine
34
+
35
+ Telekinesis Data Engine turns real-world, online-collected robot and perception data into standard, trainable datasets within the Telekinesis ecosystem.
36
+
37
+ ## Features
38
+
39
+ It includes:
40
+ - MCAP logging: capture every publisher on the Zenoh network into a single self-describing `.mcap` file, and read it back into live objects
41
+ - Detection-dataset logging: write labelled frames straight to a trainable **YOLO** (Ultralytics) or **RF-DETR** (COCO) dataset, with automatic train/val/test routing
42
+ - Decoupled pub/sub writers so disk I/O never stalls the capture loop
43
+ - Lossless conversion and merging between the YOLO and COCO / RF-DETR layouts
44
+ - FiftyOne-based visualization of detection datasets
45
+
46
+ ## Requirements
47
+ Current support for Python versions - `3.10`, `3.11`, `3.12`.
48
+
49
+
50
+ **Note**
51
+ - Telekinesis Data Engine is currently in its early development phase (pre-1.0).
52
+ - There will be continuous **version updates** which introduce new features and optimizations. To have the latest features, please always install or upgrade to the **latest version of the package.**
53
+
54
+
55
+ ## Installation
56
+
57
+ ```bash
58
+ pip install telekinesis-dataengine
59
+ ```
60
+
61
+ ## Example
62
+
63
+ Run a sample python code to quickly test your installation.
64
+
65
+ 1. Create a `Python` file named `dataengine_example.py` in a directory of your choice, and copy paste the below:
66
+
67
+ ```python
68
+ import numpy as np
69
+ from telekinesis.dataengine import DetectionLogger
70
+
71
+ # Create a logger that writes an Ultralytics YOLO dataset.
72
+ # categories=None builds the class table dynamically from what you log.
73
+ logger = DetectionLogger.create("yolo", "results/demo_dataset", mode="overwrite")
74
+
75
+ # A labelled frame: a raw image (HxWxC) + COCO-style boxes [x, y, w, h].
76
+ image = np.zeros((480, 640, 3), dtype=np.uint8)
77
+ annotations = [{"category_id": 0, "bbox": [100, 120, 80, 60]}]
78
+
79
+ logger.log(image, annotations) # auto-routed 80/10/10 across train/val/test
80
+ logger.close() # writes images/, labels/, and data.yaml
81
+
82
+ print("Dataset written to results/demo_dataset")
83
+ ```
84
+
85
+ 2. On a terminal, navigate to the directory where `dataengine_example.py` was created, and run:
86
+
87
+ ```bash
88
+ python dataengine_example.py
89
+ ```
90
+
91
+ Expected output:
92
+ ```bash
93
+ Dataset written to results/demo_dataset
94
+ ```
95
+
96
+ Swap `"yolo"` → `"rfdetr"` to emit a COCO dataset instead — the call sites stay the same.
97
+
98
+ You are now set up with Telekinesis Data Engine.
99
+
100
+ ## Resources
101
+
102
+ - Examples
103
+ Runnable usage examples for the Telekinesis SDK: [Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples)
104
+
105
+ - Documentation
106
+ Full SDK documentation and usage details: [Telekinesis Documentation](https://docs.telekinesis.ai)
107
+
108
+ - Development
109
+ Building, testing, and contributing to this package: [DEVELOPMENT.md](DEVELOPMENT.md)
110
+
111
+ ## Support
112
+
113
+ For issues and questions:
114
+ - Create an [issue](https://gitlab.com/telekinesis/data-engine/-/issues) in the GitLab repository.
115
+ - Contact the Telekinesis development team at support@telekinesis.ai or on [Discord](https://discord.com/invite/7NnQ3bQHqm).
@@ -0,0 +1,70 @@
1
+ [build-system]
2
+ requires = [
3
+ "setuptools",
4
+ ]
5
+ build-backend = "setuptools.build_meta"
6
+
7
+ [project]
8
+ name = "telekinesis-dataengine"
9
+ version = "0.0.2"
10
+ description = "Data-collection logging (MCAP over Zenoh) and detection-dataset tooling (YOLO / RF-DETR) for the Telekinesis SDK."
11
+ readme = "README.md"
12
+ requires-python = ">=3.10"
13
+ license = "LicenseRef-Proprietary"
14
+ license-files = [
15
+ "LICEN[CS]E*",
16
+ ]
17
+ authors = [
18
+ { name = "Telekinesis", email = "support@telekinesis.ai" },
19
+ ]
20
+ classifiers = [
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Operating System :: OS Independent",
26
+ "Intended Audience :: Developers",
27
+ "Topic :: Software Development :: Libraries",
28
+ ]
29
+ dependencies = [
30
+ # babyros is a local/editable Telekinesis package (not on a public index);
31
+ # install it separately, e.g. `pip install -e path/to/babyros`.
32
+ "babyros>=0.1.6",
33
+ "mcap>=1.0.0",
34
+ "loguru>=0.5.0",
35
+ "numpy>=1.26.0",
36
+ "pillow>=9.0.0",
37
+ "pyyaml>=6.0",
38
+ "telekinesis-datatypes>=0.2.3",
39
+ ]
40
+
41
+ [project.optional-dependencies]
42
+ # FiftyOne is only needed by utils.visualize().
43
+ viz = [
44
+ "fiftyone==1.17.0",
45
+ ]
46
+ dev = [
47
+ "ruff==0.15.8",
48
+ "pylint==4.0.5",
49
+ "pytest>=8.0.0",
50
+ "pytest-cov>=5.0.0",
51
+ ]
52
+
53
+ [project.urls]
54
+ Homepage = "https://telekinesis.ai"
55
+ Documentation = "https://docs.telekinesis.ai"
56
+ "Telekinesis Examples Repository" = "https://github.com/telekinesis-ai/telekinesis-examples"
57
+
58
+ [tool.ruff]
59
+ line-length = 100
60
+
61
+ [tool.setuptools.packages.find]
62
+ where = [
63
+ "src",
64
+ ]
65
+ namespaces = true
66
+
67
+ [tool.pytest.ini_options]
68
+ testpaths = ["tests"]
69
+ python_files = ["*_test.py"]
70
+ addopts = "-ra"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,43 @@
1
+ """Public API for the Telekinesis Data Engine.
2
+
3
+ Submodule imports are guarded because their third-party/runtime dependencies
4
+ (``mcap``, ``babyros``, ``telekinesis-datatypes``, Pillow) are optional: a
5
+ partial install should still expose whatever is usable. Any guarded import that
6
+ fails is logged at DEBUG so a genuine error (a bad import, a missing dependency,
7
+ a syntax-level ``ImportError``) is diagnosable instead of silently resurfacing
8
+ later as a misleading ``cannot import name '...'``. ``__all__`` lists only the
9
+ names that actually imported, so ``from telekinesis.dataengine import *`` never
10
+ raises for an unbound name.
11
+ """
12
+
13
+ from loguru import logger as _log
14
+
15
+ __all__: list[str] = []
16
+
17
+ try:
18
+ from telekinesis.dataengine.mcap.logger import MCAPLogger
19
+ except ImportError as e:
20
+ _log.debug(f"MCAPLogger unavailable (optional deps missing?): {e}")
21
+ else:
22
+ __all__.append("MCAPLogger")
23
+
24
+ try:
25
+ from telekinesis.dataengine.detection.logger import (
26
+ DetectionLogger,
27
+ YoloDetectionLogger,
28
+ RfDetrDetectionLogger,
29
+ )
30
+ except ImportError as e:
31
+ _log.debug(f"detection loggers unavailable (optional deps missing?): {e}")
32
+ else:
33
+ __all__ += ["DetectionLogger", "YoloDetectionLogger", "RfDetrDetectionLogger"]
34
+
35
+ try:
36
+ from telekinesis.dataengine.detection.node import (
37
+ DetectionLoggerPublisher,
38
+ DetectionLoggerSubscriber,
39
+ )
40
+ except ImportError as e:
41
+ _log.debug(f"detection pub/sub nodes unavailable (optional deps missing?): {e}")
42
+ else:
43
+ __all__ += ["DetectionLoggerPublisher", "DetectionLoggerSubscriber"]